Вопросы

Ошибка при добавлении ролей реакции в 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

Читать:
Как динамически установить значение по умолчанию в WTForms RadioField?

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

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

Похожие записи

Странное поведение / проблемы с функцией Google Cloud (триггер https)

admin

Невозможно отправить сигнал с помощью pthread_cond_signal другому процессу в C

admin

WPF добавляет новую строку в заполненную таблицу данных из БД

admin

как отображать предварительно загруженные изображения кеша в приложении flutter

admin

Файл дампа ядра не создается после ошибки сегментации в macOS Big Sur

admin

Сохранение файла в / tmp в лямбде изнутри папки

admin