Новый бот
Ни для кого не секрет, что 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 году. Пробовать не хочу.
Зато для Руби и Рельс есть отличный гем Телеграм-бота. Без дополнительных демонов, на вебхуках и с простой конфигурацией.
Я раньше забивал на красивые гемы и топил за общие питоно-функции для обоих ботов. Чтобы поддерживать было легче.
Но в последнее время мои теплые отношения с ВК почти совсем сошли на нет. Взаимодействие с Апи у них организовано по-дебильному, бот просирает половину запросов. Если бот упал, запросы просто улетают вникуда. Ну и вот эти новые лайки, последняя капля.
Поэтому я все-таки схватил Руби-обертку и вдохновенно написал несколько сложных штук.
Планирую написать еще больше сложных штук. Никакого страдания.
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
Развивать ВК-бота я не хочу. Работает и норм. Перестанет — плакать не буду.
А в Телеграм можно перевести вообще все фичи сайта. Потому что кто сегодня ходит на сайты. И потому что кто сегодня издает музыку через Телеграм-ботов.