Я пытаюсь добавить роль в реакции, и, похоже, она работает нормально до того момента, когда я пытаюсь назначить или удалить роль, я получаю неопределенную ошибку, и я не знаю, как ее отлаживать
Это мой код:
# 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
он не определен как событие и не печатается дважды, поэтому я полагаю, что проблема здесь не в этом — person freakrho schedule 25.03.2021
Возможно, ошибка возникает из-за того, что у вас нет
on_reaction_add
и всех других функций внутри класса и, возможно, отсутствует параметрself
, это было бы моим предположениемОшибка возникла из-за того, что
role = server.get_role(int(result.role_id))
возвращал None, я исправил ее, пройдя черезserver.fetch_roles
Проблема с журналом была связана с тем, что я переопределил функцию ведения журнала и забыл