Переписать проект в личный MTProto-юзербот

Смена архитектуры с бизнес-бота на Bot API (команды со слешем) на
личный юзербот на GramJS/MTProto с управлением через компаньон-бота.

Возможности:
- antidelete — кэш входящих в личке, восстановление удалённых «у всех»
- onetime — перехват «просмотр один раз» фото/видео до истечения ссылки
- локальное хранилище node:sqlite + шифрование AES-256-GCM, чистка по сроку
- компаньон-бот (grammY): инлайн-панель, лента с пагинацией, выдача медиа,
  доступ только владельцу по OWNER_ID

Устройство:
- core/ — crypto, db, media, loader, registry, logger
- userbot/ — MTProto-клиент из строки сессии, подписка на события
- modules/ — фичи как модули с хуками setup/onMessage/onEdited/onDeleted
- bot/ — компаньон-бот (единственный UI)
- scripts/login.js — генерация строки сессии

Удалён старый код Bot API (commands/, handlers/, middlewares/, dispatcher,
store). Обновлены README и .env.example. Hcrgram/ (сторонний референс)
добавлен в .gitignore.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-09 19:16:52 +03:00
parent e92e0df644
commit 15a03a77fd
40 changed files with 1845 additions and 922 deletions
+19 -6
View File
@@ -1,11 +1,24 @@
# === MTProto (юзербот) ===
# Получить на https://my.telegram.org → API development tools
API_ID=
API_HASH=
# Строка сессии. Сгенерировать: npm run login — и вставить сюда.
SESSION=
# === Компаньон-бот (единственный интерфейс) ===
# Токен от @BotFather
BOT_TOKEN=123456:AA...
BOT_TOKEN=
# Ваш Telegram id (узнать: напишите @userinfobot). Только вы управляете ботом.
OWNER_ID=
# ID администраторов через запятую (узнать свой: команда /id)
ADMIN_IDS=
# Сколько минут молчать в чате после того, как владелец ответил вручную
HANDOVER_PAUSE_MINUTES=30
# === Локальное хранилище ===
# Ключ шифрования: 64 hex-символа ИЛИ длинная парольная фраза (≥32 байт).
# Сгенерировать hex: node -e "console.log(require('crypto').randomBytes(32).toString('hex'))"
ENCRYPTION_KEY=
# Сколько дней хранить перехваченное (0 — бессрочно)
RETENTION_DAYS=30
# Качать медиа входящих сразу, чтобы восстанавливать удалённые картинки (0 — выключить)
CACHE_MEDIA=1
# debug | info | warn | error
LOG_LEVEL=info