Как вывести ошибку Forbidden discord.py
Здраствуйте!
Не знаю как вывести ошибку discord.errors.Forbidden: 403 Forbidden (error code: 50013): Missing Permissions. Различные методы пробовал, через cog_command_error() и isinstance(error, Forbidden) и isinstanse(error, BotMissingPermissions), но ничего не вышло.
Я делаю это для того, что бы бот отсылал сообщение если у него нет доступа до той или иной команды.
Вот мой код:
async def cog_command_error(self, ctx: Context, error):
if isinstance(error, commands.BotMissingPermissions):
user = ctx.guild.get_member(ctx.author.id)
await user.send('У бота нет доступа до этой команды. Дайте эму доступ `Банить учасников`')
if isinstance(error, commands.MissingPermissions):
kick_emb = discord.Embed(title = 'Ошибка!', color =0xff060e)
kick_emb.add_field(
name = 'Причина ошибки:',
value = 'У вас нету нужных прав для управления этой командой!',
inline = False
)
await ctx.send(embed = kick_emb)
if isinstance(error, commands.errors.MemberNotFound):
kick_emb = discord.Embed(title = 'Ошибка!', color = 0xff060e)
kick_emb.add_field(
name = 'Причина ошибки:',
value = 'Не указано имя пользователя',
inline = False
)
kick_emb.add_field(
name = 'Пример использования команды:',
value = '{}ban @user reason', inline = False
)
await ctx.send(embed = kick_emb)
if isinstance(error, commands.errors.MissingRequiredArgument):
kick_emb = discord.Embed(title = 'Ошибка!', color =0xff060e)
kick_emb.add_field(
name = 'Причина ошибки:',
value = 'Не указана причина',
inline = False
)
kick_emb.add_field(
name = 'Пример использования команды:',
value = '{}ban @user reason',
inline = False
)
await ctx.send(embed = kick_emb)
Traceback:
File "f:\discord bot\cogs\utils\clear.py", line 23, in _clear
await ctx.channel.purge(limit = self.quantity + 1)
File "C:\Users\123\AppData\Local\Programs\Python\Python39\lib\site-packages\discord\channel.py", line 383, in purge
await strategy(to_delete)
File "C:\Users\123\AppData\Local\Programs\Python\Python39\lib\site-packages\discord\channel.py", line 301, in delete_messages
await self._state.http.delete_messages(self.id, message_ids)
File "C:\Users\123\AppData\Local\Programs\Python\Python39\lib\site-packages\discord\http.py", line 248, in request
raise Forbidden(r, data)
discord.errors.Forbidden: 403 Forbidden (error code: 50013): Missing Permissions
Как можно решить мою проблему?
Ответы (3 шт):
Попробуйте сделать отправление сообщений об ошибках через ивент on_command_error.
from discord.ext import commands
class Listeners(commands.Cog):
def __init__(self, bot):
self.bot = bot
@commands.Cog.listener()
async def on_command_error(self, ctx: commands.Context, error):
if isinstance(error, commands.BotMissingPermissions):
user = ctx.guild.get_member(ctx.author.id)
await user.send('У бота нет доступа до этой команды. Дайте эму доступ `Банить учасников`')
Попробуйте использовать декоратор @{тут название функции}.error.
@kick.error
async def kick_error(self, ctx, error):
if isinstance(error, commands.BotMissingPermissions):
# Тут код, если у бота нет прав
@commands.bot_has_permissions(ban_members = True, manage_messages = True)
Добавляете этот рядок где указываете права бота с которыми он сможет использовать ету команду, после этого в ошибках прописываете следующе:
if isinstance(error, BotMissingPermissions):
...
И все.