diff --git a/commands/__init__.py b/commands/__init__.py index 390c4ec..d7baf8e 100644 --- a/commands/__init__.py +++ b/commands/__init__.py @@ -2,8 +2,7 @@ from .pg import Pg from .news import News from .cat import Cat from .morning import Morning -from .help import Help from .status import Status from .stats import Stats -ALL_COMMANDS = [Pg, News, Cat, Morning, Help, Status, Stats] +ALL_COMMANDS = [Pg, News, Cat, Morning, Status, Stats] diff --git a/commands/help.py b/commands/help.py deleted file mode 100644 index 269d5ab..0000000 --- a/commands/help.py +++ /dev/null @@ -1,33 +0,0 @@ -from discord.ext import commands - - -class Help(commands.Cog): - """Команда !hp — список всех команд бота""" - - @commands.command(name="hp", hidden=True) - async def hp(self, ctx: commands.Context) -> None: - """Показать список доступных команд""" - await self._show_help(ctx) - - async def _show_help(self, ctx: commands.Context): - """Вывести список команд в простом текстовом формате.""" - # Собираем команды автоматически из bot.commands - # Используем cmd.help — discord.py берёт docstring из callback функции - commands_list = [] - for cmd in ctx.bot.commands: - if cmd.hidden: - continue - name = cmd.name - desc = cmd.help or "Без описания" - if desc == "Без описания": - continue - commands_list.append(f"!{name} — {desc}") - - commands_list.sort() - - message = "Discord Bot — Доступные команды\n" - message += "=" * 40 + "\n\n" - 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 deleted file mode 100644 index dbbec38..0000000 --- a/tests/test_help_discord.py +++ /dev/null @@ -1,72 +0,0 @@ -"""Тесты для команды !hp (help).""" - -import pytest -from unittest.mock import AsyncMock, MagicMock - -from commands.help import Help - - -class TestHelpCommandDiscord: - """Тесты для команды help на Discord.""" - - @staticmethod - def _make_mock_command(name, doc, hidden=False): - """Создать mock-объект команды с name, help и hidden.""" - cmd = MagicMock(spec=[]) - cmd.name = name - cmd.help = doc - cmd.hidden = hidden - return cmd - - async def test_show_help_sends_simple_text(self) -> None: - """Проверка, что команда отправляет простое текстовое сообщение.""" - mock_ctx = MagicMock() - mock_ctx.bot.commands = [] - mock_ctx.send = AsyncMock(return_value=None) - - helper = Help() - await helper._show_help(mock_ctx) - - mock_ctx.send.assert_awaited_once() - - async def test_show_help_message_content(self) -> None: - """Проверка содержания отправленного сообщения.""" - message_calls = [] - - def send_side_effect(text: str, *args, **kwargs): - message_calls.append(text) - 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", "Случайный котик"), - ] - mock_ctx.send = AsyncMock(side_effect=send_side_effect) - - helper = Help() - await helper._show_help(mock_ctx) - - assert len(message_calls) == 1 - message = message_calls[0] - - # Проверка структуры сообщения - assert "Discord Bot — Доступные команды" in message - assert "=" * 40 in message - - # Проверяем наличие всех команд без кавычек - commands = ["!pg", "!nw", "!morning", "!cat"] - for cmd in commands: - assert cmd in message, f"Команда {cmd} не найдена" - - # Проверяем разделение тире между командой и описанием - lines = [line.strip() for line in message.split("\n") if "—" in line] - assert len(lines) >= 4 - - -if __name__ == "__main__": - pytest.main([__file__, "-v"]) diff --git a/tests/test_integration.py b/tests/test_integration.py index 7640e67..6a2ef22 100644 --- a/tests/test_integration.py +++ b/tests/test_integration.py @@ -39,7 +39,7 @@ class TestCogLoading: async def test_commands_registered(self, loaded_bot) -> None: """Все команды должны быть зарегистрированы.""" command_names = {cmd.name for cmd in loaded_bot.commands if cmd.cog is not None} - expected = {"pg", "nw", "morning", "cat", "hp", "stats", "status"} + expected = {"pg", "nw", "morning", "cat", "stats", "status"} assert command_names == expected