September 8, 2021

Новый бот

Ни для кого не секрет, что almarec.ru написан на Рельсах.

ВК- и Телеграм-боты у нас всю дорогу были отдельным «микросервисом» на Питоне. Они умели две простых вещи: посчитать баланс роялти и посчитать алмакоины. Но даже эти ерундовские операции при разработке превратились в Сикуэл-мучение.

В Рельсах вся работа с базой данных обернута в красивые руби-методы. Писать запросов на доисторических языках не нужно. Может быть, в Питоне тоже есть такие библиотеки, но тут рассказ в первую очередь про то, какой я дурак.

Бот подсасывал данные из рельсовой базы с помощью прямых запросов на Сикуэле. Постить в базу я не рисковал. Потому что Рельсы там много чего делают автоматически. Влезешь, порушишь тонкие связи, и пиздец. Поэтому ну его.

Так выглядит один запрос к базе в исходниках питоновского бота.

SELECT SUM(stats_production.stats_items.royalty_usd)
FROM stats_production.stats_items
INNER JOIN stats_production.pseudonyms
ON stats_production.stats_items.track_artists LIKE CONCAT('%', stats_production.pseudonyms.pseudonym, '%')
INNER JOIN stats_production.users
ON stats_production.pseudonyms.user_id = stats_production.users.id
WHERE stats_production.pseudonyms.pseudonym = %s AND stats_production.users.id = %s

И таких там 8 разных. Для двух элементарных кнопок.

Простые вещи превратились для меня в ад. Писать сложные не было никакого желания.

Ключевой момент — Телегу и ВК обслуживали одни и те же функции. Просто лонгполлы запускались из разных файлов.

Обертки Апи ВК для Руби нет. Точнее, есть одна. Последний коммит в 2018 году. Пробовать не хочу.

Зато для Руби и Рельс есть отличный гем Телеграм-бота. Без дополнительных демонов, на вебхуках и с простой конфигурацией.

Я раньше забивал на красивые гемы и топил за общие питоно-функции для обоих ботов. Чтобы поддерживать было легче.

Но в последнее время мои теплые отношения с ВК почти совсем сошли на нет. Взаимодействие с Апи у них организовано по-дебильному, бот просирает половину запросов. Если бот упал, запросы просто улетают вникуда. Ну и вот эти новые лайки, последняя капля.

Поэтому я все-таки схватил Руби-обертку и вдохновенно написал несколько сложных штук.

Чарт.

Кнопка вывода роялти.

Да, это не ссылка, просто нажал, и процесс пошел.

t.me/almarec_bot

Планирую написать еще больше сложных штук. Никакого страдания.

respond_with :message, text: "Прослушиваний: *#{number_with_delimiter(fin_hash.sum { |x| x[:count].to_i }, delimiter: ',')}* \nВыручка: *#{fin_hash.sum(0.0) { |x| x[:royalty_usd].to_f}.round(2) }* quot;, parse_mode: :Markdown

Развивать ВК-бота я не хочу. Работает и норм. Перестанет — плакать не буду.

А в Телеграм можно перевести вообще все фичи сайта. Потому что кто сегодня ходит на сайты. И потому что кто сегодня издает музыку через Телеграм-ботов.