当用户使用自定义表情符号(Discord.py)响应时赋予角色

时间:2021-07-21 22:44:47

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

以下是我的案例的当前工作代码

我正在为我的 Discord 服务器开发一个机器人,并尝试为有反应的用户分配角色。

我现在的状态是这样的:(我用的是最新的 Python/Discord.py 版本)

import discord
from discord.ext import commands

bot = commands.Bot(intents=intents)


class GetRole(commands.Cog):
    def __init__(self, bot):
        self.bot = bot 
@bot.event
async def on_raw_reacion_add(payload):
   ourMessageID = YourMessageID

   if ourMessageID == payload.message_id:
       member = payload.member
       guild = member.guild

            
      if payload.emoji.name == '<:YouTube:864980517630902302>':
          role = discord.utils.get(guild.roles, name="YouTube")
      elif payload.emoji.name == '<:Twitch:864980843176787988>':
          role = discord.utils.get(guild.roles, name="Twitch")
      elif payload.emoji.name == '<:Discord:864980938068852757>':
          role = discord.utils.get(guild.roles, name="Discord")
      elif payload.emoji.name == '<a:alert:864983948987990081>':
          role = discord.utils.get(guild.roles, name="Community-Events")
      await member.add_roles(role)

(MessageID所指的消息已经发送)
它不会在 Visual Studio 代码中产生错误,但仍不会向对消息做出反应的用户添加角色。

也许是因为 Discord.py 的版本,但我不知道。

2 个答案:

答案 0 :(得分:0)

确保启用了适当的意图。根据 Discord.py API Reference,成员和反应意图都需要使用 on_raw_reaction_add 事件。在 developer portal 中启用它们,并在您的代码中添加意图,如下所示:

intents = discord.Intents.default()
intents.members = True
intents.reactions = True

bot = commands.Bot(intents=intents)

答案 1 :(得分:0)

这是现在的工作代码:

@commands.Cog.listener()
    async def on_raw_reaction_add(self, payload):
        print("test")
        print(payload.emoji.name)

        ourMessageID = 867876893411508234

        if ourMessageID == payload.message_id:
            member = payload.member
            guild = member.guild
            

            if payload.emoji.name == 'YouTube':
                role = discord.utils.get(guild.roles, name="YouTube")

            elif payload.emoji.name == 'Twitch':
                role = discord.utils.get(guild.roles, name="Twitch")

            elif payload.emoji.name == 'Discord':
                role = discord.utils.get(guild.roles, name="Discord")

            elif payload.emoji.name == 'alert':
                role = discord.utils.get(guild.roles, name="Community-Events")

            await member.add_roles(role)

我有错别字并使用了(我认为)过时的 evets 等。现在至少对我来说一切都恢复了