Metadata-Version: 2.1
Name: remandochka
Version: 0.0.3
Summary: RM (ReMandochka) — Высокопроизводительная библиотека хукинга, обхода защит ART/R8 и KDL v2 рантайма для плагинов exteraGram
Author: swagnonher
Requires-Python: >=3.8
Description-Content-Type: text/markdown

# RM (ReMandochka) v0.0.3 — Библиотека хукинга, обхода защит ART/R8 и KDL v2 рантайма
### (PyPI: `remandochka` | Python import: `import rm`)

**ReMandochka (RM)** — инструментальная библиотека для разработчиков плагинов **exteraGram**, решающая проблемы с защитами, барьерами Android Runtime (ART), компилятора R8, предоставляющая встроенный ультра-быстрый парсер документов **KDL v2 (2.0.0)** и безопасную Java-рефлексию.

- **PyPI**: `remandochka` (установка: `pip install remandochka`).
- **Импорт в плагинах**: `import rm` (основное краткое имя для удобства написания кода) или `import remandochka`.

---

## ⚡ Структура библиотеки (`src/rm`)

- **`rm.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-рефлексия с приведением примитивов.
- **`rm.bypass`** — модуль обхода блокировок ART/R8:
  - `rm.Bypass(plugin)`: фасад управления хуками и стратегиями обхода.
  - `@bypass.hook("ClassName", "methodName")`: декоратор для классов `MethodHook` или функций.
- **`rm.ui`** — инструментарий UI-компонентов.

---

## ⚡ Моментальный 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 в коде:

```python
import rm

# 1. Быстрый парсинг KDL-строки
doc = rm.parse_kdl("""
package name="ReMandochka" version="0.0.3" {
    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.3"

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`)

```python
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()
```

---

## 🔇 Интеллектуальное логирование (Zero Log Spam)

Библиотека не засоряет логи приложения:
* Логи выводятся **ТОЛЬКО** тогда, когда в настройках плагин-системы включен **Режим разработчика (`rm.is_dev_mode() == True`)**.
* При выключенном режиме разработчика библиотека работает в режиме **полной тишины**.

---

## 📦 Спецификация для плагинов exteraGram

- В файлах `.plugin`:
  ```python
  __requirements__ = ["remandochka 0.0.3"]
  ```
- В архивах `.elyx` (`metainfo.json`):
  ```json
  "requirements": "remandochka 0.0.3"
  ```
