角色发布系统

时间:2020-08-02 23:16:53

标签: bots discord.py

有一个请求角色的命令。我不明白如何为反应设置一些功能。

@client.command()
async def role(ctx):

    role = ctx.guild.get_role(703596629860548643)  

    zapros_chanell = client.get_channel(729733881129074768 ) 
    zapros2_chanell = client.get_channel(703596629923725339 ) 
    embed = discord.Embed(title="Запрос роли")
    embed.add_field(name='Запросивший роль', value=ctx.message.author.mention)
    embed.add_field(name='Роль для выдачи', value=role.mention)

    embed.set_thumbnail(url=ctx.guild.icon_url)

    message = await zapros_chanell.send(embed=embed)
    await zapros2_chanell.send(embed = discord.Embed(description = f'{ctx.message.author.mention}, `запрос на выдачу роли был успешно отправлен, ожидайте его рассмотрения модерацией Discord`', color=discord.Color.purple()))
    await message.add_reaction('✅')
    await message.add_reaction('❎')

最重要的是,如果您单击✅,将发布角色,并在zapros2_chanell中将文本写入该人。

因此,当您单击the时,没有给该人指定角色,但是在zapros2_chanell中也写入了某些文本。

1 个答案:

答案 0 :(得分:0)

我使用了一个名为on_raw_reaction_add的事件。检查了一下反应,请记住,它将用✅来赋予行会中的任何消息以角色。这只是概念的证明。

您可以使其仅接受某些渠道的反应,甚至仅接受给定消息ID的反应


@client.command()
async def role(ctx):    
    zapros_chanell = client.get_channel(729733881129074768)
 
    embed = discord.Embed(title="Запрос роли")
    embed.add_field(name='Запросивший роль', value=ctx.message.author.mention)
    embed.add_field(name='Роль для выдачи', value=role.mention)
    embed.set_thumbnail(url=ctx.guild.icon_url)

    message = await zapros_chanell.send(embed=embed)
    await zapros2_chanell.send(embed = discord.Embed(description = f'{ctx.message.author.mention}, `запрос на выдачу роли был успешно отправлен, ожидайте его рассмотрения модерацией Discord`', color=discord.Color.purple()))
    await message.add_reaction('✅')
    await message.add_reaction('❎')
    
@client.event
async def on_raw_reaction_add(payload):
    channel = await client.fetch_channel(payload.channel_id)
    message = await channel.fetch_message(payload.message_id)
    user = await client.fetch_user(payload.user_id)
    emoji = payload.emoji.name
    
    guild = client.get_guild(ID_HERE)
    role = guild.get_role(703596629860548643)  
    zapros2_chanell = client.get_channel(703596629923725339 ) 
    
    if user.id != bot.user.id: # bot to count itself
        if emoji == '✅':
            await client.add_roles(user, role)
            await zapros2_chanell.send(f'{user.name} has been given {role.name}')
        elif emoji == '❎':
          await zapros2_chanell.send(f'{user.name} did not want {role.name}')