Jabber bot

September 18, 2019 SOFTWARE JABBER XMPP PERL RUBY

Давно тому назад у меня возникла мысль запустить на один из канальчиков jabber.ru бота. С переменным успехом там работали sulci и isida. Потом связка bitlbee+eggdrop. А потом мне надоело и я дропнул бота.

Зачем нужен был бот? главным образом из-за бредогенератора. Он забавлял посетителей. Таковой работал в sulci и в eggdrop, а в isida был псевдо-генератор, то есть там фразы были в базе и при обращении к боту выбиралась одна из них, случайно.

Итак, пару недель назад, я решил в фоновом режиме вернуться к этому вопросу. Оказалось, что на перле есть несколько основных библиотек для работы с xmpp, но все они требуют гор зависимостей. Я посмотрел в сторону рубей, там всё намного получше, но библиотека xmpp4r не может пройти авторизацию на jabber.ru. Позже я узнал, что кривой алгоритм авторизации вцелом у серверов ejabberd. То есть они не следуют спецификации sasl в моменте изготовления дайджеста. Также хреново работает и перловая библиотека по авторизации через алгоритм sasl на сервере ejabberd.

Самое удивительное, что в интернетах народ нарывается на такую проблему, но вопросы остаются без ответа, спускаются на тормозах, как говорится. Но на русскоязычном(внезапно) форуме гентушников решение нашлось:

необходимо закомменировать строку
$response{authzid} = $authzid;
в Authen/SASL/Perl/DIGEST_MD5.pm

и действительно всё заработало. Удалось авторизоваться и зайти в конфу.
Соответственно, дело за малым: остаётся осилить приём и отправку сообщений. Бредогенератор, по идее, работает по принципу бд - инсерт и селект, то есть там ничего сложного нету.

P.S. На самом деле, есть ещё библитеки под python, скажу больше, в составе gajim они даже работают с кривой авторизацией ejabberd, но у меня есть идея прикрутить бота к api-шке, а api у меня на perl-е...

P.P.S. В ходе исследований, я накатал простенького бота для IRC, воспользовавшись тухлым, но прекрасно сдизайненным модулем Net::IRC. У него простое, деревянное API, работающее в очень удачном ключе. Модули xmpp по сравнению с Net::IRC - это тёмный лес. Они переусложненны, всё в xmpp сделано как-то через не то место. Но приходится с этим смириться, тем более, что львиная доля, реализующая xmpp уже написана.

Next Post