我一直在尝试设置一个机器人,当他对一条消息用“: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)
答案 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