As a team, we are a big believer in education. We understand how important teachers are to us, and as such, we wanted to make life easier for them. To best do this, we thought that we could create a management system for a virtual classroom. This will allow teachers to focus on the content of their class, and thus create a better educational experience for all. Discord has the viability to be a great online learning platform, provided with the right tools. We sought to provide those tools.
What it does
When T.A joins a discord server, it creates the following roles and channels:
- roles: Teacher, T.A, Student
- channels: announcements, reminders, homework, discussion, teachers-lounge,
T.A has commands that can be utilized by both teachers, and students. The commands are used with the >> prefix. Here are some of them:
Initializes the server, and creates the aforementioned roles.
Mutes everyone in the teacher's voice channel, except for the teacher.
Unmutes everyone in the teacher's voice channel.
Lists all the members of the server. You can also specify members from specific roles.
Asks students to type "here" in a specified amount of time. If students fail to attend, T.A will ping them.
Creates reminders that will remind the user/server of something
Removes a reminder
Displays all the active reminders
Creates an assignment, with a name and due date.
Shows all the non-submitted assignments for that student
Makes a submission for an assignment. Users will get a Direct Message from the bot, where they can submit their assignment files. Later the teacher can retrieve a condensed .zip of all submissions.
Gets all the submissions for a specified assignment.
Creates groups out of students, and assigns them to certain text channels. Can remove groups, and list them.
Can add/remove words to the filter. T.A will remove any messages that are part of the filter. T.A will send the deleted message to the teachers-lounge channel along with a timestamp, and username.
How we built it
The main component of our project is the discord bot, so we first had to create an application on the Discord Developer Portal. On that application, we added a bot (T.A). We decided to program this bot in python, as it was a language we were all familiar with. We also considered using two frameworks Django and Express.js but since we are all more familiar with python we chose to use Django. As for the front end framework we decided to use Angular and preconfigured HTML and CSS template as with our limited experience here we could focus on more important details. We chose to use a REST framework with Django, creating endpoints allowing both the webpage and discord bot to receive data. As for our database, we chose MongoDB as they are a sponsor for the event. The database was hosted on MongoDB Atlas, while the Django backend, Discord bot, and website were hosted on Google Cloud.
Challenges we ran into
While it is fairly easy and intuitive to type the commands for T.A, we thought we could improve the ease of use by creating a GUI. Implementing the commands was not a huge problem as understanding the API did not take very long and creating the commands was a process of trial and error. On the other hand, making this GUI is where most of our issues came from, mostly because as a team this is where our collective knowledge was the lowest. As we were all relatively new to the Angular framework, understanding many of the concepts took quite a while and slowed quite a bit. The use of the template also slowed us down and the organization of the template was quite difficult for us to understand, as well as getting the framework to correctly post was the bane of our existence. Eventually, we completely switched frameworks from Angular to Angular.js which was much easier for us to implement. On the backend, our most difficult task was to connect our Django framework to MongoDB, since they don't tend to be used together, but we were able to resolve those issues with some patience, persistence, and most importantly Stack Overflow. We wanted to use the speech to text feature of Google Cloud, to further enhance the user experience but sadly the Discord.py library did not have the tools necessary to listen to audio.
Accomplishments that we are proud of
We are very proud of the creation of this bot. Seeing the bot following our commands, and actually help to manage our server, was astounding. Every command of this bot contributes to creating a safe and enjoyable learning environment. Some examples would be:
- filter, which keeps the servers clean and discourages those who would disrupt the class.
- reminders, which informs students about due dates and lectures.
- group, which splits students into groups and is useful for class discussions.
I could continue on with the rest of the commands, but I believe you get the point.
What we learned
As we are fairly new to the web development area, we learnt a lot of new things from our use (or misuse, haha) of web application frameworks (Ex. Angular). This hackathon has gotten us interested in this area, and we plan on doing some self-studying related to web development.
We also learned about the process of creating discord bots, and how creative we can get with the commands we can make. While the barrier of entry is rather low, the skill ceiling is very high. We got very inspired by other bots created by members of the Discord community. This is also something we plan on self-studying, as we found it very interesting.
Also, frontend development is much more difficult than we first thought, and HTTP requests can be a pain in the butt.
What's next for Teaching Assistant
General improvement to the GUI is something we need for sure. We would like to create documentation for the T.A. The documentation can explain what each of the commands does, and provide examples in implementing them. As for new features, our favourite one to implement would be a speech-to-text interpreter. This feature follows the concept of universal design. While it is obviously useful to those who have hearing impairments, it is also useful for people who don't have working speakers or those who miss important calls and would like to read up on it later. This is a top priority feature for us to implement, as we believe it makes a massive difference.
Links: Django API : https://djangobackend-276109.df.r.appspot.com/ GUI for Discord Bot : https://discordapi-277419.ue.r.appspot.com/html/#!/home Invite the bot: https://discord.com/api/oauth2/authorize?client_id=711003085694304326&permissions=8&scope=bot Github Repo: https://github.com/ThaniSangarapillai/Classroom/