← Все вопросы
Как выдать или снять роль участнику через Discord-бота?
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 + включить в портале), иначе бот не «видит» участников полноценно и обращение к ним может не сработать.
Ваш ответ
Войдите, чтобы ответить на вопрос.