繁体   English   中英

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

[英]give role when a user add reaction 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,然后我的机器人发送了一条带有“角色 = 表情符号”内容的嵌入消息。 像 CSGO=:runner: 然后将这些反应表情符号添加到它的消息(嵌入)现在我想说如果用户点击这些表情符号之一机器人必须给他/她一个像 CSGO_P 这样的角色

顺便说一句,我一开始想出了一个 on_message 事件,它运行良好,但我认为如果他们添加反应而不是输入例如 !CSGO 会更加用户友好,而且我刚刚开始使用 python(2 天前)

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

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

非常感谢你们!

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)

你有一个; 你回来后。
此外,您使用user.reaction.emoji ,而不是仅仅的reaction.emoji
这个

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

应该工作正常

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM