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` в начало файла.
|
- **Решение:** Перенести `from datetime import datetime` в начало файла.
|
||||||
- **Статус:** Исправлено. Импорт вынесен на уровень модуля.
|
- **Статус:** Исправлено. Импорт вынесен на уровень модуля.
|
||||||
|
|
||||||
### 5. Консольная команда `cat` — заглушка
|
### 5. Консольная команда `cat` — заглушка ✅ РЕШЕНО
|
||||||
- **Где:** `console_commands/cat.py`
|
- **Где:** `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()`
|
- **Где:** `bot.py` → `on_command_error()`
|
||||||
- **Проблема:** Ошибки команд просто печатаются в `stdout`. Пользователь в чате не видит, что команда выполнилась с ошибкой.
|
- **Проблема:** Ошибки команд просто печатаются в `stdout`. Пользователь в чате не видит, что команда выполнилась с ошибкой.
|
||||||
- **Решение:** Добавить `await ctx.send("Произошла ошибка при выполнении команды.")` или отправить embed с деталями (если `ctx` не None).
|
- **Решение:** Добавить нейтральное сообщение в Discord и детали в лог.
|
||||||
|
- **Статус:** Исправлено. Детали ошибки → `logger.error` с `exc_info=True`. Пользователю → нейтральное сообщение. Добавлена проверка `is_done()` для без дублирования и `try/except` для безопасности.
|
||||||
|
|
||||||
### 7. Нет `.gitignore` ✅ РЕШЕНО
|
### 7. Нет `.gitignore` ✅ РЕШЕНО
|
||||||
- **Где:** проект
|
- **Где:** проект
|
||||||
|
|||||||
19
bot.py
19
bot.py
@ -1,5 +1,6 @@
|
|||||||
import asyncio
|
import asyncio
|
||||||
import inspect
|
import inspect
|
||||||
|
import logging
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
import threading
|
import threading
|
||||||
@ -12,6 +13,8 @@ from dotenv import load_dotenv
|
|||||||
from commands import ALL_COMMANDS
|
from commands import ALL_COMMANDS
|
||||||
from console_commands import ALL_CONSOLE_COMMANDS
|
from console_commands import ALL_CONSOLE_COMMANDS
|
||||||
|
|
||||||
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
load_dotenv()
|
load_dotenv()
|
||||||
|
|
||||||
intents = discord.Intents.default()
|
intents = discord.Intents.default()
|
||||||
@ -37,7 +40,21 @@ async def on_ready():
|
|||||||
async def on_command_error(ctx, error):
|
async def on_command_error(ctx, error):
|
||||||
if isinstance(error, CommandNotFound):
|
if isinstance(error, CommandNotFound):
|
||||||
return
|
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")
|
@bot.command(name="msg")
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user