用户添加反应Discord.py时发挥作用

时间:2018-09-06 19:20:56

标签: python python-3.x discord 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天前)< / p>

3 个答案:

答案 0 :(得分:1)

返回后,您有一个;
另外,您使用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)

应该工作正常

答案 1 :(得分:1)

@tristo @帕特里克·豪 谢谢你们!效果很好...我混合了您的两个想法并提出了这个想法,效果很好!

@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)

感谢很多人!

答案 2 :(得分:0)

on_reaction_add事件受到一些限制,因为它仅由存储在Client.messages双端队列中的消息触发。这是一个缓存(默认大小为5000),可阻止您的漫游器响应旧消息的活动。如果您重新启动bot,它仍然会“监视”该消息,没有任何保证。

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

@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)