Ошибка при добавлении ролей реакции в discord.py

Я пытаюсь добавить роль в реакции, и, похоже, она работает нормально до того момента, когда я пытаюсь назначить или удалить роль, я получаю неопределенную ошибку, и я не знаю, как ее отлаживать

Это мой код:

# 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 работает только с кешированными сообщениями   —  person freakrho    schedule 25.03.2021

on_reaction — это внутренний метод, вызываемый из on_raw_reaction_add и on_raw_reaction_remove   —  person freakrho    schedule 25.03.2021

да, но on_reaction_ также является событием, вызываемым при добавлении / удалении реакции, поэтому ошибка может заключаться в том, что она вызывается дважды, один раз вашим кодом в raw_reaction_ и один раз через событие Но я не уверен   —  person freakrho    schedule 25.03.2021

См. также:  Можно ли запустить собственный скрипт Python в потоке данных Apache Beam или Google Cloud

он не определен как событие и не печатается дважды, поэтому я полагаю, что проблема здесь не в этом   —  person freakrho    schedule 25.03.2021

Понравилась статья? Поделиться с друзьями:
IT Шеф
Комментарии: 2
  1. freakrho

    Возможно, ошибка возникает из-за того, что у вас нет on_reaction_add и всех других функций внутри класса и, возможно, отсутствует параметр self, это было бы моим предположением

  2. freakrho

    Ошибка возникла из-за того, что role = server.get_role(int(result.role_id)) возвращал None, я исправил ее, пройдя через 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
    

    Проблема с журналом была связана с тем, что я переопределил функцию ведения журнала и забыл

Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: