feat: удалить команду !hp вместе с тестами

This commit is contained in:
deadzilla 2026-07-09 09:35:49 +05:00
parent 48ed9aa07b
commit d0a4f45e68
4 changed files with 2 additions and 108 deletions

View File

@ -2,8 +2,7 @@ from .pg import Pg
from .news import News from .news import News
from .cat import Cat from .cat import Cat
from .morning import Morning from .morning import Morning
from .help import Help
from .status import Status from .status import Status
from .stats import Stats from .stats import Stats
ALL_COMMANDS = [Pg, News, Cat, Morning, Help, Status, Stats] ALL_COMMANDS = [Pg, News, Cat, Morning, Status, Stats]

View File

@ -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)

View File

@ -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"])

View File

@ -39,7 +39,7 @@ class TestCogLoading:
async def test_commands_registered(self, loaded_bot) -> None: 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} 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 assert command_names == expected