99 lines
4.7 KiB
Python
99 lines
4.7 KiB
Python
# -*- 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 "Включает режим глобального обучения (админ, только в личном чате)." |