← Все вопросы

Как выдать или снять роль участнику через Discord-бота?

Задан 10 месяцев назад835 просмотров2 ответа
7

Хочу команду, по которой бот выдаёт роль «Участник» тому, кто её написал. Или снимает. Как обращаться к ролям и участникам в discord.py? И почему иногда выдаёт Forbidden?

2 ответа

12
✓ Принятый ответ — помог автору

Берёшь роль по имени и добавляешь/убираешь её участнику:

@bot.command()
async def роль(ctx):
    role = discord.utils.get(ctx.guild.roles, name='Участник')
    if role is None:
        await ctx.send('Роли с таким именем нет')
        return
    await ctx.author.add_roles(role)      # выдать
    # await ctx.author.remove_roles(role) # снять
    await ctx.send(f'Роль {role.name} выдана!')

Про Forbidden (403): это почти всегда права. У бота должно быть право Manage Roles, И — важный момент — роль бота должна стоять ВЫШЕ выдаваемой роли в списке ролей сервера. Бот не может управлять ролями, которые выше его собственной. Подвинь роль бота наверх в Настройки сервера → Роли.

4

Ещё нужен интент members (intents.members = True + включить в портале), иначе бот не «видит» участников полноценно и обращение к ним может не сработать.

Ваш ответ

Войдите, чтобы ответить на вопрос.