Система выдачи ролей - PullRequest
       5

Система выдачи ролей

1 голос
/ 03 августа 2020

Есть команда на запрос роли. Я не понимаю, как настроить некоторые функции для реакций.

@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 был написан текст.

Когда вы нажимаете ❎, значит, человеку не была назначена роль, но в zapros2_chanell также был написан определенный текст.

1 Ответ

0 голосов
/ 04 августа 2020

Я использовал событие под названием 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}')
...