当我点击一个反应时,我如何给出一个角色?这对我不管用?

2024-03-29 06:29:16 发布

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

我试图确保当你输入一个命令时,会发送一条消息并设置一个反应,那些点击反应的人会得到一个角色,但是当你输入一个命令时,什么都不会发生。 以下是代码本身:

 @client.command(pass_context=True)
 @commands.has_permissions(administrator=True)
 async def mp(self, ctx, payload):
    emb = discord.Embed(title=f'Праздник вазилина', description='Нажми на реакцию что бы получить роль', colour=discord.Color.purple())

    message = await ctx.send(embed=emb) # Возвращаем сообщение после отправки
    message.add_reaction('✅')
    
    member = utils.get(message.guild.members, id=payload.user_id) 

    emoji = str(payload.emoji) 
    roles = utils.get(message.guild.roles, id=config.ROLE[emoji],)


    await member.add_roles(roles)
    print('[SUCCESS] Пользователь {0.display_name} получил новую роль {1.name}'.format(member, role))

    
    await member.send('test')

Tags: 命令sendaddidtruemessageutilsawait
1条回答
网友
1楼 · 发布于 2024-03-29 06:29:16

您确实可以在命令中生成某种“事件”。但是,您的代码包含一些我们必须首先处理的错误

首先:如果你想给一条消息添加一个反应,你必须在它前面加上await,否则它将不起作用,你会得到以下错误:

RuntimeWarning: Enable tracemalloc to get the object allocation traceback

Second:memberemoji在这里没有任何意义,因为您没有包含event。您也不能使用payload

查看以下代码:

@client.command(pass_context=True)
@commands.has_permissions(administrator=True)
async def mp(ctx):
    emb = discord.Embed(title=f'Праздник вазилина', description='Нажми на реакцию что бы получить роль',
                        colour=discord.Color.purple())

    message = await ctx.send(embed=emb)  # Send embed
    await message.add_reaction('✅') # Add reaction

    roles = discord.utils.get(message.guild.roles, id=RoleID) # Replace it with the role ID

    check = lambda reaction, user: client.user != user # Excludes the bot reaction

    while True:
        reaction, user = await client.wait_for('reaction_add', check=check) # Wait for reaction
        if str(reaction.emoji) == "✅":
            await user.add_roles(roles) # Add role
            print('[SUCCESS] Пользователь {0.display_name} получил новую роль {1.name}'.format(user, roles)) # Print

            await user.send('TEST') # Send message to member

为了允许多个反应,我们构建了一个while True“循环”

相关问题 更多 >