A friendly help desk bot for Discord
The job of support staff members of Discord (bot) servers is an annoying task. Rarely are well-qualified users willing to do this frustrating, repetitive and more often than not ungrateful chore for longer than a short time.
Luckily, many of the bad parts can be automated with little effort, leading to a faster and higher quality support experience for end users.
By means of automation, Baymax aims to alleviate the following problem areas from a supporter's point of view:
- Answering the same questions again and again
- Dealing with users who don't state their questions / bug reports / suggestions until someone talks to them
- Dealing with users who are unwilling to read the existing FAQ
- Dealing with users who demand immediate attention by pinging random staff members
- Random spam in a support channel that is read by humans, unnecessarily demanding their attention
And from a users point of view:
- Receiving immediate help & support for most issues instead of waiting for other humans to show up
- All the information in one place, instead of having to look though FAQs and guides
Baymax uses a simple, yaml based model to define a help desk model as a cycle of nodes and branches, and binds each model to one or many discord channels.
A sane model has the following properties:
- There is a node with the
root
id - All branches are targetting existing nodes
- Each defined node can be reached from the
root
node
A node may optionally have a role id. Baymax will assign that role id to the user who reaches that node, and remove it again after 3 hours.
A basic example:
aki.yaml
---
id: root
title: "How may I help you?"
branches:
- message: "I need help with the Aki Bot"
targetId: bot-root
- message: "I need help with the Aki Server"
targetId: server-root
---
id: bot-root
title: "You need help with the Aki Bot. What's wrong?"
branches:
- message: "Something is broken"
targetId: bot-broken
- message: "I want to change a setting."
targetId: bot-setting
- message: "I have a suggestion."
targetId: bot-suggestion
- message: "None of the above."
targetId: support-role
---
id: server-root
title: "Please DM one of our Moderators."
---
id: bot-broken
title: "Aki never breaks."
---
id: bot-setting
title: "What setting of the Aki bot do you want to change?"
branches:
- message: "The language"
targetId: bot-setting-language
- message: "Turn reactions on or off"
targetId: bot-setting-reactions
- message: "Restrict it to a single channel"
targetId: bot-setting-restrict
---
id: bot-setting-language
title: "Say `!aki lang` to start changing your preferred language."
---
id: bot-setting-reactions
title: "Say `!aki thonks disable / enable` to switch reaction on or off."
---
id: bot-setting-restrict
title: "Use the Discord permissions to take away Akis write permissions for all the channels where it should not talk in."
---
id: bot-suggestion
title: "We don't take any suggestions currently."
---
id: support-role
title: "Explain your problem to one of our helpers in <#487925562300694531>."
roleId: 487925645989380108
And here is how it looks in chat:
-
JDA (Java Discord API):
-
Logback Classic:
-
Sentry Logback:
-
OkHttp:
-
SnakeYaml:
-
Caffeine:
-
emoji-java:
-
Guava:
-
SQLite JDBC Driver:
-
Flyway:
-
Spring Boot: