discord.py在对特定消息添加反应时如何发挥特定作用

时间:2020-09-05 16:50:53

标签: discord.py

经过研究,我发现自己在这里写: 我希望当用户对特定消息做出反应时,他必须给它一个角色,然后取消另一个角色。 但是尝试一下,我无法在这里找到我使用的代码:

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

2 个答案:

答案 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)。这应该对您有用。