经过研究,我发现自己在这里写:
我希望当用户对特定消息做出反应✅
时,他必须给它一个角色,然后取消另一个角色。
但是尝试一下,我无法在这里找到我使用的代码:
spunta = "✅"
#Avvio del Bot
@client.event
async def on_ready():
channel = client.get_channel(749639084267536464)
global message
message = message.id(751836025697075270)
await message.add_reaction(msg, spunta)
@client.event
async def on_reaction_add(reaction, user):
if reaction.user == client.user:
return
if reaction.message == message and reaction.emoji == spunta:
role = get(user.guild.roles, id=691004248753832007)
await client.add_roles(user, role)
错误:
Ignoring exception in on_ready
Traceback (most recent call last):
File "C:\Users\PC GIUSEPPE\PycharmProjects\LMIIBot Development\venv\lib\site-packages\discord\client.py", line 312, in _run_event
await coro(*args, **kwargs)
File "C:/Users/PC GIUSEPPE/PycharmProjects/LMIIBot Development/LMIIBot Development.py", line 253, in on_ready
message = message.id(751836025697075270)
NameError: name 'message' is not defined
答案 0 :(得分:1)
您可以使用on_raw_reaction_add作为payload
传递RawReactionActionEvent。
注意:我使用msg id查找消息本身
@client.event
async def on_raw_reaction_add(payload):
channel = client.get_channel(payload.channel_id)
message = await channel.fetch_message(payload.message_id)
guild = client.get_guild(payload.guild_id)
reaction = discord.utils.get(message.reactions, emoji=payload.emoji.name)
# only work if it is the client
if payload.member.id == client.user.id:
return
if payload.message_id == 750089806872314038 and reaction.emoji == '✅':
role = discord.utils.get(guild.roles, name='ROLE NAME HERE')
await payload.member.add_roles(role)
await reaction.remove(payload.member)
答案 1 :(得分:0)
由于未定义message
,因此收到此错误。您可以使用fetch_message
仅在特定频道上执行此操作(我不确定该行会是否可行)。因此,在on_ready
事件中,您应将message = message.id()
更改为message = channel.fetch_message(id)
。这应该对您有用。