Comment by maattdd
1 year ago
I've been updating my HN bot (watch comments for keywords and post to Slack/Discord) written in Crystal to use raw SQL instead of unmaintained ORM.
Turns out the whole app needs only ~ 10 SQL requests, and it's way funier to write modern SQL than fighting the ORM.
The new code looks like this :
db_message = Model.save_new_message!(@conf.db, DbButler::Hn, item, DbState::Processing)
Than I have a Model module with all the interactions with the DB
def self.save_new_message!(db, butler, external_id, state) : Message
sql = {{ read_file "./db/save_new_message.sql" }}
db.query_one(sql, butler.to_s.downcase, external_id, state.to_s.downcase, as: Message)
end
(thanks to Crystal ability to read a file at compile time - I can write raw SQL in a file with syntax highlithing and maybe typesafe if I connect the DB to the editor)
The land page is not ready, but the bot has been working for me for months https://newsbutler.xyz/
Hmm any plans on integrating it with Discord instead of Slack? Also, aware of https://f5bot.com/?
It is working with both Slack and Discord already.
I was not aware of f5bot, but I got inspired by another bot called Little Birdie which doesn't exist anymore and it's basically just a re-implementation of it.