From 2690ee72e3f0843c13a8c9416d8b9dec0a36ec87 Mon Sep 17 00:00:00 2001 From: deadzilla Date: Tue, 9 Jun 2026 20:39:43 +0500 Subject: [PATCH] =?UTF-8?q?refactor:=20!hp=20=D1=81=D0=BE=D0=B1=D0=B8?= =?UTF-8?q?=D1=80=D0=B0=D0=B5=D1=82=20=D1=81=D0=BF=D0=B8=D1=81=D0=BE=D0=BA?= =?UTF-8?q?=20=D0=BA=D0=BE=D0=BC=D0=B0=D0=BD=D0=B4=20=D0=B8=D0=B7=20bot.co?= =?UTF-8?q?mmands=20=D0=B2=D0=BC=D0=B5=D1=81=D1=82=D0=BE=20=D1=85=D0=B0?= =?UTF-8?q?=D1=80=D0=B4=D0=BA=D0=BE=D0=B4=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - commands/help.py: список команд генерируется автоматически из ctx.bot.commands с описаниями из docstring - tests/test_help_discord.py: добавлен _make_mock_command() и мок ctx.bot.commands для тестов --- commands/help.py | 23 +++++++++++------------ tests/test_help_discord.py | 16 ++++++++++++++++ 2 files changed, 27 insertions(+), 12 deletions(-) diff --git a/commands/help.py b/commands/help.py index 475a647..9b6eb3b 100644 --- a/commands/help.py +++ b/commands/help.py @@ -12,21 +12,20 @@ class Help(commands.Cog): async def _show_help(self, ctx: commands.Context): """Вывести список команд в простом текстовом формате.""" - commands_list = [ - ("!pg", "Прогноз погоды в Магнитогорске"), - ("!nw", "Топ-5 статей и топ-5 новостей AI с Habr"), - ("!morning", "Утренний дайджест: погода + новости + котик"), - ("!cat", "Случайный котик"), - ("!msg <текст>", "Повторить текст в чате"), - ] + # Собираем команды автоматически из bot.commands + commands_list = [] + for cmd in ctx.bot.commands: + name = cmd.name + # Описание из docstring первой команды (если есть дубликаты) + desc = (cmd.__doc__ or "".strip()).split("\n")[0].strip() + commands_list.append(f"!{name} — {desc}") + + commands_list.sort() message = "Discord Bot — Доступные команды\n" message += "=" * 40 + "\n\n" - - for cmd_name, description in commands_list: - message += f"{cmd_name} — {description}\n" - - message += "\n" + "=" * 40 + message += "\n".join(commands_list) + message += "\n\n" + "=" * 40 await ctx.send(message) diff --git a/tests/test_help_discord.py b/tests/test_help_discord.py index 307a053..7cbbeee 100644 --- a/tests/test_help_discord.py +++ b/tests/test_help_discord.py @@ -7,11 +7,20 @@ from unittest.mock import AsyncMock, MagicMock class TestHelpCommandDiscord: """Тесты для команды help на Discord.""" + @staticmethod + def _make_mock_command(name, doc): + """Создать mock-объект команды с name и docstring.""" + cmd = MagicMock(spec=[]) + cmd.name = name + cmd.__doc__ = doc + return cmd + async def test_show_help_sends_simple_text(self): """Проверка, что команда отправляет простое текстовое сообщение.""" from commands.help import Help mock_ctx = MagicMock() + mock_ctx.bot.commands = [] mock_ctx.send = AsyncMock(return_value=None) helper = Help() @@ -30,6 +39,13 @@ class TestHelpCommandDiscord: return MagicMock() mock_ctx = MagicMock() + mock_ctx.bot.commands = [ + self._make_mock_command("pg", "Прогноз погоды в Магнитогорске"), + self._make_mock_command("nw", "Топ-5 статей и топ-5 новостей AI с Habr"), + self._make_mock_command("morning", "Утренний дайджест: погода + новости + котик"), + self._make_mock_command("cat", "Случайный котик"), + self._make_mock_command("msg", "Повторить текст в чате"), + ] mock_ctx.send = AsyncMock(side_effect=send_side_effect) helper = Help()