Add new file
This commit is contained in:
53
core/commands/help.py
Normal file
53
core/commands/help.py
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
"""
|
||||||
|
Команда !help – показывает справку по всем командам или конкретной команде.
|
||||||
|
Алиасы: !справка, /help, /справка.
|
||||||
|
"""
|
||||||
|
|
||||||
|
import logging
|
||||||
|
from core.commands.base import Command
|
||||||
|
|
||||||
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
class HelpCommand(Command):
|
||||||
|
name = "!help"
|
||||||
|
aliases = ["!справка", "/help", "/справка"]
|
||||||
|
|
||||||
|
async def execute(self, msg, args: str, user_jid: str, room_jid: str = None):
|
||||||
|
"""
|
||||||
|
Если указано имя команды – показывает справку по ней.
|
||||||
|
Иначе – список всех доступных команд.
|
||||||
|
"""
|
||||||
|
_, flags, pos = self.parse_args(args)
|
||||||
|
if pos:
|
||||||
|
cmd_name = pos[0].lower()
|
||||||
|
cmd_obj = self.bot.commands.get(cmd_name)
|
||||||
|
if cmd_obj:
|
||||||
|
help_text = cmd_obj.get_help()
|
||||||
|
reply = msg.reply(help_text)
|
||||||
|
if reply:
|
||||||
|
reply.send() # исправлено
|
||||||
|
else:
|
||||||
|
logger.error("Не удалось отправить справку по команде")
|
||||||
|
else:
|
||||||
|
reply = msg.reply(f"❓ Команда '{cmd_name}' не найдена. Напишите `!help` для списка команд.")
|
||||||
|
if reply:
|
||||||
|
reply.send() # исправлено
|
||||||
|
else:
|
||||||
|
logger.error("Не удалось отправить сообщение о неизвестной команде")
|
||||||
|
else:
|
||||||
|
# Общая справка
|
||||||
|
lines = ["**Доступные команды:**"]
|
||||||
|
# Сортируем по имени команды
|
||||||
|
for name, cmd in sorted(self.bot.commands.items()):
|
||||||
|
if name == cmd.name: # только основные имена (без алиасов)
|
||||||
|
lines.append(f" • {cmd.name} – {cmd.get_help().splitlines()[0]}")
|
||||||
|
reply = msg.reply("\n".join(lines))
|
||||||
|
if reply:
|
||||||
|
reply.send() # исправлено
|
||||||
|
else:
|
||||||
|
logger.error("Не удалось отправить общий список команд")
|
||||||
|
|
||||||
|
def get_help(self) -> str:
|
||||||
|
return "Показывает справку. Использование: `!help` или `!help команда`"
|
||||||
Reference in New Issue
Block a user