diff --git a/BRIDGE-TELEGRAM.md b/BRIDGE-TELEGRAM.md index f72f483..386c390 100644 --- a/BRIDGE-TELEGRAM.md +++ b/BRIDGE-TELEGRAM.md @@ -31,10 +31,17 @@ на каждую группу (`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, diff --git a/STATUS.md b/STATUS.md index 0b05f19..6425aa6 100644 --- a/STATUS.md +++ b/STATUS.md @@ -26,6 +26,11 @@ Self-hosted XMPP-мессенджер на **nixg.ru** (Prosody 0.11.9 + веб- ## Задачи (будущее) - [ ] ~~**Регистрация TG-аккаунта в мосте**~~ — ВЫПОЛНЕНО 2026-08-29 (estorozhenko@nixg.ru) +- [x] ~~**Вопрос про каналы/папки TG в рostере**~~ — РЕШЕНО/ОТВЕЧЕНО 2026-08-29 (вечер): + каналов в рostере XMPP НЕТ и быть не может (роster = личные контакты, 1602 шт.). + Каналы/группы (91+40) живут в БД моста (room), в XMPP — через bookmarks (сломаны из-за + mod_privilege-стаба). Папки Telegram слайдж не поддерживает (TODO в session.py:292). + Подробности: WALKTHROUGH §12.9. - [ ] **Аватары TG в мосте таймаутят** — HTTP-часть slidge не ходит через SOCKS5 (URL web.telegram.org недоступны из РФ). Косметика, на переписку не влияет. Разбор и варианты: BRIDGE-TELEGRAM.md. - [ ] **Сборка Prosody 0.12.x (система сборки)** — ЗАПЛАНИРОВАНО (сделать позже): diff --git a/WALKTHROUGH.md b/WALKTHROUGH.md index 80e9e39..fdc9f75 100644 --- a/WALKTHROUGH.md +++ b/WALKTHROUGH.md @@ -607,6 +607,50 @@ docker exec icq-prosody prosodyctl list 2>/dev/null # зарегистриро - **Решение**: собрать свой образ из исходников 0.12.6 (Dockerfile на базе prosody/prosody:0.11.9 + tar.gz 0.12.6). См. STATUS.md «Сборка Prosody 0.12». +### 12.9 Каналы и папки Telegram в рostере (2026-08-29 вечер) +**Вопрос пользователя**: «как найти каналы из Телеграм в рostере? а ещё папки были в телеге — как вытащить?» + +**Ответ (проверено) — каналов в рostере XMPP НЕТ, и это нормально:** +- XMPP-рostер (`jabber:iq:roster`) — это **только личные контакты**: 1602 записи, + все вида `число@telegram.nixg.ru` (пример: `1646170373@telegram.nixg.ru` = «Наталья Рыбий»). + Контактов с префиксом `group-` в рostере — **0**. +- Каналы/группы живут **отдельно**, в БД моста (таблица `room` в slidge.sqlite): + **91 канал** (`muc_type='CHANNEL'`, jid_localpart `group-`) + **40** групп/прочих. +- В XMPP каналы должны показываться как **закладки комнат (XEP-0402 bookmarks)** + → в Pidgin «Комнаты → Закладки», откуда заходят. **Сейчас bookmarks сломаны** + из-за mod_privilege-стаба (XEP-0356 не пересылает MDS/pubsub-запросы), поэтому + слайдж вместо закладок шлёт **приглашения** в каждую комнату — «миллион запросов». +- **Обходной путь сейчас**: Pidgin → Комнаты → Присоединиться → адрес + `group-@telegram.nixg.ru`, ник `estorozhenko` (пример `group-1001698123474@telegram.nixg.ru`). + Полный список каналов: `SELECT jid_localpart, name FROM room WHERE muc_type='CHANNEL'` в БД моста. +- **Папки Telegram**: слайдж **не поддерживает** (`session.py:292`, обработчик + `DialogPeerFolder` — `# TODO: investigate what that is; return`). В XMPP аналога + «папок чатов» нет (рostер плоский). Pyrogram `get_folders()` (`messages.GetDialogFilters`) + технически умеет читать папки, но отдельный MTProto-клиент на той же сессии + выкинет работающий мост → вариант только «остановить мост на 30 сек, прочитать, + запустить». Практической ценности нет — в XMPP-клиенте папки всё равно некуда вывести. + +**Диагностика рostера (полезный навык, не повторять ошибку):** +- Признак «контакты пропали»: клиент (slixmpp/Pidgin) показывает пусто. + **Проверять НЕ через `bot.roster`/`roster_update`** (slixmpp читает свой кэш и + событие срабатывает раньше полного ответа — ложно показывает 1 контакт), а + **сырым IQ**: `bot.make_iq_get(queryxmlns='jabber:iq:roster').send()` → + `.findall('.//{jabber:iq:roster}item')`. Верифицировано: вернул **1602 item'а**. +- Рostер-файл: `/var/lib/prosody/nixg%2eru/roster/estorozhenko.dat` (445 КБ, 1602 записи, + версия 1607) — читается через `datamanager.load("estorozhenko","nixg.ru","roster")` + только при установленном `data_path` (вне Prosody-контекста он nil → ложный ENOENT). +- Debug-логирование mod_privilege: добавить `debug = ".../prosody.log"` в блок `log` + конфига (временно; после отладки вернуть) — в логе видно `Entity is privileged` + на обоих хостах, `load_roster: asked for` / `save_roster: saving roster (all contacts)`. +- Замечание: каталог данных называется `nixg%2eru` (URL-кодирование точки), а не `nixg.ru` — + `ls /var/lib/prosody/nixg.ru` даёт «No such file» — это норма, не ошибка. + +**Причина «миллиона приглашений» подтверждена**: в БД моста `user_account.preferences` +JSON содержит `"always_invite_when_adding_bookmarks": true` — слайдж шлёт приглашение +на каждую группу при синхронизации. Кандидат на `false`, когда bookmarks заработают +(после апгрейда 0.12). Пока слайдж-стаб не чинит bookmarks, приглашения — единственный +способ «увидеть» каналы, их можно игнорировать в Pidgin. + ## 13. TODO (следующие шаги) - [x] ~~OMEMO (XEP-0384)~~ — ВЫПОЛНЕНО: раздел 9; скрипт scripts/omemo_check.py. - [ ] Бот-книгоискатель (slixmpp + OPDS) — Этап 3 PRD. venv уже создан (/opt/icq/.venv: aiohttp, slixmpp).