diff --git a/commands/morning.py b/commands/morning.py index eff724c..94b85e5 100644 --- a/commands/morning.py +++ b/commands/morning.py @@ -13,5 +13,10 @@ class Morning(commands.Cog): async def morning(self, ctx: commands.Context) -> None: """Погода, лучшие статьи за сутки и котик""" logger.info("%s: !morning запущен", ctx.author) - await run_morning(ctx.bot, ctx.channel) - logger.info("%s: !morning завершен", ctx.author) + try: + 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) diff --git a/tests/test_commands_morning.py b/tests/test_commands_morning.py index 5bc5480..221db2b 100644 --- a/tests/test_commands_morning.py +++ b/tests/test_commands_morning.py @@ -72,7 +72,7 @@ class TestMorningCommand: @pytest.mark.asyncio async def test_morning_run_morning_raises(self) -> None: - """Ошибка в run_morning должна пробрасываться.""" + """Ошибка в run_morning ловится, пользователю отправлено сообщение.""" from commands.morning import Morning cog = Morning() @@ -80,5 +80,8 @@ class TestMorningCommand: with patch("commands.morning.run_morning", new_callable=AsyncMock) as mock_run: 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