如果有人提到机器人,我试图让机器人做出回应。我目前的代码是这个
if message.content.startswith('@435379055253127178'):
text = await client.send_message(message.channel, "**Baking a cake**")
await client.send_message(message.channel, "**Baking a cake**")
await client.edit_message(text, "Hi i'm cake bot nice to meet you!")
然而,我没有回应。
答案 0 :(得分:0)
提及存储在名为message.mentions
if discord.utils.get(message.server.members, '435379055253127178') in message.mentions:
text = await client.send_message(message.channel, "**Baking a cake**")
await client.send_message(message.channel, "**Baking a cake**")
await client.edit_message(text, "Hi i'm cake bot nice to meet you!")
但是如果你想手动检查提及,有时候会有!在@和id之间,它们由<>包装。我会使用正则表达式:
from re import match
if match("<@!?435379055253127178>", message.content) is not None:
text = await client.send_message(message.channel, "**Baking a cake**")
await client.send_message(message.channel, "**Baking a cake**")
await client.edit_message(text, "Hi i'm cake bot nice to meet you!")
这将检查用户的提及是否在消息的前面,类似于您尝试执行的操作。由于.mentions
保留了所有提及用户的无序列表。
顺便说一句,如果id是机器人,你就不必对id进行硬编码。
if client.user in message.mentions:
...
答案 1 :(得分:0)
这是我做不到的最好方法
import discord
from discord.ext import commands
client = commands.Bot(command_prefix=">")
@client.event
async def on_message(message):
for x in message.mentions:
if(x==client.user):
await message.channel.send(f":sauropod: did someone mention me?")
await client.process_commands(message)
顺便说一句,您不必在发送消息时使用前缀,而不必像命令那样使用该前缀。无论消息中提到机器人的哪个位置,代码都将触发
答案 2 :(得分:0)
最干净的方法如下:
@client.event
async def on_message(message):
if client.user.mentioned_in(message):
await message.channel.send("hello!")