bot.wait_for_reaction()使用自定义表情符号进行多重反应

时间:2019-01-02 20:22:21

标签: python discord discord.py

    msg = await bot.send_message(ctx.message.channel, 'test')
    emoji1 = discord.utils.get(bot.get_all_emojis(), name='bow')
    emoji2 = discord.utils.get(bot.get_all_emojis(), name='arrow')
    await bot.add_reaction(msg, emoji1)
    await bot.add_reaction(msg, emoji2)
    res = await bot.wait_for_reaction(emoji=[emoji1,emoji2], message=msg, user=ctx.message.author)
    if res:
        reaction, ctx.message.author = res
        if str(reaction.emoji) == ":bow:521854323022495747":
        ##stuffs
        if str(reaction.emoji) == ":arrow:521913180180447246":
        ##stuffs

我的命令正在运行,但是当我在表情符号中做出反应时,我第二次却无法做出反应,我该怎么办才能在两者中都做出反应? 我一次只能反应一个,如果要在另一个表情符号中反应,则必须再次使用该命令。 请完成答案

1 个答案:

答案 0 :(得分:2)

如果您想在第一次之后再次收听反应,最简单的方法是将反应侦听逻辑置于循环中。下面的循环侦听列表中的反应,并在看到它们时将其删除。这样,例如,某人不能多次使用箭头反应。

msg = await bot.send_message(ctx.message.channel, 'test')
emoji1 = discord.utils.get(bot.get_all_emojis(), name='bow')
emoji2 = discord.utils.get(bot.get_all_emojis(), name='arrow')
await bot.add_reaction(msg, emoji1)
await bot.add_reaction(msg, emoji2)
emojis = [emoji1, emoji2]
while emojis:
    res = await bot.wait_for_reaction(emoji=emojis, message=msg, user=ctx.message.author)
    if res:
        reaction, user = res
        emojis = [e for e in emojis if e != reaction]
        if reaction.emoji == emoji1:
            #stuffs
        if reaction.emoji == emoji2:
            #stuffs