Идея этого бота родилась довольно давно - где-то в 2007-м году или 2008-м году у меня была комнатка на jabber.ru и кому-то пришла в голову идея запустить туда бота. После некоторого размышления был выбран бот sulci. Мотивацию я не помню, но скорее всего дело было в том, что в русскоговорящей джабберной тусовке этот бот был относительно популярен благодаря своему бредогенератору.

Как выяснилось позже технически это было не самое удачное решение. Дело в том, что бот сам по себе был написан на языке ocaml, полагаю, что на тот момент это был очередной убийца плюсов. В нём были некие задатки "инфраструктурности" - управление версиями библиотек и тд... Но обслуживать это всё было не совсем понятно как. Сам бот был "экспериментальным", у автора было не то чтобы много времени на его доработку, а поскольку ocaml имел относительно высокий входной уровень, то желающих поддерживать этот проект по-просту не нашлось, да и github-а на тот момент тоже ещё не было и не сформировалась соответствующая культура... И вот в один прекрасный момент после апгрейда дистрибутива с одной версии debian на другую или возможно при переезде на другой дистрибутив вообще (я уже не помню) выяснилось, что sulci не собирается. Проковырявшись приличное время ( а на тот момент я ещё не был прожжёным линуксоидом), я таки заставил работать этого бота снова.

Это было одно из тех разочарований, которые крепко запоминаются. То есть, если бы бот был написан на чём-то универсальном, например, на плюсах (уж коли речь идёт за компилируемые языки), то с помощью сообщества и такой-то матери, кое-как но можно было бы заставить его работать, но ocaml как язык вначале немного ушёл вперёд, а потом и вовсе оказался на свалке истории. Через некоторое время туда же отправился и бот sulci.

Чуть позже была найдена альтернатива. То да не то - у "нового" бота не было бредогенератора - он умел отвечать стандартными фразами. Что конечно сильно печалило. Это была Isida. Сейчас развивается уже 6-я инкарнация этого бота и уже для телеграма, но тогда это была вариация на тему xmpp/jabber. Это более удачный вариант, т.к. он написан на питоне, а питон всё-таки (даже в те времена) популярный яп. Кроме отсутствия бредогенератора, какой ещё подвох? Вероятно на тех версиях isida, которые были связаны с jabber-ом автор тренировался в программировании на python-е, соответственно, сам бот был известен тем, что применял непопулярные подходы и парадигмы в своей кодовой базе.

Через некоторое время возникли определённые проблемы и с этим ботом. И я на довольно продолжительное время даже подзабил на бота, потом ради интереса запускал dropegg-а с megahal-ом через bitlbee... Но эта конструкция была больше лютым костылём, чем нормальным чат-ботом.

И наконец, где-то около весны 2019-го года, или пораньше была придумана 3-я мажорная версия aleesa-бота, чуть позже в том же году была сделана и jabber-вариация бота. Это была уже независимая поделка на perl-е, вокруг ботовых фреймворков, которые реализуют бОльшую часть подкапотной механики. Но, увы, автор телеграммной либы на неё забил, пришлось её форкнуть и влить в бота и с каждым обновлением bot api апдейтить эту либу. Что же касается jabber-ной либы, то здесь история более туманная - либа хоть и есть, но её реализация мягко говоря далека от идеала.

3-я итерация бота существует и по сию пору, на гитхабе. Однако я уже готовлю 4-ю итерацию.

Собственно, не все вещи удобно делать только не perl-е. Что-то удобнее делать на других ЯП. Да и эффективность перла не во всех аспектах высокая. Например, меня устраивает производительность в большинстве случаев, но не всегда устраивают аппетиты по памяти. На гошке многие вещи будут работать эффективнее и по процессору и по памяти. В этой связи я решил разнести разные функции бота по разным модулям. Собственно, была ещё мысль сделать транслятор из джаббера в телеграм и в irc на фриноду/либеру. Все три бота используют общие элементы, общие плагины. Есть конечно и некоторые протокол-специфичные вещи. Собственно в процессе размышлений и родилась мысль, что было бы неплохо сделать протокол-специфичные "фронтэнды" и сервисы, которые реализуют функциональность ботов - тот же бредогенератор, игры, картинки итд. Многосервисная архитектура. Идея в том, что у нас есть redis с его pubsub-ом, есть некий роутер, который раскидывает по сервисам различные команды от фронт-энда и собственно сервисы, которые пишут через этот самый redis обратно во frontend. По идее всё должно получиться удовлетворительно по скорости и неплохо по модульности. А в последствии можно будет переписать части бота на что-то отличное от perl-а и тем самым повысить эффективность системы. И заодно хотябы местами перейти на более либеральные лицензии, чем perl license, под которой я собственно распространяю свои perl-овые поделия.

Сейчас "в проде" работает полураскуроченный вариант 3-ей вариации телеграм-бота, из которого вынесены в отдельные сервисы почти все плагины. Де-факто остались только плагин admin и игры, причём для последних демоночек уже крутится, надо только приспособить "фронтэнд", чтобы он ходил в этот демоночек. Ну и там понадобятся некоторые доработочки по основной логике самого сервиса с игрушками.

Next Post