mirror of
https://gitverse.ru/kpa39l/icq.git
synced 2026-09-29 01:50:10 +00:00
7.5 KiB
7.5 KiB
Мост XMPP↔Telegram (Slidge/slidgram) — детали и задачи
Вспомогательный файл для STATUS.md; обновлено: 2026-08-29 Офлайн-доки: docs/slidgram/ (копия slidge.im)
Статус: ПОДКЛЮЧЁН (2026-08-29)
- Prosody:
component_ports 5347+Component "telegram.nixg.ru"сcomponent_secret(⚠️ В Prosody 0.11 секрет задаётся ТОЛЬКО в секции Component черезcomponent_secret=; глобальная таблицаcomponent_secretsНЕ читается — была засада not-authorized). - Образ: кастомный
slidgram-proxy:latest= codeberg.org/slidge/slidgram:latest + патчи telegram.py/gateway.py (прокидывают SOCKS5 из envSLIDGRAM_PROXYв Pyrogram) + pysocks. - docker-compose: сервис
slidgram(icq-slidgram), envSLIDGE_JID/SECRET/SERVER/PORT,SLIDGRAM_PROXY=socks5://172.27.0.1:1080, том ./slidgram/data (uid 10000, иначе SQLite «unable to open database file»). - ✅ Telegram App api_id/api_hash прописаны (2026-08-29): env
SLIDGE__SLIDGRAM_API_IDиSLIDGE__SLIDGRAM_API_HASH(значения в docker-compose.yml; ⚠️ префикс плагина =SLIDGE__SLIDGRAM_с ДВОЙНЫМ подчёркиванием — вычисляется в main.py какSLIDGE_+_SLIDGRAM_; вариантSLIDGE_SLIDGRAM_*НЕ работает). Подтверждено эмуляцией set_conf: API_ID/API_HASH читаются. После правки env — пересоздать контейнер (docker compose up -d --force-recreate --no-deps slidgram), простой restart НЕ подхватывает новые env. - Трафик Telegram → SOCKS5 172.27.0.1:1080 (SSH-туннель VPS01) — проверено: SOCKS5→MTProto DC1 OK.
- ✅ mod_privilege (XEP-0356): community-модуль → ./modules/mod_privilege.lua, включён в
modules_enabled + privileged_entities в VirtualHost для telegram.nixg.ru (roster sync, legacy carbons).
⚠️ На Prosody 0.11.9 модуль из prosody-modules НЕ работает (зовёт API 0.12
module:send_iq). Стоит стаб-ACK (коммит770c9fa): модуль отвечает ACK, не падает, но bookmarks/MDS через XEP-0356 не выполняются → слайдж шлёт приглашения в группы вручную (см. ниже). Полное решение — апгрейд Prosody на 0.12 (нативный XEP-0356), задача в STATUS.md.
Наблюдения после регистрации (2026-08-29)
- «Миллион запросов на подключение к чату» в Pidgin: слайдж шлёт gateway-приглашение
на каждую группу (
always_invite_when_adding_bookmarks: true+ bookmarks не пишутся из-за сломанного mod_privilege → fallback на ручные приглашения). Не баг как таковой; уйдёт после апгрейда 0.12. Временно:always_invite_when_adding_bookmarks: falseв preferences (SQLite user_account). ⚠️ Подтверждено в БД (2026-08-29 вечер):user_account.preferences= JSON{"always_invite_when_adding_bookmarks": true, ...}. - Flood wait при первом старте:
WARNING:slidgram.telegram:Flood in get_chat(...) sleep for N secпри синхронизации большого аккаунта (1602 контакта). Норма; кэш заполнится — паузы уйдут. - Контакты «пропали» из ростера после рестарта: рostер на сервере цел (проверено, 1602). Клиент при переподключении сам запрашивает рostер; если в Pidgin пусто — Disable/Enable аккаунта. Проверять рostер сырым IQ (не через клиентский кэш slixmpp) — см. WALKTHROUGH §12.9.
- Каналов в рostере нет — это норма (2026-08-29 вечер): рostер = только личные контакты
(1602,
число@telegram.nixg.ru). Каналы/группы (91 канал + 40) — в таблицеroomБД моста, в XMPP показываются как bookmarks (сломаны). Папки TG слайдж не поддерживает. Подробности и обходной путь (Join вручную) — WALKTHROUGH §12.9.
Регистрация TG-аккаунта — ВЫПОЛНЕНА (2026-08-29)
- estorozhenko@nixg.ru → команда
register(отправлена из Pidgin на адрес telegram.nixg.ru, способ B из WALKTHROUGH §12.3; Pidgin не даёт ad-hoc XEP-0050, только текст-сообщение). - api_id/api_hash спрашивать не пришлось — уже в конфиге (SLIDGE__SLIDGRAM_API_ID/HASH).
- Проверено:
Login success for estorozhenko@nixg.ruв логах, в БД user_account + контакты с vcard. - Аватары контактов качаются через MTProto (не web.telegram.org) — в avatar появились записи.
ЗАДАЧА: аватары telegram-пользователей — загрузка таймаутит
- Симптом: аватары контактов/компонента не подтягиваются («загрузка аватаров/логотипа с web.telegram.org таймаутит»).
- Корень (по коду в контейнере icq-slidgram): HTTP-часть slidge НЕ ходит через SOCKS5 —
slidge/core/gateway.py:399создаётaiohttp.ClientSession()безproxy=, иslidge/db/avatar.py(self.http.get(url)) качает URL-аватары напрямую; из РФ прямой доступ к web.telegram.org/photo-URL'ам заблокирован → таймаут. MTProto-часть (slidgram/telegram.py→Client(proxy=_proxy)) уже ходит через прокси и работает. - Варианты решения (выбрать при реализации):
- Прокси в aiohttp-сессию: в
gateway.py:399aiohttp.ClientSession(proxy=...)(aiohttp — один прокси на сессию), либоClientSession(trust_env=True)+ envHTTP_PROXY/HTTPS_PROXY/ALL_PROXY. Для SOCKS5 в docker-сети —ALL_PROXY=socks5://172.27.0.1:1080trust_env=True, но aiohttp SOCKS5 работает только через aiohttp-socks (доп. зависимость).
- Прогонять URL-аватары через nginx-прокси на bigbox (rewrite → туннель) — без правок кода.
- Аватары личных фото уже качаются через Pyrogram
download_media()(MTProto, через SOCKS5) — убедиться, что эта ветка используется; прямая HTTP-загрузка нужна для URL-аватаров (web.telegram.org и т.п.).
- Прокси в aiohttp-сессию: в
- ⚠️ Обмен сообщениями, файлы и стикеры НЕ затрагиваются — это косметика (аватарки в ростере).
Известные мелочи
- Залипший localStorage браузера со старым JID admin@chat.nixg.ru → Converse шлёт host-unknown. Лечится: localStorage.removeItem("conversejs-session-jid") или инкогнито.