私は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')
だから私は最終的に、他の人がこれから利益を得て、実際に持っていたより痛みが少ないことを願って、数日間の試行錯誤の後にこれを行う方法を見つけました。解決策は最終的に簡単でした。
if message.content.startswith('!best'):
myid = '<@201909896357216256>'
await client.send_message(message.channel, ' : %s is the best ' % myid)
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')
_
コマンドで作業している場合は、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)
ユーザーをメンションし、表示するユーザー名(IDではない)を取得するには、受け入れられた自己回答に_!
_を追加する必要があります。
_await client.send_message(message, '<@!20190989635716256>, hi!')
_
メンバーまたはユーザーオブジェクトではなくidのみを持っている場合、実際に最初にUser/Memberオブジェクトを取得するためにget()
またはget_user_info(id)
を使用したPeter Gの回答を使用しないことをお勧めします。 _.mention
_はこの文字列のみを返すため、これらの操作は非常に時間がかかり、必要ありません。