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 .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]

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:
"""Все команды должны быть зарегистрированы."""
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