fix: добавить обработку ошибок в commands/morning.py

Если run_morning выбрасывает исключение, ошибка теперь
перехватывается: логируется с exc_info, пользователю
отправлено сообщение об ошибке. Тест обновлён — проверяется
что исключение не пробрасывается наружу.
This commit is contained in:
deadzilla 2026-07-22 22:36:55 +05:00
parent 0f944eafe7
commit 78106e7b4c
2 changed files with 13 additions and 5 deletions

View File

@ -13,5 +13,10 @@ class Morning(commands.Cog):
async def morning(self, ctx: commands.Context) -> None: async def morning(self, ctx: commands.Context) -> None:
"""Погода, лучшие статьи за сутки и котик""" """Погода, лучшие статьи за сутки и котик"""
logger.info("%s: !morning запущен", ctx.author) logger.info("%s: !morning запущен", ctx.author)
await run_morning(ctx.bot, ctx.channel) try:
logger.info("%s: !morning завершен", ctx.author) await run_morning(ctx.bot, ctx.channel)
except Exception:
logger.error("%s: !morning ошибка", ctx.author, exc_info=True)
await ctx.send("Ошибка при выполнении команды. Попробуйте позже.")
else:
logger.info("%s: !morning завершен", ctx.author)

View File

@ -72,7 +72,7 @@ class TestMorningCommand:
@pytest.mark.asyncio @pytest.mark.asyncio
async def test_morning_run_morning_raises(self) -> None: async def test_morning_run_morning_raises(self) -> None:
"""Ошибка в run_morning должна пробрасываться.""" """Ошибка в run_morning ловится, пользователю отправлено сообщение."""
from commands.morning import Morning from commands.morning import Morning
cog = Morning() cog = Morning()
@ -80,5 +80,8 @@ class TestMorningCommand:
with patch("commands.morning.run_morning", new_callable=AsyncMock) as mock_run: with patch("commands.morning.run_morning", new_callable=AsyncMock) as mock_run:
mock_run.side_effect = Exception("api error") mock_run.side_effect = Exception("api error")
with pytest.raises(Exception, match="api error"): await cog.morning(cog, ctx)
await cog.morning(cog, ctx)
ctx.send.assert_awaited_once()
message = ctx.send.call_args[0][0]
assert "Ошибка" in message