Что такое jabber Telegram

Российские энтузиасты представили первую стабильную бета-версию своей Open Source-разработки для транспорта сообщений из Jabber (протокол XMPP) в сервис обмена сообщениями Telegram — tg4xmpp 0.1.

Шлюз tg4xmpp позволяет общаться в сети Telegram (используя свою учётную запись Telegram) из Jabber-клиента, заменяя таким образом официальный клиент Telegram. Как сообщают авторы, «транспорт почти способен заменить официальный клиент Telegram (конечно, если использование Telegram ограничивается лишь текстовой перепиской)». Шлюз tg4xmpp поддерживает отправку и получение сообщений в чаты и супергруппы и имеет уведомления о прочтении сообщений, отображает отредактированные сообщения, поддерживает статусы (Presence) и синхронизирует их с Telegram, поддерживает VCard (XEP-0054), двухфакторную авторизации в Telegram. Сейчас разработчики заняты реализацией работы с мультимедийным контентом.

Код tg4xmpp написан на языке Python, для работы с протоколом XMPP использует библиотеку sleekxmpp, а для поддержки Telegram — telethon. Исходный код распространяется на условиях свободной лицензии Apache License v2, его можно получить из SVN-репозитория проекта (можно указать любые логин и пароль для аутентификации). После установки службы можно добавить в свой Jabber-ростер контакт tlgrm.rxtx.us и написать ему !help для получения помощи.

Про запрет анонимности в мессенджерах, анонимность Telegram и что такое Jabber [ПЕРЕЗАЛИВ]

Проект является некоммерческим, и авторы принимают пожертвования на его дальнейшее развитие в свои электронные кошельки: Bitcoin (12LzRmjY5YzZ921SCtbWcSD29nLUCbAd1t) и Ethereum (0×33887f3A50071f2A212eE9ab7eF7710f2Db7954F).

Источник: www.nixp.ru

Транспорт-бот Jabber конференций для Telegram

Транспорт-бот Jabber конференций для Telegram

2016-07-18 в 13:24, admin , рубрики: aiohttp, jabber bot, open source, python, slixmpp, telegram bots, Системы обмена сообщениями

Транспорт-бот Jabber конференций для Telegram - 1

Доброго времени суток.

В один прекрасный день, после значительного перерыва, судьба вновь столкнула меня с 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, с которым опыта работы не было, так что этот вариант не рассматривался и о функционале не могу ничего сказать.

Как анонимно общаться в сети. Все про Jabber

Выбор библиотек обусловлен, в основном, желанием поработать с asyncio.

Изначально разрабатывалась версия с tet-a-tet диалогом для одного пользователя, которая позднее была расширена использованием XMPP Components для групповых чатов, с отдельным xmpp-юзером для каждого участника.

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

Еще по теме:  Как избавиться от ботов в Телеграмме рассылки

Почему так сделано? API ботов весьма ограничивает количество входящих/исходящих запросов за короткое время, и при достаточно интенсивном обмене сообщениями будут возникать ошибки.

Что есть в целом:

  • Отправка/приём текстовых сообщений в общем диалоге
  • Двусторонее редактирование сообщений (XEP-0308)
  • Приватные сообщения
  • Ответ по нику собеседника
  • Файлы, аудио, изображения (загружаются через сторонний сервис)
  • Стикеры (заменяются на emoji)
  • Автостатус при неактивности с последнего сообщения
  • Смена ника в конференции

Тем не менее, есть различия между двумя версиями:

  • «Подсветка» сообщений с ником пользователя не работает в групповых чатах, так как в телеграме невозможно это сделать индивидуально
  • Бот делает групповой чат в телеграмм бесшовным, т.е., если участника забанили в xmpp-конференции, он не может писать сообщения в чат

При разработке удобно использовать виртуальные окружения, так что можно создать одно:

$ python3.5 -m venv venv $ . venv/bin/activate

Для использования нужно установить из pip aiohttp, slixmpp и ujson. При желании можно добавить gunicorn. С окружением или без, все пакеты есть в PyPI:

$ pip3 install aiohttp slixmpp ujson

В конце поста есть ссылки на bitbucket репозитории с исходниками.

История telegram

Прежде стоит отметить, что готовые фреймворки для API Telegram не использовались по ряду причин:

  • На момент начала работы asyncio поддерживал только aiotg. Сейчас, кажется, все популярные
  • Вебхуки часто реализованы как добавка к лонг пуллу и в любом случае приходится использовать библиотеку для обработки входящих соединений
  • В целом, многие возможности библиотек были просто не нужны
  • Ну или просто NIH

Так что была сделана простенькая обёртка над основными объектами и методами bots api, запросы отправляются с помощью requests, json парсится ujson, потому что быстрее.

Настройка бота осуществляется посредством скрипта-конфига:

config.py

Представление объектов выглядит примерно так:

mapping.py

class User(object): def __str__(self): return ‘» last_name=»<>» username=<>>’.format(self.id, self.first_name, self.last_name, self.username) def __init__(self, obj): self.id = obj.get(‘id’) self.first_name = obj.get(‘first_name’) self.last_name = obj.get(‘last_name’) self.username = obj.get(‘username’)

Класс бота для выполнения запросов:

bind.py

Все запросы обрабатываются с помощью вебхуков, которые приходят на адрес TG_WH_URL.
RequestHandler.handle() — coroutine для обработки запросов aiohttp.

handler.py

from aiohttp import web import asyncio import tgworker as tg # модуль для работы с bots api import mucbot as mb # модуль с процедурами xmpp import tinyorm as orm # небольшая обёртка над sqlite3 class RequestHandler(object): . async def handle(self, request): r = await request.text() try: . update = tg.Update(ujson.loads(r)) log.debug(«TG Update object: <>».format(ujson.loads(r))) . except: log.error(«Unexpected error: <>».format(sys.exc_info())) . raise finally: return web.Response(status=200) def __init__(self, db: orm.TableMapper, mucBot: mb.MUCBot, tgBot: tg.Bot, tgChatId, loop): self.__db = db self.__tg = tgBot self.__mb = mucBot self.__chat_id = tgChatId self.__loop = loop . . loop = asyncio.get_event_loop() whHandler = RequestHandler(db, mucBot, tgBot, TG_CHAT_ID, loop) app = web.Application(loop=loop) app.router.add_route(‘POST’, ‘/’, whHandler.handle) .

В процессе обработки текстовые сообщения отправляются в конференцию. Либо как приватное сообщение, если это ответ на приватное сообщение или при ответе добавлена команда /pm.

Файлы перед отправкой загружаются на сторонний сервер и в конференцию отправляется ссылка на файл. Скорее всего, для общего использования такой подход не подойдёт и придётся сделать загрузку на Imgur или другой сервис, который предоставляет API. Сейчас же файлы просто отправляются на сервер jTalk. С позволения разработчика, конечно. Но, так как это всё-таки для личного пользования, то адрес вынесен в конфиг.

Еще по теме:  Всплывет круг в Телеграмме

Стикеры просто заменяются на их emoji-представление.

Опус о xmpp

В своё время для python было две весьма популярных библиотеки — SleekXMPP и xmpppy. Вторая уже устарела и не поддерживается, а асинхронность SleekXMPP реализована потоками. Из библиотек, которые поддерживают работу с asyncio есть aioxmpp и slixmpp.

Aioxmpp пока весьма сырая и у неё нет исчерпывающей документации. Тем не менее, первая версия бота использовала aioxmpp, но потом переписана для slixmpp.

Slixmpp — это SleekXMPP на asyncio, интерфейс там такой же, соответственно, большинство плагинов будут работать. Она используется в консольном jabber-клиенте Poezio.
К тому же, у slixmpp замечательная поддержка, которая помогла решить некоторые проблемы с библиотекой.

Однопользовательская версия использует slixmpp.ClientXMPP в качестве базового класса, когда как многопользовательская — slixmpp.ComponentXMPP

Обработчик событий XMPP выглядит примерно вот так:

mucbot.py

import slixmpp as sx class MUCBot(sx.ClientXMPP): # class MUCBot(sx.ComponentXMPP): # версия для групповых чатов . # # Event handlers # def _sessionStart(self, event): self.get_roster() self.send_presence(ptype=’available’) self.plugin[‘xep_0045’].joinMUC(self.__mucjid, self.__nick, wait=True) # для групповых чатов необходимо подключить всех пользователей . # # Message handler # def _message(self, msg: sx.Message): log.debug(«Got message: <>».format(str(msg).replace(‘n’, ‘ ‘))) . # # Presence handler # def _presence(self, presence: sx.Presence): log.debug(«Got Presence <>».format(str(presence).replace(‘n’, ‘ ‘))) . # # Initialization # def __init__(self, db, tgBot, tgChatId, jid, password, mucjid, nick): super().__init__(jid, password) self.__jid = sx.JID(jid) self.__mucjid = sx.JID(mucjid) self.__nick = nick self.__tg = tgBot self.__db = db self.__chat_id = tgChatId . # настройка плагинов поддержки разных XEP self.register_plugin(‘xep_XXXX’) # Service Discovery . # подписка на события xmlstream self.add_event_handler(«session_start», self._sessionStart) self.add_event_handler(«message», self._message) self.add_event_handler(«muc::<>::presence».format(mucjid), self._presence) .

Очевидно, обязательным будет подключить XEP-0045 для MUC, еще полезным будет XEP-0199 для пингов и XEP-0092, чтобы показывать всем какие мы классные свою версию.

Сообщения из xmpp просто отправляются в чат с пользователя (или групповой чат) с TG_CHAT_ID из конфига.

Настройка XMPP-сервера для работы с компонентами

Интересная особенность — это использование компонентов xmpp для динамического создания пользователей. При этом не надо создавать отдельный объект для каждого пользователя и хранить данные для авторизации. Минус в том, что не получится использовать свой основной аккаунт.

Из соображений лёгкости и простоты выбран Prosody в качестве xmpp-сервера.

Описывать конфигурацию не буду, единственное отличие от шаблонна — включение компонента (COMPONENT_JID из конфига бота):

Component «tg.xmpp.domain.tld» component_secret = «password»

В общем-то, это вся настройка xmpp. Остаётся только перезапустить prosody.

Сказ о gunicorn и nginx

Если так совпало, что у вас по счастливой случайности наружу смотрит nginx, стоит добавить директиву в секцию server.

nginx.cfg

location /path/to/123456 < error_log /path/to/www/logs/bot_error.log; access_log /path/to/www/logs/bot_access.log; alias /path/to/www/bot/public; proxy_pass http://unix:/path/to/www/bot/bot.sock:/; >

Настройку HTTPS описывать, думаю, не стоит, но сертификаты получались через letsencrypt.

Конфигурацию для примера брал из этого комментария. Полный конфиг можно посмотреть здесь, параметры для шифрования подбирались в Mozilla SSL Generator

Вся эта конструкция из… палок работает на VPS с Debian 8.5, так что для systemd написан сервис, который запускает gunicorn:

bot.service
[Unit]
After=network.target

[Service]
PIDFile=/path/to/www/bot/bot.pid
User=service
Group=www-data
WorkingDirectory=/path/to/www/bot
ExecStart=/path/to/venv/bin/gunicorn —pid bot.pid —workers 1 —bind unix:bot.sock -m 007 bot:app —worker-class aiohttp.worker.GunicornWebWorker
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s TERM $MAINPID
PrivateTmp=true

Еще по теме:  Как создать анимированные стикеры в Телеграм на Айфоне

Конечно, не помешает выполнить systemctl daemon-reload и systemctl enable bot.

Ссылки на исходники

  • Однопользовательская версия
  • Версия для групповых чатов

P.S. На премию красивейший код года не претендую. Хотелось, конечно, сделать хорошо, но получилось как всегда.

Источник: www.pvsm.ru

Общественный транспорт

  • В этой теме 25 ответов, 1 участник, последнее обновление 2 года, 9 месяцев назад сделано DarkLord .

Просмотр 20 сообщений — с 1 по 20 (из 26 всего)
08.02.2016 в 08:56 #10518
Транспорты из jabber в другие im сети
08.02.2016 в 09:01 #10519

Здравствуйте снова jabber. Знаю что данный вид общения не популярен у молодежи.Большинство использует WhatsApp для общения,некоторые Viber. Но jabber есть наравне совсеми и используется. Хотелось начать данную тему в почти умершем разделе форума чтобы люди узнали что есть вид общения позволяющий обьединить в себе многие im клиенты и сети в одном лице.

08.02.2016 в 09:35 #10520

В данный момент в жабере существует возможность обьединения таких сетей как:
ICQ Gate – Шлюз в сеть обмена сообщениями ICQ.
AIM Gate – Шлюз в сеть обмена сообщениями AIM.
MRIM Gate – Шлюз в сеть обмена сообщениями Mail.ru.
IRC Gate – Шлюз в сеть обмена сообщениями IRC.
VK4XMPP Gate – Шлюз в сеть обмена сообщениями в соц. сети VK.com (личная переписка,чтение личной ленты)
Skype Gate – Шлюз в сеть обмена сообщениями в skype (переписка).
Msn Gate – Шлюз в сеть обмена сообщениями в сети MSN (в россии непопулярна)
J2J Gate – Шлюз в сеть обмена сообщениями в другую сеть jabber или чтение почты прямо в клиенте
RSS – Чтение новостных лент.
И многое еще всего не перечислить. Такие сети Gaidu-Gaidu Simple и прочие

08.02.2016 в 09:46 #10521

Вданный момент существует возможность дублирование переписки на пк такой сети как Telegram (пока односторонне т.е получение копии на пк,но не ответ с пк(это скоро)).
К чему я это все ? Не знаю просто хотел сказать наверное. А вернее на своем примере показать как этим пользоваться. Например моя мама непризнает мессенджеры она упорно на протяжении многих лет сидит в веб версии mail.ru.
Сестра сидит в контакте и скайпе более нигде.
Брат сидит в майл агенте.
Друзья сборная солянка: кто то из старых сидит в IRC, кто то из помоложе сидит в Icq, кто то в жабере.
А вот теперь подумайте сколько месенджеров мне нужно поставить себе чтоб иметь возможность им всем писать и быть доступным для переписки ? 5 клиентов плюс пользование веб версиями вконтакте.
а в итоге я обошелся одним SIP+Jabber. И в любой момент любой человек мне может написать и позвонить

08.02.2016 в 09:51 #10522

Я не агитирую на Jabber просто хотел донести что есть сеть с такими широки возможностями. Почему здесь ? Да потому что Вы все стремитесь свести все звонки из любых сетей в одну! Сюда на talk37 . И иметь возможность позвонить из одного места куда и как угодно.
Знайте Jabber это практически тоже самое только в мире месенджеров !
Спасибо что нашли время все это прочитать.

Источник: ruvoip.net

Рейтинг
( Пока оценок нет )
Загрузка ...