【问题标题】:give role when a user add reaction Discord.py当用户添加反应 Discord.py 时赋予角色
【发布时间】:2019-02-12 02:49:28
【问题描述】:

我正在为我的不和谐频道开发一个机器人,我正在学习 python,我想在用户添加反应时发挥作用,我想出的代码是这样的

@client.event
async def on_reaction_add(reaction, user):
    ChID = '487165969903517696'
    if reaction.message != ChID:
        return;
    if user.reaction.emoji == "????":
        CSGO = discord.utils.get(user.server.roles, name="CSGO_P")
        await client.add_roles(user, CSGO)

但它不起作用我基本上想要的是我在具有此频道 ID 的频道中发送了一条消息:487165969903517696,然后我的机器人发送了一条带有“role=emoji”内容的嵌入消息。像 CSGO=:runner: 然后将这些反应表情符号添加到它的消息中(嵌入)现在我想说如果用户点击其中一个表情符号,机器人必须给他/她一个类似 CSGO_P 的角色

顺便说一句,我最初想出了一个 on_message 事件,它工作正常,但我认为如果他们添加反应而不是输入例如 !CSGO 并且我刚刚开始使用 python(2 天前)

【问题讨论】:

    标签: python python-3.x discord discord.py


    【解决方案1】:

    @tristo @patrick-haugh 谢谢你们!它工作得很好......我混合了你的两个想法并做了这个,它工作得很好!

    @client.event
    async def on_ready():
        Channel = client.get_channel('YOUR_CHANNEL_ID')
        Text= "YOUR_MESSAGE_HERE"
        Moji = await client.send_message(Channel, Text)
        await client.add_reaction(Moji, emoji='?')
    @client.event
    async def on_reaction_add(reaction, user):
        Channel = client.get_channel('YOUR_CHANNEL_ID')
        if reaction.message.channel.id != Channel
        return
        if reaction.emoji == "?":
          Role = discord.utils.get(user.server.roles, name="YOUR_ROLE_NAME_HERE")
          await client.add_roles(user, Role)
    

    非常感谢大家!

    【讨论】:

      【解决方案2】:

      on_reaction_add 事件有点受限,因为它仅由存储在Client.messages dequeue 中的消息触发。这是一个缓存(默认大小为 5000),可阻止您的机器人响应旧消息的活动。如果您重新启动机器人,无法保证它仍会“观看”该消息。

      您可以做的一件事是在您的机器人登录时发送一条消息,并将角色添加给对该消息作出反应的用户

      @bot.event
      async def on_ready():
          channel = bot.get_channel('487165969903517696')
          role = discord.utils.get(user.server.roles, name="CSGO_P")
          message = await bot.send_message(channel, "React to me!")
          while True:
              reaction = await bot.wait_for_reaction(emoji="?", message=message)
              await bot.add_roles(reaction.message.author, role)
      

      【讨论】:

        【解决方案3】:

        您返回后有一个;
        此外,您使用 user.reaction.emoji 而不仅仅是 reaction.emoji
        这个

        @client.event
        async def on_reaction_add(reaction, user):
          ChID = '487165969903517696'
          if reaction.message.channel.id != ChID:
            return
          if reaction.emoji == "?":
            CSGO = discord.utils.get(user.server.roles, name="CSGO_P")
            await client.add_roles(user, CSGO)
        

        应该没问题

        【讨论】:

        • 为什么在 int 值中使用 ""?
        猜你喜欢
        • 2019-05-31
        • 2019-09-22
        • 2021-08-26
        • 2021-08-04
        • 1970-01-01
        • 2021-05-01
        • 1970-01-01
        • 2021-09-29
        • 1970-01-01
        相关资源
        最近更新 更多