【发布时间】: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