LINUX.ORG.RU

tackygram - XMPP-транспорт в Telegram

 , ,


2

2

Покажу вам настоящую магию.
Не рекомендую повторять вне Хогвартса.

На скриншоте Jabber-клиент anotherim-js и чат с контактом из Telegram.

В отличие от предыдущих поколений мостов (Zhabogram/telegabber и др.) упор сделан на максимально «нативный» для XMPP опыт ­— то есть, используем все XEP, до которых дотянемся (и которые поддерживает библиотека, а библиотека поддерживает их много).

tackygram написан на Go и Tcl и использует библиотеку gotd для Telegram-части, совершенно игнорируя существование tdlib, будто этого куска кала и не существует в природе; для XMPP же используется libtacky

Автор очень пытался максимально усложнить жизнь любопытным системным администраторам, чьи шаловливые ручки тянутся угнать чью-нибудь Telegram-сессию, но пришёл к выводу, что это бесполезно, поэтому безопасность скорее в сторону «защиты от маски-шоу в датацентре» (шифрование базы данных ключом, который можно положить в TPM), а не в сторону защиты от любопытных очумелых ручек с root-доступом к XMPP-серверу.

Что мы имеем на данный момент:

  • Чаты 1 на 1 и групповые (как MUC)
  • Отправка и приём файлов
  • Звонки и видеозвонки (с end-to-end шифрованием)
  • Голосовые и видеосообщения («кружки»)
  • Стикеры
  • Аватарки и vCard v4
  • Поиск по @логину
  • Секретные чаты (с настоящим E2EE, без MITM на стороне сервера)

Секретные чаты поддерживаются только в another.im, однако спеки открыты и любой желающий может запилить поддержку неймспейса urn:tacky:mtproto-e2e:0 в свой любимый клиент.

Чего нету (а если точнее – что пока что не тестировалось должным образом):

  • файлы в секретных чатах;
  • супергруппы (большие чаты) и каналы;
  • групповые видеозвонки;
  • смешанные конференции из пользователей Telegram и XMPP.

Чего нету и не будет:

  • анимированных стикеров какашки которые жрут батарейку и не несут полезной смысловой нагрузки;
  • анимированных эмодзи и Б-г весть чего ещё;
  • премиумов и звёзд.


Проверено: hobbit ()
Последнее исправление: hobbit (всего исправлений: 10)

Если будет можно нормально читать эти супергруппы, будет очень хорошо, многие в тг ходят за новостями.

Пробовал slidgram, жить конечно можно, но грустно.

sergej ★★★★★
()
Ответ на: комментарий от sergej

Если будет можно нормально читать эти супергруппы, будет очень хорошо, многие в тг ходят за новостями.

уже можно.
единственная проблема, которая была с этим связана – из-за большого количества станц пару раз с грохотом упал продовый ejabberd, ещё пару раз словили kernel panic на macOS, поэтому теперь все channels и supergroups теерь в режиме «mentions only» по дефолту.

ZakritiyNarcist
() автор топика

В отличие от предыдущих поколений мостов (Zhabogram/telegabber и др.) упор сделан на максимально «нативный» для XMPP опыт ­— то есть, используем все XEP, до которых дотянемся (и которые поддерживает библиотека, а библиотека поддерживает их много).

Т.е. это не транспорт в смысле «XEP-0100: Gateway Interaction», а шлюз, нацеленный на поддержку фичей TG?
Диалоги с ботами, например, оно умеет?

ещё пару раз словили kernel panic на macOS

как так могло получиться от userspace софта?

MirandaUser2 ★★
()
Ответ на: комментарий от MirandaUser2

Т.е. это не транспорт в смысле «XEP-0100: Gateway Interaction», а шлюз, нацеленный на поддержку фичей TG?

не понял вопроса. а как оно противоречит?
это самый что ни на есть транспорт, причём фичами XMPP мы настолко решили обмазаться по-хардкору, что без XEP-0030, XEP-0050 и XEP-0077 ты скорее всего тупо не авторизуешься.

угадаешь с первого раза, какой % из современных клиентов поддерживают такой наборчик ретрограда? а вот и не угадал, ни один не поддерживает (если не считать маргинальные форки вроде monocles, cheogram и прочие anotherim-legacy)

как так могло получиться от userspace софта?

сами в шоке, но ставлю на то, что эффективные менеджеры Apple вслед за Microsoft заменили программистов нейросетью, а на тестировщиков зажали бабла.

или ты про то, от чего оно упало? ну, от 20000+ уведомлений, прилетевших почти одновременно, а т.к. Tauri под macOS то ли в бета, то ли в альфа (да и в общем и целом опенсорс, лол) то они закономерно проигнорировли гайдлайнсы по троттлингу и группировке нотификаций и честно отобразили все 20 тыщ уведомлений.

ну, попытались - сначала весь экран залило всплывающими уведомлениями, потом курсор перестал двигаться (но при этом ssh подавал признаки жизни, судя по всему кончалась RAM), а потом случился кернел паник.

ZakritiyNarcist
() автор топика
Ответ на: комментарий от MirandaUser2

Диалоги с ботами, например, оно умеет?

диалоги вроде бы умеет, и даже формочки и кнопочки умеет (XEP-0439) и даже с WebApp можно попробовать извратиться с чем-то вроде WebXDC (https://xmpp.org/extensions/xep-0491.html)

однако, сам клиент (anotherim-js) пока не умеет ни QR, ни WebXDC, поэтому с ботами общаться можно пока что только вот так (на примере @BotFather):

(Me), [2026-11-11 03:08:56]
/start

BotFather, [2026-11-11 03:08:57]
I can help you create and manage Telegram bots. If you're new to the Bot API, please see the manual.

You can control me by sending these commands:

/newbot - create a new bot
/mybots - edit your bots

*Edit Bots*
/setname - change a bot's name
/setdescription - change bot description
/setabouttext - change bot about info
/setuserpic - change bot profile photo
/setcommands - change the list of commands
/deletebot - delete a bot

*Bot Settings*
/token - get authorization token
/revoke - revoke bot access token
/setinline - toggle inline mode
/setinlinegeo - toggle inline location requests
/setinlinefeedback - change inline feedback settings
/setjoingroups - can your bot be added to groups?
/setprivacy - toggle privacy mode in groups

*Web Apps*
/myapps - edit your web apps
/newapp - create a new web app
/listapps - get a list of your web apps
/editapp - edit a web app
/deleteapp - delete an existing web app

*Games*
/mygames - edit your games
/newgame - create a new game
/listgames - get a list of your games
/editgame - edit a game
/deletegame - delete an existing game

(Me), [2026-11-11 03:09:07]
/myapps

BotFather, [2026-11-11 03:09:07]
You currently have no web apps. Use /newapp command to create a first web app.
ZakritiyNarcist
() автор топика
Ответ на: комментарий от ZakritiyNarcist

не понял вопроса. а как оно противоречит?
это самый что ни на есть транспорт,

я имел в виду, что обычно софт реализующий XEP-0100, например какой-нибудь spectrum 2, предоставляет весьма ограниченный набор возможностей.
Плюс схема парольной аутентификации, приведенная в XEP-0100, не совместима с 2FA/MFA. Вообще что касается MFA, я сходу нахожу только xep-0400 в статусе deffered.

угадаешь с первого раза, какой % из современных клиентов поддерживают такой наборчик ретрограда?

отсюда напрашивается вывод: XEP-0100 и пр. при реализации шлюза вообще не использовать, а просто притворяться XMPP сервером.

MirandaUser2 ★★
()
Ответ на: комментарий от MirandaUser2

отсюда напрашивается вывод: XEP-0100 и пр. при реализации шлюза вообще не использовать, а просто притворяться XMPP сервером.

вообще так и планировалось изначально, потому что у @wusspuss попалась очень забористая трава и он предложил эмулировать MAM «наживую» (и таким образом решить проблему отсутствия существующей до логина в транспорте истории), но это не понадобилось.

Плюс схема парольной аутентификации, приведенная в XEP-0100, не совместима с 2FA/MFA. Вообще что касается MFA, я сходу нахожу только xep-0400 в статусе deffered.

яннп, а причём тут парольная авторизация вообще? как и авторизация как таковая?
в zhabogram/telegabber авторизация всю жизнь была через команды !login <номер телефона> и тэ дэ.

XEP-0100 он же не про авторизацию вроде как, а про puppeting – то бишь, про создание виртуальных контактов в чужой сети. не?

ZakritiyNarcist
() автор топика
Ответ на: комментарий от MirandaUser2

вообще я имел в виду скорее «XEP-0004: Data Forms»

а что Data Forms? на них без костылей даже самые простые тг-боты с полутора кнопочками не запилить.

я понимаю, что можно в любой непонятной ситуации просто присылать редактирование форм (как в общем и целом это и делает телеграм, просто разработчики привыкли подчищать за ним вилкой), но в случае, если какой-нибудь неподготовленный поц с чем-нибудь типа Cheogram на такое наткнётся – последствия могут быть ужасными (вплоть до разрыва жопы)

ZakritiyNarcist
() автор топика

Больной вопрос для slidge-телеграма - а сколько эта штука у вас примерно памяти жрет?

YAR ★★★★★
()

Автор очень пытался максимально усложнить жизнь .. но пришёл к выводу, что это бесполезно, поэтому безопасность скорее в сторону

Ну то есть по факту заходи кто хош, бери что хош?

Lucky ★★★
()
Ответ на: комментарий от YAR
55304 /usr/local/bin/tackygram -data /var/lib/tackygram -port 5351 -log info -engine-args -log info
123424 /usr/local/bin/paperplaned -data /var/lib/tackygram -log info -own-hosts telegram.hostname.tld -log info

как-то так (аккаунтов активных наверное штук 15 сейчас)

ZakritiyNarcist
() автор топика
Ответ на: комментарий от green274

в целом, это возможно - как запилим WebXDC в либу и референсный клиент, можно попробовать упороться и сделать прокси в телеграмный API.

ZakritiyNarcist
() автор топика
Ответ на: комментарий от ZakritiyNarcist

потом курсор перестал двигаться (но при этом ssh подавал признаки жизни, судя по всему кончалась RAM), а потом случился кернел паник.

Что-то мне подсказывает, что в данном случае могла переполниться видеопамять

static_lab ★★★★★
()
Ответ на: комментарий от user_id_68054

«Макс» наоборот читается как «Скам»

P.S. пока мы пилили мессенджер, я по приколу прикрутил к ejabberd эстонское гос.SSO (оно открытое) и получился эстонский национальный МАКС, который:

  • ловит на парковке
  • действительно безопасен, т.к. используется E2EE на проверенных протоколах
  • действительно защищён от мошенников, т.к. авторизация буквально по паспорту и в vCard твоё реальное ФИО и фото

стоимость разработки: 200$ на подписку Claude Max

ZakritiyNarcist
() автор топика
Ответ на: комментарий от ZakritiyNarcist

в MAX основная проблема (как по мне) что быстро номера телефонов попадают в бан.

нужно как-то прям ОЧЕНЬ ОЧЕНЬ аккуратно начинать все диалоги (быть максимально НЕ общительным) по началу…

…чтобы прикреплённый к тебе AI-майор не подумал бы что ты сделал нарушение (какие именно — техподдержка говорить не будет:)).

или возможно они считают что нужно просто забанить каждого человека, а потом тех кто обратился в ТП так и быть можно разбанить (последний раз в виде исключения, но всё равно не назвав причину)

user_id_68054 ★★★★★
()
Последнее исправление: user_id_68054 (всего исправлений: 1)
Ответ на: комментарий от user_id_68054

у МАКС основная проблема в том, что это не мессенджер.
что мешало взять тот же XMPP, форсированно запретить всякое шифрование и сидеть себе читать плейнтекст в подвалах лубянки – я искренне не понимаю

ZakritiyNarcist
() автор топика
Ответ на: комментарий от user_id_68054

А у меня на андроиде не запущен VPN. У меня в настройках точек доступа стоят прокси. Вообще, по-моему, эти детекты VPN - просто освоение бюджета, и раздувание бюджета. Боюсь представить боль оперативников, которых заставляют это исследовать.

Shadow ★★★★★
()
Последнее исправление: Shadow (всего исправлений: 1)

tackygram написан на Go и Tcl

Как это влияет на работу tackygram на 32 битном одном ядре и 256 Мб RAM?

Shadow ★★★★★
()
Ответ на: комментарий от Shadow

У меня в настройках точек доступа стоят прокси.

Но там нельзя указать SOCKS. Кроме того приложение может игнорировать эту настройку.

MirandaUser2 ★★
()
Ответ на: комментарий от Shadow

tackygram не тестировался на 32-битных архитектурах и вероятнее всего не будет работать, т.к. в gotd (как и в самом Telegram) используются 64-битные идентификаторы сообщений.

ZakritiyNarcist
() автор топика
Ответ на: комментарий от ZakritiyNarcist

нашим сервером никто не заставляет пользоваться.
более того, как только количество активных пользователей перевалит некий предел - мы либо закроем регистрацию, либо сделаем её платной, так как на благотворительность никто не подписывался.

поднимайте свой: https://dev.another.im/another-im/anotherim-server
там написано как это сделать. если не понимаете – спросите у умного робота.

20$ в год на домен и сервер можно сэкономить на школьных завтраках, если вы не @LightDiver.

ZakritiyNarcist
() автор топика
Ответ на: комментарий от mumpster

Я на днях видел за 59 рублей в месяц. Правда условия не смотрел. А это что то окол 8 долларов в год.

LightDiver ★★★★★
()
Ответ на: комментарий от ZakritiyNarcist
  1. там всего 1 немного дешевле 20 и то с такими нищебродскими условиями, что даже апача с 1 страничкой+почта могут туда не влезть )))))
  2. остальные все - дороже 20 в год
  3. ещё надо за домен заплатить.
  4. года 2 назад было реально оба два (впс+домен) в 20 в год уложиться. это да
mumpster ★★★★★
()
Ответ на: комментарий от ptah_alexs

У меня .su

Брал изначально по 150р в год где то лет 16 назад. Пару лет назад подняли цены в 10 раз кжадый год растет процентов на 20. Уже почти 2к.

Здравствуйте!

Срок регистрации домена VLADGOBELEN.SU заканчивается 05.11.2026.

По вопросам оплаты Вам следует обращаться к Партнеру RU-CENTER Общество с ограниченной ответственностью "Бегет".

Администратор услуги: ***
Договор: 2575247/NIC-D
Договор находится под управлением партнера: 15310/NIC-REG

В случае, если продление домена не будет оплачено до 05.11.2026, его делегирование
приостановится, а после 07.12.2026 он будет освобожден и может быть
зарегистрирован любым лицом. 

Если вы планируете использовать доменное имя VLADGOBELEN.SU в дальнейшем,
необходимо продлить срок его регистрации на следующий год.

Нашел. 1930 рублей продление.

LightDiver ★★★★★
()
Последнее исправление: LightDiver (всего исправлений: 1)
Ответ на: комментарий от MirandaUser2

Https достаточно, а так как это настройки точек доступа ОпСоСа, то приложение не может его игнорировать.

Shadow ★★★★★
()
Ответ на: комментарий от LightDiver

Значит от регистратора зависит. У меня su от рег.ру третий год, цену повысили только в этом году, было 600, стало 730.

ptah_alexs ★★★★★
()
Ответ на: комментарий от lealxe

да, это полнейший упоринум форте и это изначально принёс @wusspuss, но потом я глянул и проникся - он офигенно подходит под работу с джабберным XML и прочими DOM-подобными штуками, получается понятно и лаконично, что в эпоху ИИ особенно важно - сегодня можно навайбкодить 200 тыщ строк на Rust с его инопланетным синтаксисом и это даже будет работать, однако там 100% будут нюансы и оставшиеся кожаные прислуги прикуеют с того, сколько надо проверять и вычитывать.

а вот с Tcl всё не так - модуль на Tcl вычитывается кожаным разработчиком за один вечер, а если мухоморы попадутся качественные – то модуль ещё и пишется (руками). такие дела.

ZakritiyNarcist
() автор топика
Ответ на: комментарий от ZakritiyNarcist

P.S. если делать нечего и хочется повайбкодить на Tcl – приходи к нам контрибьютить, у нас есть печеньки (и криптодоллары)

ZakritiyNarcist
() автор топика
Ответ на: комментарий от Shadow

причём здесь go вообще?
tdlib написан на C++, он тоже не умеет в 32 бита. C++ тоже рак? (да, но не из-за этого)

тогда уж Telegram это рак, так как они ввели 64-битные идентификаторы сообщений бог весть когда (с вводом рекламы в каналах, кажется в 2020, чтобы старые клиенты с 32-битными идентификаторами сообщений отвалились и заставить все юзать новые клиенты, с встроенной рекламой)

ZakritiyNarcist
() автор топика
Ответ на: комментарий от ZakritiyNarcist

не, ты наверняка можешь эмулировать поддержку 64-битных идентификаторах, попроси ИИ навайбкодить, ей это как два пальца в розетку, но зачем?

I mean, зачем в 2026 году пользоваться 32-битным процессором/ОС с 256 Мб системной памяти? и тем более, пытаться запустить на этом серверное ПО?

ZakritiyNarcist
() автор топика

анимированных стикеров какашки которые жрут батарейку и не несут полезной смысловой нагрузки;

анимированных эмодзи и Б-г весть чего ещё;

Эх, а так хотелось.

Сорри за тупняк (мб где-то есть ответ, но я не нашёл), а как эта штука выглядит со стороны собеседника из тг?

P. S. С возвращением на ЛОРчик, Владимир (Павел Р.)

mister_me ★★
()
Ответ на: комментарий от frunobulax

Не упущенная, после следующего бана у него появится возможность.

mister_me ★★
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.