web-dev-qa-db-ja.com

discord.pyでユーザーのIDを使用してユーザーに言及するにはどうすればよいですか

私はdiscord.pyを使用して簡単なボットをコーディングしようとしているので、APIのコツを取得するなどの楽しいコマンドから始めました

import discord
import asyncio
client = discord.Client()


@client.event
async def on_message(message):
    # we do not want the bot to reply to itself
    if message.author == client.user:
        return

    if message.content.startswith('!hug'):
        await client.send_message(message.channel, "hugs {0.author.mention}".format(message))

    # Greetings
    if message.content.startswith('hello'):
        msg = 'Hello {0.author.mention}'.format(message)
        await client.send_message(message.channel, msg)        

    # say (id) is the best
    # This is where I am lost. how to mention someone's name or id ?
    if message.content.startswith('!best'):
        mid = User.id('ZERO#6885').format(message)
        await client.send_message(message.channel, '{mid} mentioned')
7
Itachi Sama

だから私は最終的に、他の人がこれから利益を得て、実際に持っていたより痛みが少ないことを願って、数日間の試行錯誤の後にこれを行う方法を見つけました。解決策は最終的に簡単でした。

  if message.content.startswith('!best'):
        myid = '<@201909896357216256>'
        await client.send_message(message.channel, ' : %s is the best ' % myid)
13
Itachi Sama

Userオブジェクトから、属性_User.mention_を使用して、ユーザーのメンションを表す文字列を取得します。 IDからユーザーオブジェクトを取得するには、Client.get_user_info(id)が必要です。ユーザー名( 'ZERO')およびディスクリミネーター( '#6885')からユーザーを取得するには、ユーティリティ関数discord.utils.get(iterable, **attrs)を使用します。コンテキスト内:

_if message.content.startswith('!best'):
    user = discord.utils.get(message.server.members, name = 'ZERO', discriminator = 6885)
    # user = client.get_user_info(id) is used to get User from ID, but OP doesn't need that
    await client.send_message(message.channel, user.mention + ' mentioned')
_
3
Peter G

コマンドで作業している場合は、discord.pyの組み込みコマンド関数を使用するのが最善です。ハグコマンドは次のようになります。

import discord
from discord.ext import commands

@commands.command(pass_context=True)
async def hug(self, ctx):
    await self.bot.say("hugs {}".format(ctx.message.author.mention()))

これは、コードの開始時に次のようなことを行ったことを前提としています。

def __init__(self):
    self.bot = discord.Client(#blah)
2
JayTurnr

ユーザーをメンションし、表示するユーザー名(IDではない)を取得するには、受け入れられた自己回答に_!_を追加する必要があります。

_await client.send_message(message, '<@!20190989635716256>, hi!')
_

メンバーまたはユーザーオブジェクトではなくidのみを持っている場合、実際に最初にUser/Memberオブジェクトを取得するためにget()またはget_user_info(id)を使用したPeter Gの回答を使用しないことをお勧めします。 _.mention_はこの文字列のみを返すため、これらの操作は非常に時間がかかり、必要ありません。

1
abccd