僵尸机器人用户反应

时间:2020-06-04 15:33:44

标签: python bots discord

因此,我正在尝试为不和谐的服务器创建个人的“ 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个反应。然后,玩家必须做出反应。如果✅,它们将被添加到队列中,但是我还没到那一部分... 最好只复制并编辑您的答案中的代码,这样我就可以找出问题所在,以这种方式学习最快

1 个答案:

答案 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('?')