检查用户列表是否对消息discord.py rewrite做出了反应

时间:2019-12-04 01:09:37

标签: python bots discord discord.py discord.py-rewrite

我正在尝试向机器人发出命令,以便当消息中提到的每个人都对机器人的响应做出反应时,它会提及原始消息的作者

这就是我尝试过的

        if msg.content.startswith('/iniciar'):
            async with msg.channel.typing():
                mentions = ""
                for mention in msg.mentions:
                    mentions = mentions + " " + mention.mention
                bot_msg: discord.Message = await msg.channel.send(mentions + ' confirmem presença reagindo abaixo.')
                await bot_msg.add_reaction('✅')
                for mention in msg.mentions:
                    def check(reaction, user):
                        return user == mention and str(reaction.emoji) == '✅'
                    try:
                        reaction, user = await client.wait_for('reaction_add', check=check)
                    finally:
                        reactionusers: list = await reaction.users().flatten()
                        reactionusers.remove(reactionusers[0])
                        print(reactionusers)
                        print(msg.mentions)
                        if reactionusers == msg.mentions:
                            await msg.channel.send(msg.author.mention)
                        else:
                            return

1 个答案:

答案 0 :(得分:1)

好的,首先,您需要在当前实现中考虑一些事项。首先,您可能想要将您希望机器人观看的消息ID保存在某个地方。无论这是SQL,还是搁置,等等

为此,在调用/iniciar函数时,请将消息ID保存在您可以检查的某个地方(该僵尸可以检查的地方)。

然后,您将要考虑如何激活此代码块,在您当前的给定代码中看不到。为了您的目的,我建议您使用on_reaction_add,此处提供了文档:https://discordpy.readthedocs.io/en/latest/api.html#discord.on_reaction_add

使用Reaction.message抓取消息对象,并将消息中提及的对象的相关信息读入列表(类似于您的工作方式)。

当用户对消息做出反应并调用on_reaction_add时:

  1. 检查消息是否在您的存储解决方案中,如果这是一条消息,您正在等待继续上的响应
  2. 然后检查做出反应的用户是否在该消息中提到的用户列表中
  3. 如果是,请让该机器人提及消息作者
  4. 最后检查是否所有用户都做出了反应,如果是,则从该SQL / Shelve /无论您拥有的存储中删除消息,以使作者没有进一步的反应。