Suzune Dev Blog #1: Introduction

Suzune is a Discord bot I've been working for a year and only now I've started to document it. Progress has been going slowly, but there's a lot I want to do with it. Suzune comes from the name of a girl in Classroom of the Elite and the discord server that this bot is meant for is about series.  

This post will serve as an introductory post that I will build upon later.

The beginning

So we needed a bot. Why not use an existing one? We have actually did in the past. Before Suzune we used a bot called the "Reaction Role Bot" and this was a closed-source bot by a third party developer. We noticed, however, that this bot had a lot of downtime. It froze a lot, took too long to add or remove roles or was just outright down.

Now, we already have a couple of bots that facilitate many different things, but none of the existing bots featured a reaction role feature (at the start of the development of this bot).

Representation of the reaction roles in production.

From Javascript to Typescript

When I started making this bot I picked up one of my older bots and started coding in that, but I realised that the code was getting very cluttered. It used a lot of older Javascript features and I couldn't make use of the newer features without converting the whole codebase.

So, I started making this bot completely from scratch using Typescript and the result is a bot that is very modular and easily maintainable on the long term. Combine this with a stack on docker and all I had to do for an update was:

docker-compose pull
docker-compose down
docker-compose up -d

This was all backed by a self hosted GitLab and CI instance. The code gets pushed to GitLab, CI builds a docker image and then I do those commands on the node that runs the bot.

Features that got added over time

After having finished implementing the reaction roles, I started on the points system. The bot that managed that at the time had a role shop and a points system that users could use to buy coloured roles and exchange points between each other. It had many issues near the end of its lifespan, so I rewrote it into this bot. The original creator also passed the database on to me so I could migrate everyone's existing points over this bot.

There's more to come to this bot soon and we will also go in-depth about some of its features on a code level. So stay tuned!

Show Comments