Files
fckbot/bots/commands/learn.py
2026-06-30 21:40:15 +00:00

99 lines
4.7 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# -*- 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 "Включает режим глобального обучения (админ, только в личном чате)."