【问题标题】:Error when adding reaction roles in discord.py在 discord.py 中添加反应角色时出错
【发布时间】:2021-03-30 02:13:50
【问题描述】:

我正在尝试在反应中添加一个角色,并且在我尝试分配或删除一个角色之前它似乎工作正常,我收到一个未指定的错误,我不知道如何调试这个

这是我的代码:

# Events
    @self._client.event
    async def on_raw_reaction_add(payload: discord.RawReactionActionEvent):
        if payload.user_id == self._client.user.id:
            return
        await self.on_reaction_add(payload.message_id, payload.user_id,
                                   payload.channel_id, payload.guild_id, payload.emoji)

    @self._client.event
    async def on_raw_reaction_remove(payload: discord.RawReactionActionEvent):
        if payload.user_id == self._client.user.id:
            return
        await self.on_reaction_remove(payload.message_id, payload.user_id,
                                      payload.channel_id, payload.guild_id, payload.emoji)
# Other methods
async def on_reaction_add(self, message_id: int, user_id: int, channel_id: int, server_id: int, emoji: str):
    await self.on_reaction(message_id, user_id, channel_id, server_id, emoji, True)

async def on_reaction_remove(self, message_id: int, user_id: int, channel_id: int, server_id: int, emoji: str):
    await self.on_reaction(message_id, user_id, channel_id, server_id, emoji, False)

async def on_reaction(self, message_id: int, user_id: int, channel_id: int, server_id: int, emoji: str, add: bool):
    result = self._database.find_reaction_role(str(server_id), str(channel_id), str(message_id), emoji)
    print(result)
    if result is not None:
        server = await self._client.fetch_guild(server_id)  # type: discord.Guild

        role = server.get_role(int(result.role_id))  # type: discord.Role

        user = server.get_member(user_id)
        if user is None:
            user = await server.fetch_member(user_id)  # type: discord.Member

        if user is not None and role is not None:
            if add:
                await user.add_roles(role, reason="reaction")
            else:
                await user.remove_roles(role, reason="reaction")

最后一行失败,控制台出现此错误:

ERROR: root: on_raw_reaction_add

【问题讨论】:

  • 我认为你不应该同时使用 on_raw_reaction_ 和 on_reaction_,我建议使用 raw 作为反应角色,因为 on_reaction_add 仅适用于缓存消息
  • on_reaction 是从 on_raw_reaction_add 和 on_raw_reaction_remove 调用的内部方法
  • 是的,但 on_reaction_ 也是在添加/删除反应时调用的事件,因此错误可能是它被调用了两次,一次由您在 raw_reaction_ 中的代码调用,一次通过事件但我'我不确定
  • 它没有被定义为一个事件并且它不会打印两次,所以我想这不是这里的问题

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


【解决方案1】:

可能出现错误是因为您没有 on_reaction_add 和类中的所有其他函数,并且可能缺少 self 参数,这是我的猜测

【讨论】:

    【解决方案2】:

    发生错误是因为role = server.get_role(int(result.role_id)) 返回无,我通过 server.fetch_roles 修复了它

    @staticmethod
    async def fetch_role(server: discord.Guild, role_id: int) -> discord.Role:
        roles = await server.fetch_roles()
        for role in roles:  # type: discord.Role
            if role.id == role_id:
                return role
    

    日志问题是因为我重写了日志功能而忘记了

    【讨论】:

      猜你喜欢
      • 2021-04-18
      • 2020-10-03
      • 2022-01-19
      • 2019-05-31
      • 2019-02-12
      • 1970-01-01
      • 1970-01-01
      • 2021-09-21
      • 1970-01-01
      相关资源
      最近更新 更多