Как диагностировать при добавления строчки @commands.has_permissions в терминале при запуске выдает ошибку?
Ссылка скопирована
Сейчас ситуация такая: недавно написал бота для дискорда, сегодня попытался запустить и терминал выдает ошибку в строчке:
@commands.has_permissions(administrator = True)
Сейчас ситуация такая: пишет что ошибка связанна с @, при попытке убрать пишет ошибку связанную с commands.
Вот сам код:
@bot.command() async def очс(ctx, member: disnake.Member, *, reason="ОЧС"): @commands.has_permissions(administrator = True) await ctx.send(f"Администратор {ctx.author.mention} занёс пользователя {member.mention} в Общий Черный Список Проекта") await member.ban(reason=reason)
Сейчас ситуация такая: uPD: Проблему решил, нужно было поднять строчку
Нужно решить такую задачу?
Заказать помощь
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Лучший ответ
1
Другие ответы (0)
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопроскомментарий
Вам также может быть интересно
VPN
Как правильно настроить vless для Android TV?
1 ответ
Pyrogram
Как правильно зарегистрировать юзер бота в Telegram?
1 ответ
печатные-платы
Как заставить запускаться программу M3.exe от компании Hanxing AOI в инспекционной машине на Windows 7 Pro?
1 ответ
SMM
Из-за чего не сохраняется видео в мобильной программе blackmagic?
1 ответ



Декоратор @commands.has_permissions нельзя ставить внутри тела функции команды. Он должен применяться к функции сверху, до async def. Поэтому Python и ругается на @: внутри блока функции декоратор в таком месте синтаксически не имеет смысла. Правильная структура такая:
@bot.command() @commands.has_permissions(administrator=True) async def очс(ctx, member: disnake.Member, *, reason="ОЧС"): await ctx.send( f"Администратор {ctx.author.mention} занёс пользователя {member.mention} " f"в Общий Черный Список Проекта" ) await member.ban(reason=reason)
Если используете disnake, убедитесь, что импортируете commands именно из disnake.ext:
import disnake from disnake.ext import commands
Также у бота должны быть права банить участников на сервере, а его роль должна быть выше роли пользователя, которого он банит. Проверка administrator=True проверяет права вызывающего пользователя, но не гарантирует, что сам бот может выполнить ban.
Добавьте обработчик ошибки, чтобы бот не падал молча и нормально отвечал пользователю без прав:
@очс.error async def ochs_error(ctx, error): if isinstance(error, commands.MissingPermissions): await ctx.send("У вас нет прав администратора для этой команды.") elif isinstance(error, commands.BotMissingPermissions): await ctx.send("У бота нет прав для бана пользователя.") else: raise error
Если после переноса декоратора появляется ошибка, связанная с commands, почти всегда проблема в импорте или в том, что вы смешали discord.py, py-cord и disnake. Выберите одну библиотеку и используйте ее импорты везде. Для disnake не нужно импортировать commands из discord.ext.
Итог: декораторы всегда идут над функцией, порядок обычно @bot.command(), затем проверки permissions/cooldown. Внутри функции остаются только действия команды.