【发布时间】:2021-07-10 21:44:23
【问题描述】:
我的目标是让机器人对自己的消息做出反应,然后如果发送原始命令的用户也做出反应,则在该频道中发送回复。现在,如果命令是在服务器通道中发送的,则该功能可以工作,但如果作为直接消息发送给机器人,它不会等待您的反应。通过在检查过程中打印user.id 和ctx.author.id 的值,我注意到机器人有时会检查它自己的反应(user.id 返回机器人的ID)。我不确定这是否相关,因为无论如何它都会等待服务器频道中正确用户的反应。
wait_for() 和 on_reaction_add 的 API 文档
我希望此功能在服务器中工作并将消息直接发送到机器人,我错过了什么吗?谢谢!
@bot.command()
async def hello(ctx):
msg = await ctx.send(f'Hi {ctx.author.mention}')
await msg.add_reaction('✅')
def check(reaction, user):
print(user.id, ctx.author.id)
return reaction.message.id == msg.id and user.id == ctx.author.id and str(reaction.emoji) == '✅'
try:
reaction, user = await bot.wait_for('reaction_add', timeout=30.0, check=check)
except asyncio.TimeoutError:
pass
else:
await ctx.send('success')
【问题讨论】:
-
你确定它不起作用吗?我无法重现该问题。您可以将用于等待回复的代码放入 DM 中吗?
-
感谢格式化帮助 - 它在 try 下的 hello 函数中:reaction, user = await bot.wait_for('reaction_add', timeout=30.0, check=check)
-
您正在等待调用命令的人对发送的消息做出反应,如果我对随机消息(例如在 DM 中)做出反应,它将不起作用,它必须是机器人发送的那个.
-
不是随机消息,在 DM 中调用命令,并对机器人回复的消息做出反应并做出反应。
-
它对我有用,你启用了哪些意图?
标签: python discord discord.py