on_raw_reaction_add(有效负载)故障排除



嘿,我正在用Python开发一个Discord机器人。 以下是文档: https://discordpy.readthedocs.io/en/latest/index.html

如果用户对消息做出反应,此程序应为用户提供角色

我试图在函数本身中定义ctx

@client.event
async def on_raw_reaction_add(payload):
member = discord.utils.get(client.get_all_members())
role = discord.utils.find(lambda r: r.name == "check-in", ctx.guild.roles)
check_in = ["612637944544624690"]
if str(payload.channel_id) in check_in:
await client.add_roles(member, role, reason="check-in")

这是函数本身中没有ctx的错误:

Ignoring exception in on_raw_reaction_add
Traceback (most recent call last):
File "C:UserskaitrAnaconda3envstutoriallibsite-packagesdiscordclient.py", line 270, in _run_event
await coro(*args, **kwargs)
File "C:/Users/kaitr/PycharmProjects/Discord Tutorial/bot.py", line 39, in on_raw_reaction_add
role = discord.utils.find(lambda r: r.name == "check-in", ctx.guild.roles)
NameError: name 'ctx' is not defined

这就是函数本身中ctx的错误:

Ignoring exception in on_raw_reaction_add
Traceback (most recent call last):
File "C:UserskaitrAnaconda3envstutoriallibsite-packagesdiscordclient.py", line 270, in _run_event
await coro(*args, **kwargs)
TypeError: on_raw_reaction_add() missing 1 required positional argument: 'ctx'

您无权访问调用上下文,因为这不是命令。 您只能使用有效负载的属性,即RawReactionActionEvent对象。 这包括一个可用于获取公会的guild_id属性:

@client.event
async def on_raw_reaction_add(payload):
if payload.guild_id is None:
return  # Reaction is on a private message
guild = client.get_guild(payload.guild_id)
role = discord.utils.get(guild.roles, name="check-in")
member = guild.get_member(payload.user_id)
if str(payload.channel_id) in check_in:
await member.add_roles(role, reason="check-in")

最新更新