April Fools' 2022 - Discord Games Bot (N.O.B.)

A screenshot of the RASA Studios Discord server. The bot user "N.O.B." has sent a series of messages starting at noon on the 1st of April 2022. The messages read "Good afternoon, contestants! Welcome to the Noxsquad Gameshow! My name is Noxsquad Organiser Bot, or N.O.B. for short, and I will be overseeing your journey through the Factory this week. You will now be scanned into the database. Please join a team using the /team commands. The Decision Dome will start in 30 minutes."

At RASA Studios, we like to make a video each year for April Fools’ day. Generally, these take the form of update videos for us and our projects. This year we had an additional twist: we created a Discord bot to allow people to play small versions of some of the games in the Noxsquad Gameshow (inspired by Discord’s Snowball Bot from Winter 2021).

The original idea for the bot was conceived by Profile photo for Stuart Stuart, with further input and ideas throughout from Profile photo for Chelsea Chelsea. Stuart and I started development on the bot, and a little later on, Profile photo for Quinn (Sword) Quinn (Sword) was brought on to help with the project’s infrastructure (hosting, continuous deployment) and bot development. Finally, Profile photo for David David and Profile photo for Benedict Benedict were brought in to help with writing the script for the event (see the video below) and to help write random responses for the bot.

A number of commands were available for people on the server to use.

  • Team management commands
    In order to be able to take part in games, a team (either blue or yellow) needed to be joined. This unlocked the ability to use all other commands (excluding the admin command).
  • Information commands
    When a game was running, the commands /rules and /episode were unlocked. These allowed players to learn the commands used to interact during the current game, and to watch the game that the current game was inspired by in our YouTube releases of the Noxsquad Gameshow, respectively. Additionally, once the event started, the /scores command was unlocked, which allowed players to see both teams’ current scores.
  • Gameplay commands
    Each game registered its own commands for players to use. This allowed functionality to be tailored to the type of game that was being played and allowed players to more easily understand what action the command they were running would take. This also allowed commands to specify arguments, such as a target to perform an action against.

Each action performed by a player during a game (assuming the command was valid, such as a target being both on a team and on the opposing team) would result in a score value. At the end of a given game, all scores were summed and the team with the greater score won the game. This was then announced to the server, alongside the overall number of games won by each team so far, allowing people to see how their team was performing over the duration of the event.

The bot was written using Discord.js, which was my first real experience using the library - the Discord integration in Jamdroid uses a combination of incoming and outgoing webhooks to implement its functionality. Persistent storage was handled by MongoDB using the Mongoose library and its model abstraction, which differed from my university dissertation project where I was more directly communicating with Mongo itself.

Overall, this was a fun project to work on. Progress was initially slow, as a lot of utility functions and administration commands needed to be implemented first. However once these were in place, the development of the minigames themselves was quite quick and easy, mostly consisting of random outcomes and associated messages for the players.

Written by Profile photo for James Cordon James Cordon | First published:
Link to this page: https://mrjamesco.uk/projects/discord_games_bot_nob/