【问题标题】:Disable Reactions in discord.py在 discord.py 中禁用反应
【发布时间】:2022-08-13 04:13:56
【问题描述】:
@client.event
async def on_raw_reaction_add(payload):
   if payload.emoji.name == \'❌\':
      #code
   elif payload.emoji.name == \'✅\':
      #code

当有人对 x 做出反应时,它会运行代码,但是当他在对 x 做出反应后对勾号做出反应时,它也会在勾号下运行代码,是否有办法在某人已经做出反应后禁用反应?

    标签: python discord discord.py


    【解决方案1】:

    将 payload.user_id 存储在数据结构中,将 user_id 添加到结构中,并确保在运行代码之前检查 payload.user_id 是否不在结构中。

    【讨论】:

      【解决方案2】:

      我是这样做的:

      @client.event
      async def on_reaction_add(reaction, user):
          # Checks reactions only in the logchannel
          if reaction.message.channel.id != logchannel.id:
              return
      
          total_reactions = 0
      
          for r in reaction.message.reactions:
              total_reactions += r.count
      
          member = reaction.message.mentions[0]
          if total_reactions == 3:
              if reaction.emoji == "✅":
                  # Stuff
              elif reaction.emoji == "❌":
                  # Stuff
          elif total_reactions > 3:
              await reaction.remove(user)
      

      我对这段代码的目标是让它始终有 2 个机器人反应和 1 个用户反应。

      我首先通过遍历消息的反应来计算消息的总反应。
      然后,如果有超过 3 个反应(意味着用户反应不止一次),我不执行任何代码,而是立即删除该用户的反应。

      这样一来,在您对 1 个表情符号做出反应后,就不可能对另一个表情符号做出反应,并且其他用户也无法做出反应。

      希望这可以帮助!

      【讨论】:

        猜你喜欢
        • 2021-10-22
        • 2021-05-13
        • 2022-01-24
        • 1970-01-01
        • 2021-03-04
        • 2021-03-12
        • 2021-03-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多