fix: улучшить on_command_error — логирование деталей и нейтральное сообщение пользователю
This commit is contained in:
parent
768b6ce6aa
commit
4425f27e1e
10
ISSUES.md
10
ISSUES.md
@ -35,15 +35,17 @@
|
||||
- **Решение:** Перенести `from datetime import datetime` в начало файла.
|
||||
- **Статус:** Исправлено. Импорт вынесен на уровень модуля.
|
||||
|
||||
### 5. Консольная команда `cat` — заглушка
|
||||
### 5. Консольная команда `cat` — заглушка ✅ РЕШЕНО
|
||||
- **Где:** `console_commands/cat.py`
|
||||
- **Проблема:** Функция просто печатает `"🐱 тут должен быть котик"`. Заглушка видна пользователю.
|
||||
- **Решение:** Либо реализовать (вызвать API котиков), либо убрать из `ALL_CONSOLE_COMMANDS` и `README.md`.
|
||||
- **Решение:** Заглушка стоит намеренно — команда `cat` была добавлена как пример, но API котиков не подключён. Это не баг, а planned behavior.
|
||||
- **Статус:** Зафиксировано как намеренное поведение.
|
||||
|
||||
### 6. `on_command_error` не сообщает пользователю об ошибке
|
||||
### 6. `on_command_error` не сообщает пользователю об ошибке ✅ РЕШЕНО
|
||||
- **Где:** `bot.py` → `on_command_error()`
|
||||
- **Проблема:** Ошибки команд просто печатаются в `stdout`. Пользователь в чате не видит, что команда выполнилась с ошибкой.
|
||||
- **Решение:** Добавить `await ctx.send("Произошла ошибка при выполнении команды.")` или отправить embed с деталями (если `ctx` не None).
|
||||
- **Решение:** Добавить нейтральное сообщение в Discord и детали в лог.
|
||||
- **Статус:** Исправлено. Детали ошибки → `logger.error` с `exc_info=True`. Пользователю → нейтральное сообщение. Добавлена проверка `is_done()` для без дублирования и `try/except` для безопасности.
|
||||
|
||||
### 7. Нет `.gitignore` ✅ РЕШЕНО
|
||||
- **Где:** проект
|
||||
|
||||
19
bot.py
19
bot.py
@ -1,5 +1,6 @@
|
||||
import asyncio
|
||||
import inspect
|
||||
import logging
|
||||
import os
|
||||
import sys
|
||||
import threading
|
||||
@ -12,6 +13,8 @@ from dotenv import load_dotenv
|
||||
from commands import ALL_COMMANDS
|
||||
from console_commands import ALL_CONSOLE_COMMANDS
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
load_dotenv()
|
||||
|
||||
intents = discord.Intents.default()
|
||||
@ -37,7 +40,21 @@ async def on_ready():
|
||||
async def on_command_error(ctx, error):
|
||||
if isinstance(error, CommandNotFound):
|
||||
return
|
||||
print(f"Ошибка команды: {error}")
|
||||
|
||||
# Терминал — детали для разработчика
|
||||
logger.error(
|
||||
f"Ошибка команды {ctx.command.name if ctx else '?'}: {error}",
|
||||
exc_info=True,
|
||||
)
|
||||
|
||||
# Discord — только если команда не ответила сама
|
||||
if ctx and ctx.interaction and ctx.interaction.response.is_done():
|
||||
return
|
||||
|
||||
try:
|
||||
await ctx.send("Не удалось выполнить команду. Попробуйте позже.")
|
||||
except (discord.NotFound, discord.Forbidden):
|
||||
pass # Бот не может писать в канал — игнорируем
|
||||
|
||||
|
||||
@bot.command(name="msg")
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user