tg4xmpp 0.2 — Jabber-транспорт в сеть Telegram
Вышла вторая (0.2) версия транспорта из Jabber в сеть Telegram.
— Данный транспорт позволяет вам общаться с пользователями Telegram из сети Jabber. Необходим существующий Telegram аккаунт.
— Jabber-транспорты
Зачем это нужно?
— Например, если хотите использовать Telegram на любом устройстве, где нет официального клиента (например, платформа Symbian).
Что умеет транспорт?
— Авторизовываться, в том числе используя двухфакторную аутентификацию
— Отправлять и принимать сообщения из/в Telegram
— Работать с группами, супергруппами и каналами
— Синхронизировать ростер и статусы
— Загружать медиа из сети Telegram
Что не умеет транспорт?
— Инициировать диалог (т.е. диалог уже должен существовать, либо вам должны написать первому)
— Изменять настройки аккаунта
— Голосовые и видеозвонки
— Секретные чаты
Список изменений с версии 0.1
— Теперь используем Telethon версии 0.15.5
— Повышена стабильность работы
— Исправлен баг с бесконечными запросами авторизации
— Реализован импорт контакт-листа из Telegram (XEP-0144)
— Когда неизвестный контакт пишет нам, автоматически добавляем его в ростер
— Исправлена обработка статусов
— Исправлен спам статусами (по-умолчанию статусы обновляются не чаще, чем раз в 60 секунд)
— Теперь при перезапуске транспорта сессии поднимаются автоматически
— Полная поддержка «сервисных уведомлений» (кто-то вошёл в группу, вышел из неё и пр.)
Zhabogram 2.0 — транспорт из Jabber в Telegram
Zhabogram — транспорт (мост, шлюз) из сети Jabber (XMPP) в сеть Telegram, написанный на Ruby. Преемник tg4xmpp.
- Ruby >= 1.9
- xmpp4r == 0.5.6
- tdlib-ruby == 2.0 с скомпилированным tdlib == 1.3
- Авторизация в существующем аккаунте Telegram
- Синхронизация списка чатов с ростером
- Синхронизация статусов контактов с ростером
- Добавление и удаление Telegram-контактов
- Поддержка VCard с аватарками
- Отправка, приём, редактирование и удаление сообщений
- Обработка цитат и пересланных сообщений
- Отправка и приём файлов и специальных сообщений (поддержка фото, видео, аудио, документов, голосовых сообщений, стикеров, анимаций, геолокаций, системных сообщений)
- Поддержка секретных чатов
- Создание, управление и модерирование чатов/супергрупп/каналов
- Сохранение сессий и автоматическое подключение при входе в сеть XMPP
- Получение истории и поиск по сообщениям
- Управление аккаунтом Telegram
Значимые изменения до версии 1.0, новости о которой не было на LOR:
- Добавлена обработка SIGINT с корректным закрытием всех сессий
- Добавлены (и позднее удалены) поддержка iq:jabber:register (регистрация пользователей), iq:jabber:gateway (поиск контактов)
Транспорт-бот Jabber конференций для Telegram
В один прекрасный день, после значительного перерыва, судьба вновь столкнула меня с jabber-конференциями. Правда, среди знакомых jabber уже никто не использует, 2007 год канул в лету, а основным средством общения стал Telegram. Поддержка XMPP на мобильных устройствах оставляла желать лучшего — клиенты на Android хороши каждый в чём-то одном, с iOS и WP всё мягко скажем, не очень. И особенности протокола тоже сказываются на автономности. Поэтому возникла мысль: а не сделать ли бота, которой будет транслировать сообщения из конференций в чат Telegram?
- Python 3.5
- aiohttp для API Telegram
- slixmpp для xmpp
- gunicorn как wsgi сервер
- nginx как фронтенд и прокси для gunicorn
- VS Code в качестве IDE
Основные возможности и зависимости
Из готовых реализаций удалось найти только jabbergram, но он позволяет работать только с одним юзером. Ещё есть реализация на Go, с которым опыта работы не было, так что этот вариант не рассматривался и о функционале не могу ничего сказать.
Выбор библиотек обусловлен, в основном, желанием поработать с asyncio.
Изначально разрабатывалась версия с tet-a-tet диалогом для одного пользователя, которая позднее была расширена использованием XMPP Components для групповых чатов, с отдельным xmpp-юзером для каждого участника.
Бот настроен так, что добавить его в чат с иным пользователем невозможно, поэтому как универсальную реализацию рассматривать нельзя.
Почему так сделано? API ботов весьма ограничивает количество входящих/исходящих запросов за короткое время, и при достаточно интенсивном обмене сообщениями будут возникать ошибки.
- Отправка/приём текстовых сообщений в общем диалоге
- Двусторонее редактирование сообщений (XEP-0308)
- Приватные сообщения
- Ответ по нику собеседника
- Файлы, аудио, изображения (загружаются через сторонний сервис)
- Стикеры (заменяются на emoji)
- Автостатус при неактивности с последнего сообщения
- Смена ника в конференции
- «Подсветка» сообщений с ником пользователя не работает в групповых чатах, так как в телеграме невозможно это сделать индивидуально
- Бот делает групповой чат в телеграмм бесшовным, т.е., если участника забанили в xmpp-конференции, он не может писать сообщения в чат
При разработке удобно использовать виртуальные окружения, так что можно создать одно:
Для использования нужно установить из pip aiohttp, slixmpp и ujson. При желании можно добавить gunicorn. С окружением или без, все пакеты есть в PyPI:
В конце поста есть ссылки на bitbucket репозитории с исходниками.
История telegram
- На момент начала работы asyncio поддерживал только aiotg. Сейчас, кажется, все популярные
- Вебхуки часто реализованы как добавка к лонг пуллу и в любом случае приходится использовать библиотеку для обработки входящих соединений
- В целом, многие возможности библиотек были просто не нужны
- Ну или просто NIH
Так что была сделана простенькая обёртка над основными объектами и методами bots api, запросы отправляются с помощью requests, json парсится ujson, потому что быстрее.