fix: !hp теперь показывает правильные описания команд
Проблема: cmd.__doc__ возвращал docstring класса Command из discord.py (одинаковый для всех команд), а не docstring callback-функции. Решение: - Использовать cmd.help вместо cmd.__doc__ для получения описания - Скрыть !hp из списка через hidden=True - Пропускать hidden-команды и команды без описания - Обновить тесты под новый интерфейс
This commit is contained in:
parent
a8e9be09c7
commit
48ed9aa07b
@ -4,7 +4,7 @@ from discord.ext import commands
|
|||||||
class Help(commands.Cog):
|
class Help(commands.Cog):
|
||||||
"""Команда !hp — список всех команд бота"""
|
"""Команда !hp — список всех команд бота"""
|
||||||
|
|
||||||
@commands.command(name="hp")
|
@commands.command(name="hp", hidden=True)
|
||||||
async def hp(self, ctx: commands.Context) -> None:
|
async def hp(self, ctx: commands.Context) -> None:
|
||||||
"""Показать список доступных команд"""
|
"""Показать список доступных команд"""
|
||||||
await self._show_help(ctx)
|
await self._show_help(ctx)
|
||||||
@ -12,11 +12,15 @@ class Help(commands.Cog):
|
|||||||
async def _show_help(self, ctx: commands.Context):
|
async def _show_help(self, ctx: commands.Context):
|
||||||
"""Вывести список команд в простом текстовом формате."""
|
"""Вывести список команд в простом текстовом формате."""
|
||||||
# Собираем команды автоматически из bot.commands
|
# Собираем команды автоматически из bot.commands
|
||||||
|
# Используем cmd.help — discord.py берёт docstring из callback функции
|
||||||
commands_list = []
|
commands_list = []
|
||||||
for cmd in ctx.bot.commands:
|
for cmd in ctx.bot.commands:
|
||||||
|
if cmd.hidden:
|
||||||
|
continue
|
||||||
name = cmd.name
|
name = cmd.name
|
||||||
# Описание из docstring первой команды (если есть дубликаты)
|
desc = cmd.help or "Без описания"
|
||||||
desc = (cmd.__doc__ or "".strip()).split("\n")[0].strip()
|
if desc == "Без описания":
|
||||||
|
continue
|
||||||
commands_list.append(f"!{name} — {desc}")
|
commands_list.append(f"!{name} — {desc}")
|
||||||
|
|
||||||
commands_list.sort()
|
commands_list.sort()
|
||||||
|
|||||||
@ -10,11 +10,12 @@ class TestHelpCommandDiscord:
|
|||||||
"""Тесты для команды help на Discord."""
|
"""Тесты для команды help на Discord."""
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def _make_mock_command(name, doc):
|
def _make_mock_command(name, doc, hidden=False):
|
||||||
"""Создать mock-объект команды с name и docstring."""
|
"""Создать mock-объект команды с name, help и hidden."""
|
||||||
cmd = MagicMock(spec=[])
|
cmd = MagicMock(spec=[])
|
||||||
cmd.name = name
|
cmd.name = name
|
||||||
cmd.__doc__ = doc
|
cmd.help = doc
|
||||||
|
cmd.hidden = hidden
|
||||||
return cmd
|
return cmd
|
||||||
|
|
||||||
async def test_show_help_sends_simple_text(self) -> None:
|
async def test_show_help_sends_simple_text(self) -> None:
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user