Как диагностировать при добавления строчки @commands.has_permissions в терминале при запуске выдает ошибку?

Ссылка скопирована
1 ответ

Сейчас ситуация такая: недавно написал бота для дискорда, сегодня попытался запустить и терминал выдает ошибку в строчке:
@commands.has_permissions(administrator = True)
689d8e7300bc7028216914.png

Сейчас ситуация такая: пишет что ошибка связанна с @, при попытке убрать пишет ошибку связанную с commands.
689d8e7ac9e28546659493.png

Вот сам код:

@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
Редакция по БД Ответ

Декоратор @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)

@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

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

@очс.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. Внутри функции остаются только действия команды.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно