Быстрый старт
Создайте свой первый плагин с MandreLib за 5 минут!
Предварительные требования
Перед началом работы с MandreLib рекомендуется изучить базовую документацию exteraGram для понимания основ разработки плагинов.
Минимальный пример
Создайте файл плагина со следующим содержимым:
python
__id__ = "my_first_plugin"
__name__ = "Мой первый плагин"
__version__ = "1.0"
__author__ = "@yourname"
__description__ = "Простой плагин с MandreLib"
__min_version__ = "11.9.0"
from base_plugin import BasePlugin
from mandre_lib import Mandre
from ui.bulletin import BulletinHelper
class MyFirstPlugin(BasePlugin):
def on_plugin_load(self):
# Активируем персистентное хранилище
Mandre.use_persistent_storage(self)
# Увеличиваем счётчик загрузок
count = self.get_setting("load_count", 0)
self.set_setting("load_count", count + 1)
self.log(f"Плагин загружен {count + 1} раз!")
BulletinHelper.show_success("Плагин загружен!")Готово!
Теперь данные вашего плагина автоматически сохраняются и восстанавливаются при перезагрузке.
Добавляем команду
Расширим плагин командой .hello:
python
from base_plugin import BasePlugin, HookResult
from mandre_lib import Mandre, MandreUI
class MyFirstPlugin(BasePlugin):
def on_plugin_load(self):
Mandre.use_persistent_storage(self)
self.add_on_send_message_hook()
# Регистрируем команду
Mandre.register_command(self, "hello", self.cmd_hello)
def on_send_message_hook(self, params):
# Обрабатываем команды
return Mandre.handle_outgoing_command(params) or HookResult()
def cmd_hello(self, plugin, args, params):
"""Команда .hello - показывает приветствие"""
MandreUI.show(
title="Привет!",
items=["Вариант 1", "Вариант 2", "Вариант 3"],
on_select=lambda i, t: self.log(f"Выбрано: {t}"),
message="Выберите один из вариантов"
)
return None # Сообщение не отправитсяДобавляем планировщик
Запустим задачу, которая будет выполняться каждые 30 секунд:
python
def on_plugin_load(self):
Mandre.use_persistent_storage(self)
# Запускаем периодическую задачу
Mandre.schedule_task(
self,
task_name="auto_save",
interval_seconds=30,
callback=self.auto_save
)
def auto_save(self):
"""Автосохранение каждые 30 секунд"""
self.log("Автосохранение выполнено")
# Здесь ваша логика
def on_plugin_unload(self):
# Отменяем задачу при выгрузке
Mandre.cancel_task(self, "auto_save")Полный пример
Объединим всё вместе:
python
__id__ = "my_first_plugin"
__name__ = "Мой первый плагин"
__version__ = "1.0"
__author__ = "@yourname"
__description__ = "Плагин с командами и планировщиком"
__min_version__ = "11.9.0"
from base_plugin import BasePlugin, HookResult
from mandre_lib import Mandre, MandreUI, MandreData
from ui.bulletin import BulletinHelper
class MyFirstPlugin(BasePlugin):
def on_plugin_load(self):
# Инициализация
Mandre.use_persistent_storage(self)
self.add_on_send_message_hook()
# Команды
Mandre.register_command(self, "hello", self.cmd_hello)
Mandre.register_command(self, "stats", self.cmd_stats)
# Планировщик
Mandre.schedule_task(self, "counter", 60, self.increment_counter)
self.log("Плагин загружен!")
def on_send_message_hook(self, params):
return Mandre.handle_outgoing_command(params) or HookResult()
def cmd_hello(self, plugin, args, params):
"""Команда .hello"""
MandreUI.show(
title="Привет!",
items=["Показать статистику", "Очистить данные"],
on_select=self.handle_menu_select
)
return None
def cmd_stats(self, plugin, args, params):
"""Команда .stats - показывает статистику"""
counter = self.get_setting("counter", 0)
loads = self.get_setting("load_count", 0)
stats = f"📊 Статистика:\n"
stats += f"Загрузок: {loads}\n"
stats += f"Счётчик: {counter}"
BulletinHelper.show_info(stats)
return None
def handle_menu_select(self, index, text):
if index == 0:
self.cmd_stats(None, "", {})
elif index == 1:
self.set_setting("counter", 0)
BulletinHelper.show_success("Данные очищены")
def increment_counter(self):
"""Увеличивает счётчик каждую минуту"""
counter = self.get_setting("counter", 0)
self.set_setting("counter", counter + 1)
def on_plugin_unload(self):
Mandre.cancel_task(self, "counter")
self.log("Плагин выгружен")Что дальше?
- Хранилище данных - подробнее о работе с данными
- UI компоненты - все возможности интерфейса
- Команды - продвинутая работа с командами
- Примеры - больше готовых примеров
Важно
Не забывайте вызывать Mandre.cancel_task() в on_plugin_unload() для всех запущенных задач!