как сделать определение и выдачу роли?

Рейтинг: 0Ответов: 1Опубликовано: 08.01.2023

Можно ли сделать чтобы при вводе команды определяло какой в тег в нике у пользователя? например если у пользователя: [Moderator] Nick, то это определялось и выдавалась соответствующая роль по нажатию на реакцию.

@bot.command()
async def роль(ctx):
    await ctx.send("**`[✅ | Запрос отправлен] Запрос был успешно отправлен. Ожидайте проверку заявки модератором`**")
    channel = bot.get_channel(1043881287842275401)
    message = await channel.send("**`Была создана заявка на выдачу роли! Одобрить - ✅ | Отклонить - ❌ | Запросить доказательства - 📋`**")
    await message.add_reaction('✅')
    await message.add_reaction('❌')
    await message.add_reaction('📋')


@bot.event
async def on_raw_reaction_add(payload):
    if payload.user_id == 1025789656865964092:
        return
    if payload.channel_id == 1043881287842275401:
        if str(payload.emoji) == "✅":
            channel1 = bot.get_channel(1043881288504971269)
            await channel1.send(f"**`[✅ | Одобрение] модератор`** {payload.member.mention} **`одобрил ваш запрос на получение роли`**")
    if str(payload.emoji) == "❌":
            channel1 = bot.get_channel(1043881288504971269)
            await channel1.send(f"**`[❌ | Отклонение] модератор`** {payload.member.mention} **`отклонил ваш запрос на получение роли`**")
    if str(payload.emoji) == "📋":
            channel1 = bot.get_channel(1043881288504971269)
            await channel1.send(f"**`[📋 | Проверка] модератор`** {payload.member.mention} **`запрашивает доказательства на получение роли`**")
    #логирование
    if str(payload.emoji) == "✅":
            channel1 = bot.get_channel(1043881287842275402)
            await channel1.send(f"**`[✅ | Одобрение] модератор`** `{payload.member}` **`одобрил запрос на получение роли`**")
    if str(payload.emoji) == "❌":
            channel1 = bot.get_channel(1043881287842275402)
            await channel1.send(f"**`[❌ | Отклонение] модератор`** `{payload.member}` **`отклонил запрос на получение роли`**")
    if str(payload.emoji) == "📋":
            channel1 = bot.get_channel(1043881287842275402)
            await channel1.send(f"**`[📋 | Проверка] модератор`** `{payload.member}` **`запросил доказательства на получение роли`**")

Ответы

▲ 0

Сначала нам необходимо получить гильдию:

    guild = client.get_guild(payload.guild_id)

Далее необходимо получить самого пользователя:

    user = discord.utils.get(guild.members, id=payload.user_id)

Теперь проверяем есть ли у пользователя приписка [Moderator] в нике:

    if "[Moderator]" in user.nick:

Теперь получаем роль либо по имени либо по id:

        role = discord.utils.get(guild.roles, name='name')

И выдаём её:

        await user.add_roles(role)

Код полностью:

    guild = client.get_guild(payload.guild_id)
    user = discord.utils.get(guild.members, id=payload.user_id)
    if "[Moderator]" in user.nick:
        role = discord.utils.get(guild.roles, name='name')
        await user.add_roles(role)