我不明白为什么反应角色不会做任何事情?

时间:2021-04-06 17:36:00

标签: python discord bots

我一直在尝试设置一个机器人,当他对一条消息用“:white_check_mark:”做出反应时,它会给加入我的 Discord 服务器的新用户角色“mietzekatze”。这就像一种验证或批准。所以我找到了一个关于如何做到这一点的解决方案,但它不起作用。我尝试了不同的东西,但它不起作用。它不会返回任何错误,它只是不会做,它应该做什么。请帮忙,我快疯了。

@client.event
async def on_reaction_add(reaction, member):
    Channel = client.get_channel('828667703966433331')
    if reaction.message.channel.id != Channel:
        return
    if reaction.emoji == ":white_check_mark:":
        Role = discord.utils.get(member.guild.roles, name="mietzekatze")
        await member.add_roles(Role)

2 个答案:

答案 0 :(得分:0)

我会在这里使用一个不同的事件,称为 on_raw_reaction_add。为此,您还需要 payload。您可以阅读该 here 的文档。

重新编写的代码如下所示:

@client.event
async def on_raw_reaction_add(payload):
    guild = client.get_guild(payload.guild_id) # Get the guild
    if payload.channel_id == Channel_ID_here: # If the defined channel is correct
        if str(payload.emoji) == "✅":
            role = get(payload.member.guild.roles, name='mietzekatze') # Or id='RoleID'
        else:
            role = get(guild.roles, name=payload.emoji)
        if role is not None:
            await payload.member.add_roles(role) # Add the role
            print("Added role") # Check if the role was added
  • 您可以根据需要使用任意数量的 if str(payload.emoji) == "YourEmoji": 事件,只需将它们传递到其他事件下即可。
  • 请注意,您必须在不带 ' ' 的情况下传递频道/公会的 ID

答案 1 :(得分:-1)

您必须检查频道的 id

if reaction.message.channel.id != Channel.id:
        return