Базовая интеграция
Подробное руководство по подключению MandreLib к вашему плагину.
Импорт библиотеки
Чтобы использовать MandreLib, импортируйте необходимые модули:
from mandre_lib import Mandre, MandreData, MandreUI, MandreTTS, MandreAuth
from base_plugin import BasePluginАктивация персистентного хранилища
Самая важная функция - автоматическое сохранение данных:
class MyPlugin(BasePlugin):
def on_plugin_load(self):
# Активируем персистентное хранилище
Mandre.use_persistent_storage(self)
self.log("Плагин загружен, MandreLib активирована")Что это даёт?
После активации все вызовы self.set_setting(key, value) автоматически сохраняются на диск. При следующей загрузке плагина данные восстанавливаются через self.get_setting(key, default).
Полный шаблон плагина
__id__ = "my_plugin"
__name__ = "Название плагина"
__version__ = "1.0.0"
__author__ = "@yourname"
__description__ = "Описание плагина"
__min_version__ = "11.9.0"
from base_plugin import BasePlugin, HookResult, HookStrategy
from ui.settings import Header, Text, Switch, Divider
from ui.bulletin import BulletinHelper
from mandre_lib import Mandre, MandreData, MandreUI
class MyPlugin(BasePlugin):
def on_plugin_load(self):
"""Вызывается при загрузке плагина"""
# Активируем MandreLib
Mandre.use_persistent_storage(self)
# Добавляем хуки если нужны
self.add_on_send_message_hook()
# Регистрируем команды
Mandre.register_command(self, "mycommand", self.cmd_mycommand)
# Запускаем задачи
Mandre.schedule_task(self, "task_name", 60, self.periodic_task)
self.log("Плагин загружен")
def on_send_message_hook(self, params):
"""Обработка исходящих сообщений"""
# Обрабатываем команды
result = Mandre.handle_outgoing_command(params)
if result:
return result
# Ваша дополнительная логика
return HookResult()
def cmd_mycommand(self, plugin, args, params):
"""Обработчик команды .mycommand"""
BulletinHelper.show_info("Команда выполнена!")
return None
def periodic_task(self):
"""Периодическая задача"""
self.log("Задача выполнена")
def create_settings(self):
"""Создание UI настроек плагина"""
return [
Header(text="Настройки плагина"),
Switch(
text="Включить функцию",
description="Описание функции",
value=self.get_setting("feature_enabled", False),
on_change=lambda v: self.set_setting("feature_enabled", v)
),
Divider(),
Text(
text="О плагине",
icon="msg_info",
on_click=lambda _: BulletinHelper.show_info("Информация о плагине")
)
]
def on_plugin_unload(self):
"""Вызывается при выгрузке плагина"""
# Отменяем все задачи
Mandre.cancel_task(self, "task_name")
self.log("Плагин выгружен")Жизненный цикл плагина
graph TD
A[Загрузка плагина] --> B[on_plugin_load]
B --> C[Активация MandreLib]
C --> D[Регистрация команд/задач]
D --> E[Работа плагина]
E --> F[on_plugin_unload]
F --> G[Отмена задач]
G --> H[Выгрузка плагина]Важные моменты
Персистентное хранилище
Всегда вызывайте Mandre.use_persistent_storage(self) в начале on_plugin_load(), иначе данные не будут сохраняться.
Отмена задач
Обязательно отменяйте все запущенные задачи в on_plugin_unload(), иначе они будут работать даже после выгрузки плагина!
Потокобезопасность
Все операции с данными в MandreLib потокобезопасны. Можно безопасно писать из фоновых потоков.
Следующие шаги
Теперь, когда вы знаете основы интеграции, изучите конкретные модули:
- Хранилище данных - работа с JSON и файлами
- UI компоненты - диалоги и уведомления
- Команды - система команд
- Планировщик - периодические задачи