# -*- coding: utf-8 -*- """ Команды управления режимом обучения: !learn, !stop_learn, !global_learn. Поддерживают флаги --global и --title. В новой архитектуре команды только управляют состоянием learning_mode, индексация выполняется через RAG-сервер. """ import logging from core.commands.base import Command logger = logging.getLogger(__name__) class LearnCommand(Command): name = "!learn" aliases = ["/learn", "!дуфкт", "/дуфкт", "/учись"] async def execute(self, msg, args: str, user_jid: str, room_jid: str = None): """ Включает режим обучения. В личном чате – для личной БЗ (или глобальной с флагом --global). В групповом чате – для комнатной БЗ (флаг --global игнорируется). """ _, flags, _ = self.parse_args(args) is_global = 'global' in flags title = flags.get('title') # Проверка прав на глобальное обучение (только в личном чате) if is_global and room_jid is None: if user_jid not in self.bot.config.admin_jids: reply = msg.reply("⛔ У вас нет прав на глобальное обучение.") if reply: reply.send() return if room_jid: mode = "room" self.bot.learning_mode[user_jid] = (mode, room_jid) if title: reply = msg.reply(f"🎓 Режим обучения ВКЛЮЧЁН для КОМНАТНОЙ БЗ (--title \"{title}\"). При следующей ссылке будет использован заголовок.") else: reply = msg.reply(f"🎓 Режим обучения ВКЛЮЧЁН для КОМНАТНОЙ БЗ. Теперь можно отправить ссылку – она добавится в БЗ комнаты.") else: mode = "global" if is_global else "personal" self.bot.learning_mode[user_jid] = (mode, None) if title: reply = msg.reply(f"🎓 Режим обучения ВКЛЮЧЁН для {'ГЛОБАЛЬНОЙ' if is_global else 'ЛИЧНОЙ'} БЗ (--title \"{title}\").") else: reply = msg.reply(f"🎓 Режим обучения ВКЛЮЧЁН для {'ГЛОБАЛЬНОЙ' if is_global else 'ЛИЧНОЙ'} БЗ.") if reply: reply.send() def get_help(self) -> str: return "Включает режим обучения (следующий файл/ссылка добавятся в БЗ). В личном чате – личная/глобальная, в групповом – комнатная. Флаги: --global (только личный), --title \"Название\"." class StopLearnCommand(Command): name = "!stop_learn" aliases = ["/stop_learn", "/стоп", "!стоп", "!stop"] async def execute(self, msg, args: str, user_jid: str, room_jid: str = None): """Выключает режим обучения для пользователя (в любом контексте).""" self.bot.learning_mode.pop(user_jid, None) reply = msg.reply("✅ Режим обучения ВЫКЛЮЧЕН.") if reply: reply.send() def get_help(self) -> str: return "Выключает режим обучения." class GlobalLearnCommand(Command): name = "!global_learn" aliases = ["/global_learn"] permission = "admin" async def execute(self, msg, args: str, user_jid: str, room_jid: str = None): """ Включает глобальное обучение (только в личном чате, для админов). В групповом чате команда не работает. """ if not self.check_permission(user_jid): reply = msg.reply("⛔ Нет прав.") if reply: reply.send() return if room_jid: reply = msg.reply("⚠️ Команда !global_learn работает только в личном чате.") if reply: reply.send() return self.bot.learning_mode[user_jid] = ("global", None) reply = msg.reply("🌐 Режим ГЛОБАЛЬНОГО обучения включён.") if reply: reply.send() def get_help(self) -> str: return "Включает режим глобального обучения (админ, только в личном чате)."