Проблема: cmd.__doc__ возвращал docstring класса Command из discord.py (одинаковый для всех команд), а не docstring callback-функции. Решение: - Использовать cmd.help вместо cmd.__doc__ для получения описания - Скрыть !hp из списка через hidden=True - Пропускать hidden-команды и команды без описания - Обновить тесты под новый интерфейс
34 lines
1.3 KiB
Python
34 lines
1.3 KiB
Python
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)
|