Roymond.NET

All projects

Vinyl Bot

For my partner's birthday in 2025, I gave her a record player. It was something that we both said we wanted over the years and now that we were living together, it seemed like it was time for us to get one so we could start our collection together. After a couple days, the itch that we both have to keep things organized started to grow. This led to us making a Google Spreadsheet in which we kept track of the records that we had, the locations we bought them from, the records we wanted, as well as what records we were playing. Being a developer, I hate the idea of using Spreadsheets to track of important data when you can have a database. Motivated by this dislike, I started working on two projects. One of these two projects was this one, the Vinyl Bot.

What is it?

The Vinyl Bot is a Discord bot written in Typescript and interacts with a Supabase instance (currently). It has a lot of functionality that we want so that we can interact with the database in the chat that we use to manage our apartment.

What Commands?

There's a long list of commands that can be found on the Github Repo. But there are five big ones that we use quite regularly.

  • !want - This allows us to add a record to our wanted list. The full command is typically !want {spotify link} and the bot utilizes Spotify's REST API to get the names of the Artist and Album, the number of tracks, the album art, and stores it in our database.
  • !add - This allows us to add a record directly to our collection. Similar to the !want command, the full syntax is !add {spotify link}. It also utilizes Spotify's REST API to go get the relevant data. It's not the complete set of data that we need on the website, but it's enough to get us started.
  • !play - This allows us to log a play, which is purely for stats and giggles.
  • !have - This allows us to quickly see what records we currently have.
  • !exists - This takes a Spotify Link or an Artist/Album combo and then submits it to Discogs to see if the album exists on Vinyl. This command is a bit newer so I'm still working through things.

Now all of this functionally is on the website (NeedleDrop), but if we're talking on discord, it's usually easier to fire off a message.

Important considerations

There were some big considerations involving this bot. The first was the decision to use keyword commands rather than Slash commands. Largely, I just grew up with chatbots that responded to the !{keyword} schema and nostalgia got me. The other thing that was important to consider were the dependencies. Currently we're using supabase, Spotify's REST API and Discog's REST API as external dependencies (outside of Discord). Luckily this is designed in a way that I should be able to shift those to other tools should the need arise.