mrdoctorwho / vk4xmpp Goto Github PK
View Code? Open in Web Editor NEWJabber-транспорт для ВКонтакте (A jabber gateway to the VK social network)
Home Page: https://vk.com/vk4xmpp
License: MIT License
Jabber-транспорт для ВКонтакте (A jabber gateway to the VK social network)
Home Page: https://vk.com/vk4xmpp
License: MIT License
$ python2.7 gateway.py
#-# Config loaded successfully.
#-# Killing old transport instance: 8509 killed.
#-# Connecting: ok.
#-# Auth: ok.
#-# Initializing users.
#-# Finished.
Ошибка сегментирования
На ветке master аналогичная команда запускает транспорт без ошибок.
$ python2.7 --version
Python 2.7.6
Следует обдумать возможность отправки файлов по IBB из xmpp → vk или же по p2p, как это сделано в Gajim. Если же P2P, то можно будет позволить транспорту отправлять файлы vk → xmpp.
Считает их оффлайновыми, глупец.
Ну до кучи ещё один фич-реквест.
Мне кажется это должно выглядеть как то так:
"Работаю. Усталый. Как же я надоела работа"
Сделайте, плз, как в tweet.im - без необходимости плясок с бубном, копированием ссылок и прочих нечеловеческих усилий.
И лог очень быстро становится очень большим.
triklozoid ~/vk4xmpp $ ls -lah vk4xmpp.log
-rw-rw-r-- 1 triklozoid triklozoid 16G сент. 18 14:35 vk4xmpp.log
triklozoid ~/vk4xmpp $ tail -n 100000 vk4xmpp.log |sed 's/.*]://'|uniq -c
99999 ERROR:vk4xmpp writing crashlog main.Disconnect
Кажется одного сообщения было бы достаточно.
А вообще штука крутая, спасибо.
Есть некоторые недочёты в текущей реализации.
В списке пользователей в конференции дублируется текущий пользователь: в списке есть тот никнейм, с которым зашел в конференцию + есть собственно вконтактовский пользователь. Сообщения отсылаются от имени пользователя в конференции, но при этом в веб-интерфейсе VK видны как сообщения VK-пользователя. При этом зайти с никнеймом VK-пользователя нельзя. На скриншоте мой пользователь в 2 экземплярах: malcoriel и Валерий Кузьмин.
Используемый софт:
Miranda NG Version: 0.94.5 #6300
jabber.dll v.0.11.0.3 [2 Oct 2013 16:44:28]
ejabberd: 2.1.10-2ubuntu1.1
vk4xmpp: 1a31561
Насколько я понял, есть небольшая задержка в проходе сообщений через транспорт. Ну и, собсна, сообщеньки перепутываются. Это решаемо вообще или смириться? Или может у меня клиенты кривые были?(юзал mcabber, pidgin, empathy).
When jabber server restarts vk4xmpp begins to flood messages "#! fixme: "main.Disconnect".". Is it possible to make it auto reconnect when server goes up? It is rather inconvenient when you reconfigure server to restart vk4xmpp manually. And also it is required to restart it manually when ejabber suddenly falls.
Thanks.
На текущий момент vk4xmpp справляется с задачей создания конференций и поддержания их активности. В дальнейшем строго рекомендуется проверять наличие активности и удалять по истечении указанного времени.
если адрес страницы пользователя https://vk.com/nick, то JID становится [email protected], а не [email protected]
если же ника нет, то JID логичнее чтобы был [email protected] - так же, как и у адресов страниц
lazytofix
Есть предложения и замечания по транспорту.
Предложения следующие:
Замечания:
Здравствуйте!
Столкнулся с некоторыми проблемами при настройке транспорта. Подключил транспорт, в списке сервисов сервера он виден.
После получения токена и ввода его и телефона в форму регистрации - ничего не происходит, но судя по логам - возникает ошибка.
Server: ejabberd 2.1.10-4+deb7u1
Client: psi 0.14
vk4xmpp: 173
[14.07.2014 05:06:57]:DEBUG:vk4xmpp Sending register form to [email protected]
[14.07.2014 05:07:07]:DEBUG:vk4xmpp user [email protected] won't use password
[14.07.2014 05:07:07]:DEBUG:vk4xmpp VKLogin.init with number:+ТУТ_БЫЛ_НОМЕР_ТЕЛЕФОНА from jid:[email protected]
[14.07.2014 05:07:07]:DEBUG:vk4xmpp initializing User for [email protected]
[14.07.2014 05:07:07]:DEBUG:vk4xmpp User: [email protected] exists in db. Have to use it.
[14.07.2014 05:07:07]:DEBUG:vk4xmpp User: connecting [email protected]
[14.07.2014 05:07:07]:DEBUG:vk4xmpp VKLogin.auth with token
[14.07.2014 05:07:07]:DEBUG:vk4xmpp VKLogin: checking data for [email protected]
[14.07.2014 05:07:07]:DEBUG:vk4xmpp VKLogin.checkData: trying to use token
[14.07.2014 05:07:07]:DEBUG:vk4xmpp VKLogin.auth completed
[14.07.2014 05:07:07]:DEBUG:vk4xmpp longpoll: requesting server address for user: [email protected]
[14.07.2014 05:07:07]:DEBUG:vk4xmpp longpoll: server: http://im69v4.vk.com/im2378 ts: 1828470938
[14.07.2014 05:07:07]:DEBUG:vk4xmpp User: auth=True for [email protected]
[14.07.2014 05:07:07]:DEBUG:vk4xmpp User: updating db for [email protected] because auth done
[14.07.2014 05:07:08]:CRITICAL:vk4xmpp DISCONNECTED
[14.07.2014 05:07:08]:ERROR:vk4xmpp writing crashlog Component.iter
[14.07.2014 05:07:08]:ERROR:vk4xmpp writing crashlog main.disconnect
[14.07.2014 05:07:08]:ERROR:vk4xmpp writing crashlog main.disconnect
| 14.07.2014 (05:07:08) |
Traceback (most recent call last):
File "/usr/share/vk4xmpp/gateway.py", line 885, in
Component.iter(6)
File "library/xmpp/dispatcher.py", line 175, in Process
deferredRaise(self._pendingExceptions.pop())
File "library/xmpp/dispatcher.py", line 402, in dispatch
handler["func"](session, stanza)
File "handlers/IQ.py", line 25, in iqHandler
iqRegisterHandler(cl, iq)
File "handlers/IQ.py", line 130, in iqRegisterHandler
if not user.connect():
File "/usr/share/vk4xmpp/gateway.py", line 412, in connect
if not UseLastMessageID:
NameError: global name 'UseLastMessageID' is not defined
W191 indentation contains tabs
E501 line too long (X > 79 characters)
E223 tab before operator
Примутся ли чисто рефакторинговые пулл-реквесты, чтобы код больше соответствовал стандартам?
Открыв код в pycharm, мой монитор стал настолько желтым, что у меня в комнате поднялась температура :)
Конкретнее:
Заменить все табы на пробелы из 4 символов
Сократить длину строк до 79 символов
More and more
caps
Понятно дело что это не баг а фич-реквест...
Собственно я не предлагаю естественно слать музыку, видео и картинки напрямую...
Для картинок предлагаю присылать URL на страницу с картинкой и на полную картинку.
Для видео и аудио хотя бы уведомление(в XMPP от вК бесило что тебе прислали что то а ты даже не знаешь об этом), или тоже ссылку, если API это позволяет.
Я не уверен, что это сложно в реализации и планирую это реализовать.
При попытке зарегистрироваться на транспорте, он присылает регистрационный , содержащий форму для заполнения регистрационными данными.
Тип данных указан неверно: вместо "form" указан "submit".
В результате на клиентах, которые работают корректно, не удаётся зарегистрироваться. Например, Vacuum-IM отображает пустую форму. Зарегистрироваться получается только на косячных клиентах (типа QiP), которые игнорируют тип получаемых данных.
Знаю, что этот XEP официально не рекомендуется к реализации, но всё-таки он всё равно достаточно популярен, и, к тому же, реализован в любом Jabber-боте :)
Хотелось бы иметь возможность запрашивать статистику транспорта — число зарегистрированных, число онлайнов, число переданных сообщений и так далее. Плюс сделать возможность посмотреть эту статистику через команду Ah-Hoc, т/к большинство клиентов не умеют запрашивать статистику именно по этому херу.
Вероятно, следует прибегнуть оптимизациям
*** Статистика vk.jabberik.ru:
users/total: 110
users/online: 101
memory/virtual: 1356804
memory/real: 47344
Память в килобайтах.
возможно ли сделать оповещение о наборе сообщения другого человека когда я набираю и наоборот?
кроме того, вероятно, есть смысл помечать сообщения прочитанными на сервере вк только после того, как я начал набирать ответ или ответил (как было в официальном xmpp вконтакте)?
Думаю этим вопросом задаюсь не только я. Вот есть Pidgin, вот есть ваш транспорт, вот есть НеПрограммист. "И че?" Задаст логичный вопрос не обремененный багажом знаний в части транспортов и протоколов НеПрограммист.
В общем есть вот такая просьба - совет приготовьте пошаговую инструкцию по использованию этого в Pidgin, qutIM, в общем в человеческих условиях.
pip freeze > requirements.txt
Потом люди могут просто сделать pip install -r requiremets.txt и всё.
К тому же хранение бинарных файлов в GIT не кошерно.
…
К рассмотрению, один из крутейших вариантов для получения обновлений, как из новостной ленты, так и со стенок (личные, группы). Конечно, тут везде опять появляется polling.
Вообще, вконтакте имеет всё подспорье для интеграции с xmpp, да если бы там ещё и pubsub был бы родной, без костылей.
доки:
позволит обновлять только то, что надо и вовремя, реализуется через запуск дополнительного thread-а для каждого клиента в онлайне, в котором и выполняется сначала получение информации о сервере, а затем его опрос.
Вроде GIL не возникает, надо проверить еще.
Спасибо за возможность, но пока не получилось попробовать…
Пробовал установить на локалхосте в своём арче.
Prosody настроил, vk4xmpp скачал.
Но при запуске выдает вот что:
/usr/share/vk4xmpp$ python gateway.py
File "gateway.py", line 19
print "#! Incorrect launch!"
^
SyntaxError: invalid syntax
Попробовал пакет из аур, но разницы нет.
Иногда просто теряется какое-то одно, а иногда вообще перестают приходить. Последнее было замечено сразу после некоторой активности в чате самого вконтактика. Напоминает непонятки с приоритетами ресурсов джаббера, но тут ведь нечто иное, да?
Добрый вечер.
Такая проблема: сразу после ПЕРВОГО подключения, загружаются в ростер все контакты и становятся видимыми те, что на тот момент в онлайне. Если вывести джаббер в оффлайн и подключиться снова, то онлайн контакты не отображаются как онлайн. Как будто никого нет в сети.
Ситуация меняется, когда я получаю от кого-то сообщение - человек становится видим как в сети.
Можно что-то с этим сделать? В остальном на первый взгляд работает замечательно. Спасибо большое.
Падает при запуске, ранее падал при получении сообщения в групповом чате или запросе формы регистраци. Последняя версия из Git, ветка master.
vk4xmpp.log:
[03.09.2014 09:51:51]:ERROR:vk4xmpp vkapi: ujson couldn't be loaded, using simplejson instead
[03.09.2014 09:51:51]:INFO:vk4xmpp main: add "TimeAndRelativeDimensionInSpace" to handle type msg01
[03.09.2014 09:51:51]:INFO:vk4xmpp main: add "parseAttachments" to handle type msg01
[03.09.2014 09:51:51]:INFO:vk4xmpp main: add "statusChange" to handle type prs01
[03.09.2014 09:51:51]:INFO:vk4xmpp main: add "parseForwardedMessages" to handle type msg01
[03.09.2014 09:51:51]:DEBUG:vk4xmpp extension groupchats is loaded
[03.09.2014 09:51:51]:INFO:vk4xmpp main: add "outgoungChatMessageHandler" to handle type msg01
[03.09.2014 09:51:51]:INFO:vk4xmpp main: add "incomingChatMessageHandler" to handle type msg02
[03.09.2014 09:51:51]:INFO:vk4xmpp main: add "exterminateChat" to handle type evt03
[03.09.2014 09:51:51]:INFO:vk4xmpp main: add "captchaSend" to handle type evt04
[03.09.2014 09:51:54]:DEBUG:vk4xmpp User not in the transport, but presence received. Searching in database (jid: [email protected])
[03.09.2014 09:51:54]:DEBUG:vk4xmpp User has been found in database (jid: [email protected])
[03.09.2014 09:51:54]:DEBUG:vk4xmpp VK.init with number:+7********** from jid:[email protected]
[03.09.2014 09:51:54]:DEBUG:vk4xmpp initializing User (jid: [email protected])
[03.09.2014 09:51:54]:DEBUG:vk4xmpp User exists in database. Using his information (jid: [email protected])
[03.09.2014 09:51:54]:DEBUG:vk4xmpp User: connecting (jid: [email protected])
[03.09.2014 09:51:54]:DEBUG:vk4xmpp VK.auth with token
[03.09.2014 09:51:54]:DEBUG:vk4xmpp VK: checking data (jid: [email protected])
[03.09.2014 09:51:54]:DEBUG:vk4xmpp VK.checkData: trying to use token
[03.09.2014 09:51:54]:DEBUG:vk4xmpp VK.auth completed
[03.09.2014 09:51:54]:DEBUG:vk4xmpp longpoll: requesting server address (jid: [email protected])
[03.09.2014 09:51:54]:DEBUG:vk4xmpp User: auth=True (jid: [email protected])
[03.09.2014 09:51:54]:DEBUG:vk4xmpp User: updating database because auth done (jid: [email protected])
[03.09.2014 09:51:54]:DEBUG:vk4xmpp longpoll: server: http://im56v6.vk.com/im1815
[03.09.2014 09:51:55]:DEBUG:vk4xmpp User: called init for user [email protected]
[03.09.2014 09:51:55]:DEBUG:vk4xmpp User: sending init presence (friends exists) (jid [email protected])
[03.09.2014 09:51:55]:DEBUG:vk4xmpp groupchats: creating 445815_chat#[email protected]. Users: 264748766,264749935; owner: 445815
[03.09.2014 09:51:56]:CRITICAL:vk4xmpp disconnected
[03.09.2014 09:51:56]:ERROR:vk4xmpp write crashlog component.iter
[03.09.2014 09:51:56]:ERROR:vk4xmpp write crashlog main.disconnect
[03.09.2014 09:51:56]:DEBUG:vk4xmpp groupchats: user has been invited to chat 445815_chat#[email protected] (jid: [email protected])
[03.09.2014 09:51:56]:ERROR:vk4xmpp write crashlog main.disconnect
gateway.log:
Traceback (most recent call last):
File "/home/xtransport/vk4xmpp/gateway.py", line 1262, in
disconnectHandler(True)
File "/home/xtransport/vk4xmpp/gateway.py", line 1206, in disconnectHandler
Component.disconnect()
File "library/xmpp/dispatcher.py", line 484, in disconnect
while self.Process(1):
File "library/xmpp/dispatcher.py", line 175, in Process
deferredRaise(self._pendingExceptions.pop())
File "library/xmpp/dispatcher.py", line 402, in dispatch
handler["func"](session, stanza)
File "modules/mod_iq_main.py", line 12, in main_handler
Sender(cl, utils.buildIQError(iq, xmpp.ERR_BAD_REQUEST, "You're not in the white-list"))
NameError: global name 'Sender' is not defined
Пользуюсь IM клиентом Empathy, подключаюсь к серверу vk.jabberik.ru.
Часто на сторону адресата сообщения от меня приходят сообщения такого вида, которые сам не вижу в клиенте, или до тех пор пока не зайду в ВК сообщения:
Внимание, системное сообщение!
Спамооборона классифицировала Ваше сообщение как спам. Если это ошибка, пожалуйста, перейдите по ссылке и выполните инструкции, описанные на открывшейся странице.
http://online.yandex.ru/captcha.xml?u=*****..
возможно ли добавить поддержку картинок, аудиозаписей, пересланных сообщений и т.п.? Сейчас они вообще не отображаются.
Картинки можно превращать в ссылки на эти картинки; аудиозаписи и пересланные сообщения в ссылки на сообщения типа vk.com/mail?act=show&id=цифры
subject
В моменты, когда сообщение от собеседника ВК пришло на долю секунды позже, чем сообщение от пользователя, сообщение успевает стать прочитанным (согласно новой политике чтения сообщений во ВК), в связи с чем транспорт не отсылает сообщение пользователю.
Не уверен, как лучше правильно это описать и стоит ли вообще, ибо это бета, но пускай будет, правда ведь? )
Вот только что пришёл запрос на подтверждение капчи. Подтвердил успешно. Но в контактах висит только бот. Моих контактов в сети не видно. Что делать?
Можно ли ввести какую-нибудь команду для принудительного обновления текущей инфы о контактах?
А так приходит в Gajim:
[12:25:23] xxx: Unknown attachment: {u'photo_128': u'http://vk.com/images/stickers/133/128b.png', u'photo_64': u'http://vk.com/images/stickers/133/64b.png', u'photo_256': u'http://vk.com/images/stickers/133/256b.png', u'height': 256, u'width': 244, u'id': 133}
[12:25:33] xxx: это твоя малинка 😆
Транспорт можно запускать через supervisor, некоторым это будет удобней, чем init.d-скрипт.
Добавлю конфиги в форк ASAP.
Добрый день.
Изредка приходит запрос подтверждения капчи, раз пятьдесят пробовал - бесполезно.
"WARNING: VK sent captcha to you.Please, go to http://api.vk.com/captcha.php?sid=ХХХХХХХХХХХХ and enter text from image to chat.Example: !captcha my_captcha_key. Tnx
Captcha invalid."
Ввожу так: !captcha код-с-картинки.
Для чего это вообще нужно? Чем грозит не-ввод капчи?
Спасибо.
Отмечать сообщение прочитанным когда начинаешь печатать.
За 4 дня на одном из серверов расход оперативной памяти транспортом вырос с 25МБ до 258МБ. При этом был замечен аномальный рост списка TransportsList, что вызвало запуск огромного количества лишних потоков.
Периодически с моего аккуанта в групповой чат отправляется какой-то мусор: какие-то бессмысленные сообщения (я здесь, меня видно?, кто тут?, эта комната не анонимная,и т.д.), наборы смайлов и ещё каких-то символов.
Используемый сервер vk.jabberik.ru
По той же причине, что и PEP8 - пока не поздно, нужно вводить поддержку.
related: #34
Предназначено для того, чтобы все контакты автоматически появились в ростере, без участия со стороны пользователя, равно как и удалились из него; а так же для удаления контактов на стороне vk.com (не знаю правда, позволяет ли это их api).
Поддерживается:
Пурга с запросами на разрешение, описанная в данном XEP - не нужна, во всех трех реализациях подразумевается, что клиент(в данном случае транспорт) проверяет запросом jabber:iq:roster возможность управлять ростером, а дальше управляет им как обычный клиент - см. примеры 4.2-4.4.
Так что же отдельный таск я создал.
Сейчас попытаюсь оттестировать, ибо я только что кое что понял, я использую сторонний сервер, и возможно у него не последняя версия транспорта.
Проблема при запуске транспорта:
Traceback (most recent call last):
File "./gateway.py", line 89, in
GATEWAY_REV = gateway_rev()
File "./gateway.py", line 87, in gateway_rev
return 'rev.%s-%s' % (len(rev),rev[0])
IndexError: list index out of range
Транспорт хочет получить номер ревизии бота, но так как директория с ботом не под контролем версий, соответственно ее не получает. И падает при обработке данных.
Далеко не всегда на сервере установлен git или же папка с установленным приложением находится под контролем версий.
[Unit] Description=VK4XMPP is an Vk.com transport for Jabber/XMPP [Service] Type=simple PIDFile=/usr/share/vk4xmpp/pidFile.txt ExecStart=/usr/bin/python /usr/share/vk4xmpp/gateway.py User=nobody Group=nobody [Install] WantedBy=multi-user.target
Нужно переименовать приложение вконтакте.
Там название приложения "Транспорт vk2xmpp"
Но ВЕЗДЕ название проекта используется vk4xmpp, поэтому приложение должно называться Транспорт vk4xmpp
"дико рвёт шаблон в мозгу"
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.