当用户添加反应时赋予角色 Discord.py

新手上路,请多包涵

我正在为我的不和谐频道开发一个机器人,我在学习 python 的同时我想在用户添加反应时发挥作用我想出的代码是这个

@client.event
async def on_reaction_add(reaction, user):
    ChID = '487165969903517696'
    if reaction.message != ChID:
        return;
    if user.reaction.emoji == "🏃":
        CSGO = discord.utils.get(user.server.roles, name="CSGO_P")
        await client.add_roles(user, CSGO)

但它不起作用我基本上想要的是我在频道 ID 为 487165969903517696 的频道中发送了一条消息,然后我的机器人发送了一条包含“role=emoji”内容的嵌入消息。像 CSGO=:runner: 然后将这些反应表情符号添加到它的消息中(嵌入)现在我想说如果用户单击其中一个表情符号,机器人必须给他/她一个像 CSGO_P 这样的角色

顺便说一下,我一开始想出了一个 on_message 事件,它工作正常,但我认为如果他们添加反应而不是打字,它会更加用户友好!CSGO,我刚刚开始使用 python(2 天前)

原文由 Em Jay 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 598
2 个回答

on_reaction_add 事件有点受限,因为它仅由存储在 Client.messages 中的消息触发—出队。这是一个缓存(默认大小 5000),可阻止您的机器人响应旧消息上的活动。如果您重新启动机器人,则无法保证它仍会“观看”该消息。

你可以做的一件事是在你的机器人登录时发送一条消息,并将角色添加到对该消息做出反应的用户

@bot.event
async def on_ready():
    channel = bot.get_channel('487165969903517696')
    role = discord.utils.get(user.server.roles, name="CSGO_P")
    message = await bot.send_message(channel, "React to me!")
    while True:
        reaction = await bot.wait_for_reaction(emoji="🏃", message=message)
        await bot.add_roles(reaction.message.author, role)

原文由 Patrick Haugh 发布,翻译遵循 CC BY-SA 4.0 许可协议

@tristo @patrick-haugh 谢谢你们!它工作正常……我混合了你的两个想法并制作了这个并且它工作得很好!

 @client.event
async def on_ready():
    Channel = client.get_channel(YOUR_CHANNEL_ID)
    Text= "YOUR_MESSAGE_HERE"
    Moji = await Channel.send(text)
    await Moji.add_reaction('🏃')
@client.event
async def on_reaction_add(reaction, user):
    Channel = client.get_channel(YOUR_CHANNEL_ID)
    if reaction.message.channel.id != Channel.id:
        return
    if reaction.emoji == "🏃":
      Role = discord.utils.get(user.server.roles, name="YOUR_ROLE_NAME_HERE")
      await user.add_roles(Role)

非常感谢你们!

原文由 Em Jay 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题