Inspiration

We want to give users insight into how they are perceived by others in the chat community. This knowledge allows users to adjust their online behavior before relational problems arise. We created Reginald to ensure Slack communities remain fun, healthy, and functioning. It is our hope that Reginald aids in building better and stronger relationships in chat communities all over the world.

What it does

Reginald analyzes Slack chat history to provide users with an overview of how their in-chat behavior is perceived by other users. Metrics returned include participation, positivity, negativity, and conceit. The metrics are calculated using only the last 1000 posts in the current channel. This means a user's scores will be different in each channel and will dynamically change over time.

How we built it

  • Reginald is built using Node.js on AWS Lambda.
  • We designed Reginald with a microservices architecture in mind. There are six microservice Lambda functions in total - one for each metric (positivity, negativity, participation, conceit), one for the "gateway", and one to handle OAuth.
  • Lambda functions that need to be external are served using AWS API Gateway.
  • AWS DynamoDB is used for persistence.
  • The Serverless framework is used to automate the creation of AWS resources.
  • The Sentiment library aids in calculating metrics.

Challenges we ran into

  • We ran into issues with AWS Lambda's "cold" start time (Link for reference). Slack enforces a hard 3 second timeout for responses to slash commands. Reginald responds well within that timeout when the Lambda functions are "hot" (average time is ~700ms), but if the Lambda functions are "cold" the response could exceed the timeout. To overcome this issue we created a separate Lambda function whose purpose is to ping the main service functions to keep them "hot".

Accomplishments that we're proud of

We are proud of all of the functionality and performance we were able to achieve with Reginald v1.0.

What's next for Reginald

  • Reginald has been submitted and is currently under review to be added to the Slack App Directory
  • Dynamic responses using natural language processing
  • Different metric options
  • More accurate metric algorithms
Share this project:

Updates