因此,我正在尝试为不和谐的服务器创建个人的“ splashbot”。这是它应该执行的命令之一。问题是我不知道如何检查玩家是否选择了其中一种反应。我尝试了一些方法,下面是代码:
@client.command(aliases=['paidsplash'])
async def splash(ctx):
message = await ctx.send('Are you sure you want to do a paid splash?')
emoji1 = '✅'
await message.add_reaction(emoji1)
emoji2 = '❌'
await message.add_reaction(emoji2)
await ctx.message.delete()
client.wait_for("reaction.users()=='✅'", timeout=10.0) #reaction.users()?
await ctx.send('yes')
基本上,玩家输入“ * splash”,机器人将其删除并询问问题,并在上面加上这2个反应。然后,玩家必须做出反应。如果✅,它们将被添加到队列中,但是我还没到那一部分... 最好只复制并编辑您的答案中的代码,这样我就可以找出问题所在,以这种方式学习最快
答案 0 :(得分:0)
client.wait_for
代码不正确。您应该先定义一个检查函数,然后将其传递给wait_for
函数,以便它可以检查反应。
这是来自discord.py文档(https://discordpy.readthedocs.io/en/latest/api.html#discord.Client.wait_for)的一些示例代码,这些代码经过编辑可适合您的情况。从本质上讲,它与示例代码是一样的,只是等待bot(或代码中消息的作者)未做出的反应
def check(reaction, user):
return user != message.author and str(reaction.emoji) == '?'
try:
reaction, user = await client.wait_for('reaction_add', timeout=60.0, check=check)
except asyncio.TimeoutError:
await channel.send('?')
else:
await channel.send('?')