我不明白为什么反应角色什么都不做?

2024-04-25 17:11:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直在尝试设置一个机器人,当一个新用户加入我的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条回答

您必须检查频道的id

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

我将在这里使用另一个名为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

相关问题 更多 >