← Все вопросы

Как нормально логировать ошибки Discord-бота, чтобы он не падал от любой команды?

Задан 9 месяцев назад605 просмотров2 ответа
6

Бот иногда тихо перестаёт отвечать или падает, а я не понимаю почему — в консоли каша или вообще пусто. Как сделать нормальное логирование и ловить ошибки команд, чтобы видеть, что сломалось?

2 ответа

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

Два уровня. Первый — общий обработчик ошибок команд через on_command_error:

@bot.event
async def on_command_error(ctx, error):
    if isinstance(error, commands.CommandNotFound):
        return  # неизвестная команда — молча игнорим
    await ctx.send('Упс, что-то пошло не так.')
    raise error  # пробросим, чтобы увидеть в логах

Второй — нормальное логирование вместо print:

import logging
logging.basicConfig(
    level=logging.INFO,
    handlers=[logging.FileHandler('bot.log', encoding='utf-8'),
              logging.StreamHandler()]
)

Теперь discord.py и твои логи пишутся и в консоль, и в файл bot.log, и ошибки конкретной команды не роняют бота целиком.

3

Для отдельной команды можно повесить персональный обработчик через @имякоманды.error — удобно, когда у конкретной команды свои частые ошибки (например нет прав или неверный аргумент).

Ваш ответ

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