Intro

In the wake of the covid-19 pandemic, traditionally brick and mortar clubs, organizations, and events, have found themselves scrambling to transition their communities to digital platforms. Many of them, RUHacks included, have turned to discord - a platform designed to manage, and facilitate communities from the smallest clubs to events of hundreds or thousands. As leaders restructure around these online platforms, new digital dilemmas present themselves: how do we manage our communities, ensure discussions serve and engage our members interests, and how do we demonstrate to industry partners that joint events are fruitful?

Topic channels are a common solution, providing spaces for people to discuss specific interests, in a place where they’ll be sure others share in their passion. However, from running our own servers for our student communities, as well as the CCubed server - a Canadian CS community - we’ve seen how often discussions can be derailed, continuing on in unrelated locations, and displacing passionate people.

Additionally, our industry partners have been struggling to identify new ways to evaluate and quantify the value a partnered event brings to their company in the new online world. How can we measure if a community is engaged, and enjoying an event when we can’t see their faces, feel the energy of the crowd?

Chaterest was born, as a solution to these problems. It is, at heart, a tool to improve engagement in our online communities, and provide meaningful feedback to our sponsors and partners so they can be certain of the value our communities bring.

Problem 1

The “telephone effect” As with any discussion, discord chats branch and flow into new topics. When this happens in specific interest channels, it can displace or discourage new members from engaging in passionate discussions. This lowers user engagement, and alienates portions of the community.

Solution 1

Chaterest solves this problem by understanding the topic that users are talking about in a channel, and if the topic does not match the current channel and another channel exists in the server for that topic, then it gently redirects users to continue the conversation in there.

Problem 2

Users new to Discord may be overwhelmed by the amount of channels and interests, unsure how to use role-reacts (a tool for self-assigning roles related to topics and their respective channels), and feel unable to jump into existing conversations.

Solution 2

Chaterest automatically interprets the topics a user frequently talks about and assigns roles to that user related to those topics. For example, a user who starts chatting about music will, after expressing enough interest, be automatically assigned a “music-lover” role by Chaterest.

Problem 3

Without feeling the energy of a room full of passionate hackers, without seeing their determination on their faces, without hearing the diligence with which they speak, it’s difficult to gauge how participants in an event feel. We can’t hear their frustrations or joy, we can only attempt to read a sea of message.

Solution 3

Cue Chaterst! Chaterest automatically assesses the emotions people feel by analyzing their messages throughout the duration of an event. Understanding when they feel frustrated or joyous. This allows our communities to provide a quantified overall feeling to partners, informing them how their participants felt, without going through the hassle of feedback forms that rarely get filled out anyway.

How we built it

Overall

  • Node.js backend
  • Discord + Google NL API
  • Hosted via Google Cloud Platform

Google Cloud Platform

Natural Language API

  • We use the NL Classification API to evaluate the context of each user’s message. We determine the category that the user’s message falls into, and map it to a text channel to recommend to the user.
  • We use the NL Sentiment API to evaluate user messages for their positive or negative sentiment, and the emotion in their statement. We use these metrics to determine if someone has positive interest in a category, so we can store their sentiment and act on it.

Firebase

  • Stores discord users and their sentiment for any category we’ve deemed them interested in

Google Cloud Build

  • When we push changes to the main branch, it triggers a build process that creates a docker image of the app
  • It then pushes the image to the Google Cloud Repository, and finally deploys it to Google Cloud run

Google Cloud Run

  • Runs the latest build, handles logging
  • All API tokens are handled via Environment Variables and IAM Service accounts

Discord

Utilized nearly all the available API endpoints for managing, users, channels, and messaging Utilized websockets to allow us to integrate Discord’s newest feature, slash-commands. Which is not officially supported by ANY of Discord’s language API’s

Accomplishments that we're proud of

  • We have fully complete functionality! All the commands were tested and are robust, and the background processes like sentiment analysis work perfectly!
  • We fully implemented continuous integration and deployments! Every push containerizes the application for production, securely providing all sensitive tokens and data from outside the container
  • We were really happy to make full use of slash commands. We haven't seen them implemented on any server we've been on in the past, so it was exciting to get them working.

What's next for Chaterest

We can augment this bot to collect way better data. We would love to further flesh out the event sentiment tracking.

Share this project:

Updates