API Reference - Обзор
Полная справка по API MandreLib.
Базовые знания
Эта документация описывает API MandreLib. Для понимания базовых концепций exteraGram (BasePlugin, хуки, настройки) обратитесь к официальной документации.
Основные модули
MandreLib состоит из нескольких модулей, каждый из которых отвечает за определённую функциональность:
Mandre (Основной модуль)
Центральный модуль библиотеки, предоставляющий основные функции:
use_persistent_storage()- активация персистентного хранилищаregister_command()- регистрация командhandle_outgoing_command()- обработка командschedule_task()- планирование задачcancel_task()- отмена задачregister_localizations()- регистрация переводовt()- получение переведённой строкиadd_tg_alias()- регистрация deep linkremove_tg_alias()- удаление deep linkapply_and_refresh_settings()- обновление настроек
MandreData (Хранилище данных)
Модуль для работы с персистентными данными:
write_persistent_json()- запись JSON файлаread_persistent_json()- чтение JSON файлаlist_files_for_plugin()- список файлов плагина
MandreUI (UI компоненты)
Модуль для создания пользовательского интерфейса:
show()- показать диалог с выборомripple()- ripple эффектselect_chat()- селектор чатовsetup_settings_bottom_bar()- навигационная панель
MandreTTS (Текст-в-речь)
Модуль для озвучивания текста:
speak()- озвучить текст
MandreAuth (Аутентификация)
Модуль для запроса подтверждения личности:
request()- запросить аутентификацию
MandreShare (Отправка файлов)
Модуль для отправки текста и файлов:
share_text()- отправить текстshare_file()- отправить файл
MandreDevice (Информация об устройстве)
Модуль для получения информации об устройстве:
get_device_info()- полная информацияget_simple_info()- краткая информация
MandreNotification (Системные уведомления)
Модуль для показа системных уведомлений:
show_simple()- простое уведомлениеshow_dialog()- уведомление в стиле диалога
Быстрый старт
from mandre_lib import Mandre, MandreData, MandreUI
from base_plugin import BasePlugin, HookResult, HookStrategy
class MyPlugin(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, "device", self.cmd_device)
Mandre.register_command(self, "notify", self.cmd_notify)
# Планирование задачи
Mandre.schedule_task(self, "task", 60, self.periodic_task)
def on_send_message_hook(self, params):
return Mandre.handle_outgoing_command(params) or HookResult()
def cmd_hello(self, plugin, args, params):
MandreUI.show(
title="Привет!",
items=["Вариант 1", "Вариант 2"],
on_select=lambda i, t: self.log(f"Выбрано: {t}")
)
return HookResult(strategy=HookStrategy.CANCEL)
def cmd_device(self, plugin, args, params):
# Новое в 1.6.3: информация об устройстве
info = Mandre.Device.get_simple_info()
params["message"] = f"📱 {info}"
return HookResult(strategy=HookStrategy.MODIFY, params=params)
def cmd_notify(self, plugin, args, params):
# Новое в 1.6.3: системные уведомления
Mandre.Notification.show_simple("Плагин", args or "Тест!")
return HookResult(strategy=HookStrategy.CANCEL)
def periodic_task(self):
self.log("Задача выполнена")
def on_plugin_unload(self):
Mandre.cancel_task(self, "task")Типы данных
HookResult
Результат выполнения хука:
from base_plugin import HookResult, HookStrategy
# Не изменять сообщение
HookResult()
# Отменить отправку
HookResult(strategy=HookStrategy.CANCEL)
# Изменить сообщение
HookResult(strategy=HookStrategy.MODIFY, params=modified_params)Callback функции
Command Handler
def cmd_handler(plugin, args, params):
"""
Args:
plugin: экземпляр плагина (self)
args: строка с аргументами команды
params: dict с параметрами сообщения
Returns:
None - сообщение отправится
HookResult - для модификации/отмены
"""
passUI Select Handler
def on_select(index, text):
"""
Args:
index: индекс выбранного элемента (int)
text: текст выбранного элемента (str)
"""
passChat Select Handler
def on_chat_select(chat_info):
"""
Args:
chat_info: dict с информацией о чате
- 'title': название чата (str)
- 'id': ID чата (int)
- 'obj': объект чата/пользователя (TLRPC)
"""
passAuth Callbacks
def on_success():
"""Вызывается при успешной аутентификации"""
pass
def on_failure():
"""Вызывается при неудачной аутентификации"""
passTask Callback
def task_callback():
"""Вызывается по расписанию"""
passDeep Link Handler
def deeplink_handler(intent):
"""
Args:
intent: Android Intent с данными ссылки
"""
uri_str = str(intent.getData())
# Обработка ссылкиКонстанты
HookStrategy
from base_plugin import HookStrategy
HookStrategy.CANCEL # Отменить действие
HookStrategy.MODIFY # Изменить параметрыЦвета (Android)
from android.graphics import Color
Color.WHITE
Color.BLACK
Color.RED
Color.GREEN
Color.BLUE
# Создание цвета
Color.rgb(255, 0, 0) # RGB
Color.argb(255, 255, 0, 0) # ARGB с прозрачностьюСоглашения
Именование
- Плагины:
snake_caseдля ID,Title Caseдля имени - Команды:
lowercaseбез префикса - Задачи:
snake_caseописательные имена - Файлы данных:
snake_case.json
Структура плагина
__id__ = "plugin_id"
__name__ = "Plugin Name"
__version__ = "1.0.0"
__author__ = "@username"
__description__ = "Description"
__min_version__ = "11.9.0"
from base_plugin import BasePlugin
from mandre_lib import Mandre
class MyPlugin(BasePlugin):
def on_plugin_load(self):
"""Инициализация"""
pass
def on_plugin_unload(self):
"""Очистка"""
pass
def create_settings(self):
"""UI настроек"""
return []Обработка ошибок
Всегда оборачивайте критичный код в try-except:
try:
# Ваш код
result = risky_operation()
except SpecificError as e:
# Обработка конкретной ошибки
self.log(f"Ошибка: {e}")
BulletinHelper.show_error("Что-то пошло не так")
except Exception as e:
# Обработка всех остальных ошибок
self.log(f"Неожиданная ошибка: {e}")Потоки выполнения
UI поток
Для UI операций:
run_on_ui_thread(lambda: BulletinHelper.show_info("Message"))Фоновый поток
Для долгих операций:
def background_work():
result = long_operation()
run_on_ui_thread(lambda: show_result(result))
run_on_queue(background_work)Версионирование
MandreLib следует Semantic Versioning:
- MAJOR - несовместимые изменения API
- MINOR - новая функциональность (обратно совместимая)
- PATCH - исправления ошибок
Совместимость
- exteraGram: 11.9.0+
- Python: 3.x
- Android: 5.0+ (API 21+)
Следующие шаги
Изучите подробную документацию по каждому модулю:
- Mandre - основной модуль
- MandreData - хранилище данных
- MandreUI - UI компоненты
- MandreTTS - текст-в-речь
- MandreAuth - аутентификация
- MandreShare - отправка файлов
- MandreDevice - информация об устройстве
- MandreNotification - системные уведомления