RM (ReMandochka) v0.0.5 — Библиотека хукинга, обхода защит ART/R8, UI и KDL v2 рантайма
(PyPI: remandochka | Python import: import rm или import remandochka)
ReMandochka (RM) — инструментальная библиотека для разработчиков плагинов exteraGram, решающая проблемы с защитами, барьерами Android Runtime (ART), компилятора R8, предоставляющая архитектурный каркас UI компонентов, встроенный ультра-быстрый парсер документов KDL v2 (2.0.0) и безопасную Java-рефлексию.
- PyPI:
remandochka(установка:pip install remandochka). - Сборщик: Hatchling (PEP 621 /
pyproject.toml). - Архитектура: 1 единственный
__init__.pyна всю библиотеку без лишнего бойлерплейта. - Импорт в плагинах:
import rmилиimport remandochka.
⚡ Структура библиотеки (src/)
remandochka.core:rm.parse_kdl(text)/rm.dumps_kdl(doc): моментальный парсер KDL 2.0.0 (~100 микросекунд).rm.is_dev_mode(),rm.dev_log(plugin, msg): Zero Log Spam логирование.rm.get_app_version(): автоопределение версии клиента Telegram / exteraGram.rm.get_field(),rm.set_field(),rm.get_java_class(): безопасная Java-рефлексия с приведением примитивов.
remandochka.bypass:rm.Bypass(plugin): фасад управления хуками.@bypass.hook("ClassName", "methodName"): декоратор для классовMethodHookили функций.- Внешняя база правил:
remandochka/resources/rules.jsonl.
remandochka.ui:views:View,SheetView,DialogView,PanelView.cells:Cell,HeaderCell,TextCell,ButtonCell,SwitchCell,InputCell.
⚡ Моментальный KDL v2/v1 парсер (rm.parse_kdl)
Пакет содержит оптимизированный парсер новейшей спецификации KDL 2.0.0 с поддержкой:
- Всех современных конструкций KDL v2 (
#true,#false,#null,#inf,#-inf,#nan, шестнадцатеричные0x..., восьмеричные0o..., двоичные0b..., децимальные числа с экспонентой и разделителями_). - Многострочных строк
""" ... """и#""" ... """#с автоматическим дедентированием по спецификации KDL v2. - Сырых строк
#"..."#,##"..."##. - Эскейп-последовательностей (
\n,\r,\t,\s,\u{1F600}, whitespace escapes\). - Комментариев
//, вложенных блочных комментариев/* /* ... */ */и слешдаш-комментариев/-(для нод, аргументов, свойств и дочерних блоков). - Типовых аннотаций
(type)nodeи(type)value.
Использование KDL в коде:
import rm
# 1. Быстрый парсинг KDL-строки
doc = rm.parse_kdl("""
package name="ReMandochka" version="0.0.5" {
flags active=#true debug=#false test=#null
numbers hex=0xDEAD_BEEF dec=1_000_000
multiline \"\"\"
Привет, мир!
Вторая строка с отступом.
\"\"\"
raw #"C:\\Path\\Without\\Escapes"#
(role)node (u8)255 (date)"2026-10-26"
}
""")
# 2. Доступ к узлам и свойствам
pkg = doc["package"]
print(pkg["name"]) # "ReMandochka"
print(pkg.get("version")) # "0.0.5"
flags = pkg.child("flags")
print(flags["active"]) # True
# 3. Конвертация в словарь
data_dict = doc.to_dict()
# 4. Сериализация обратно в KDL
kdl_text = rm.dumps_kdl(doc)
🛡️ Модуль обхода блокировок ART/R8 (rm.Bypass)
from base_plugin import BasePlugin, MethodHook
import rm
class MyPlugin(BasePlugin):
def on_plugin_load(self):
self.bypass = rm.Bypass(self)
@self.bypass.hook("InstallPluginBottomSheet", "<init>")
class CtorHook(MethodHook):
def before_hooked_method(self, param):
# param.args[2] — PluginInstallParams
param.args[2].setTrusted(True)
def after_hooked_method(self, param):
sheet = param.thisObject # живой экземпляр шторки
@self.bypass.hook("InstallPluginBottomSheet", "applyButtonState")
class ButtonHook(MethodHook):
def after_hooked_method(self, param):
sheet = param.thisObject
# кастомизация кнопки
self.bypass.install()
def on_plugin_unload(self):
self.bypass.uninstall()
🎨 Модуль UI (rm.ui)
Архитектурный каркас для построения интерфейсов плагинов exteraGram:
import rm
from rm.ui.views import SheetView
from rm.ui.cells import HeaderCell, TextCell, SwitchCell, ButtonCell
sheet = SheetView(title="Настройки плагина")
sheet.add_child(HeaderCell("Основное"))
sheet.add_child(TextCell("Статус", "Активен"))
sheet.add_child(SwitchCell("Авто-обновление", value=True))
sheet.add_child(ButtonCell("Сохранить", on_click=lambda: print("Saved!")))
🔇 Интеллектуальное логирование (Zero Log Spam)
Библиотека не засоряет логи приложения:
- Логи выводятся ТОЛЬКО тогда, когда в настройках плагин-системы включен Режим разработчика (
rm.is_dev_mode() == True). - При выключенном режиме разработчика библиотека работает в режиме полной тишины.
📦 Спецификация для плагинов exteraGram
- В файлах
.plugin:__requirements__ = ["remandochka 0.0.5"]
- В архивах
.elyx(metainfo.json):"requirements": "remandochka 0.0.5"
Metadata
Release files for remandochka 0.0.5
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| remandochka-0.0.5.tar.gz | 17.4 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| remandochka-0.0.5-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 36.0 kB
Release files / remandochka-0.0.5.tar.gz
| Download URL | remandochka-0.0.5.tar.gz |
|---|---|
| Size | 17.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
bddd0b48ad7f6f9928c6fa0828c279d5fe665755b6c0a2c7bfc8aee35a331216
|
|
BLAKE2b-256 checksum How to use checksums |
af44bc40d8f82e36eee1f743b1c2dd6a7c34e5f1d8f3795ef35f59d71ea033d1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.11.9
|
Release files / remandochka-0.0.5-py3-none-any.whl
| Download URL | remandochka-0.0.5-py3-none-any.whl |
|---|---|
| Size | 18.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
8169ccd08803d4cb2d6e040e2771a4e7813da010d9408fd8c1cf794dc10dc811
|
|
BLAKE2b-256 checksum How to use checksums |
c75ca7a9e12aecd41c1f3190ee7cabd6497ce47c741e92f37365a433da287e75
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.11.9
|
Security for remandochka 0.0.5
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.