Authors

Inspiration

The purpose of this bot is to streamline office hour queues in Discord. Recently, schools nationwide and nationally have moved to online learning in response to the global pandemic of COVID-19. While there are an abundant amount of resources online, our recent experiences in office hours have been lacking. As a TA, using breakout rooms in Zoom can often be difficult to manage, and in the context of some classes there can be 50+ people seeking help and 7 TAs to help. How do we handle these students efficiently and personally? Many classes at UVA have moved to Discord - Software Development Methods, Algorithms, Human Computer Interaction, and Operating Systems to name a few. While Discord better accommodates larger group-based interactions, it can still be difficult to manage – the lack of a central means of organization leads to tedious scrolling through names and channels and confusing interactions between multiple TAs attempting to work with students in different channels at the same time. Using Queue Bot and its respective commands allows students and TAs in a Discord server to easily connect, resolving a lot of the overhead and logistical problems with having Office Hours online.

What it does

Queue Bot addresses these issues with a serverwide queue. Students can instantly queue up for help by entering _ ~queue _ in the main channel, and then customize their request as needed with a description. Once they are in the queue, students can remove themselves at any time by entering _ ~dequeue _ in the channel. To check the status of the queue, any user can enter _ ~display _ to receive a message from Queue Bot showing a list of all users currently on the queue and their respective positions. For ease of access, Queue Bot sends all new server members a help menu describing these commands.

How we built it

An efficient solution is best accompanied with an efficient implementation. Using node.js and the Discord API, we were able to create a bot that makes it easier for students to be quickly paired up with a TA. Queue Bot employs a hash map in order to improve all queue-based runtimes to near instantaneous, no matter how large or small the queue is. Queue bot operates at the same, quick efficiency in any server, whether it hosts office hours for a few students during the weekend, or for hundreds of students cramming right before an exam. Most importantly, Queue Bot is lightweight and easily distributable – the entire bot is 3 MB and is written in Javascript, meaning any server operator can easily download the program and run it.

Our accomplishments, what we learned, and future work

Considering the time and no prior experience with Javascript, creating Discord Bots, and hackathons, we did encounter pitfalls and limitations to our implementations. Provided more time, it would have been nice to have users in voice channels automagically move to the voice channel of the TA that dequeued them.  We would have liked to develop specialized permissions for TAs to remove other users from the queue should students forget to do so. Additionally, having it more customizable (i.e. more commands to streamline the process and giving permission for certain commands) was also a goal in mind. Regardless of the setbacks, these challenges are also what made the accomplishments so rewarding. This product was born solely from a very real problem - we went into this idea not knowing how to do anything we wanted to do, and we came out with something that actually works. We learned about javascript, node.js, and the Discord API. At every turn, we ran into a problem that we struggled with; to have something that works and could be used almost immediately in the classes we have on Discord is something we find rewarding, and something we can be proud of.

To add Queue Bot to your servers: https://discordapp.com/oauth2/authorize?client_id=693512396698026005&scope=bot&permissions=8

Note that it currently only runs as long as our computer is on.

Try It out

Hackathons

Technologies

discord.js, javascript, node.js

Devpost Software Identifier

256574