Der sahnee-bot. Entstanden aus einer früheren Idee von @PatrickSachs und @JakobHeubl.
Die Funktion dieses Bot ist leicht zu beschreiben: Command eingeben und eine Person bekommt eine Verwarnung. Die Logik dahinter hat sich im Gegensatz zur Version 1 komplett geändert.

Discord- Wo ist der Unterschied zwischen Version 1 und dem finalen Release des sahnee-bot?

  • .NET Core 3.1 Framework statt Javascript und Node.js
  • Verwendung einer Datenbank (liteDB) für die Rollen und Nachrichten
  • Hosting auf einem Server mit Gigabit Anbindung und SSDs als Speicherplatz für die Datenbank
  • Aufgaben, welche in regelmäßigen Abständen ausgeführt werden können
  • Verwarnungs-Warteschlangen pro Discord Server

So funktioniert der neue Bot:

Um keine eigene Implementation der Discord API schreiben zu müssen, haben wir uns für die Discord.NET API entschieden.

 1. Die Befehle

Es gibt eine Liste an Befehlen, die, sofern der von uns gehostete Bot verwendet wird, in den Channel „bot-commands“ geschrieben werden müssen. Die Befehle sind Englisch gehalten, da mit dem Bot ein internationales Publikum erreicht werden soll.

  • /warn @UserName "Your reason here!" – Issues a warning to the given user. The user will also be notified personally about their most evil transgression.
  • /unwarn @UserName "Your reason here!" – Revokes a warning from the given user. The user will also be notified personally.
  • /unwarn @UserName – Revokes a warning from the given user. This allows for not giving a reason why the user has been unwarned. The user will also be notified personally.
  • /warnall "Your reason here!" – Issues a warning to all users and bots on your server.
  • /warnhistory @UserName – Shows the warning history for the given user. The default amount is 10. It can be changes via the configuration file
  • /warnhistory @UserName <Amount> – Does the same as the default command but shows a custom amount of historical entries.
  • /warnleaderboard – Prints a leaderboard of the top warned people on your guild. The default amount can be set in your configuration.
  • /warnleaderboard <Amount> – Does the same as above but prints out a custom amount of people.Information: Bots can be warned but will never receive any message of their warning like users would.
2. Die Warteschlange

Nun fiel uns während des Entwickelns auf, dass sofern Benutzer 1 eine Verwarnung von Benutzer 2 und Benutzer 3 gleichzeitig bekommt und im worst-case von Benutzer 4 eine Entwarnung erhält, wird diese Befehlskette nicht der Reihe nach abgearbeitet. Daher haben wir eine Warteschlange für Befehle pro Discord Server erstellt, um genau dieses Problem zu vermeiden.

3. Datenbank und Aufgaben

Die Handhabung der Rollen Verteilung/vergabe war in der ersten Version des Bots unsauber gelöst. Die Rollen wurden auf dem Discord Server erstellt und dabei wurde es dann auch belassen. Da Discord leider ein Limit hat, für Rollen pro Server sind wir hier auch schon an eine Grenze gestoßen während der Bot auf unserem Discord Server aktiv war.
Daher haben wir uns dafür entschieden, dass wir die Verwarnungen nun auch in einer Datenbank speichern. Somit kann der Bot weiterhin funktionieren, auch wenn die entsprechende Rolle aus versehen auf dem Server gelöscht wurde.

Die Aufgaben ergänzen die Thematik mit dem Rollen-Limit pro Discord Server.
In Release 1.0 gibt es eine Aufgabe, die sich um diese Problematik kümmer.
Sofern der von Sahnee gehostete Bot verwendet wird, werden alle 24 Stunden nicht benötigte Verwarnungsrollen vom Discord Server gelöscht. Somit sind nur benötigte Rollen auf dem Discord Server aktiv. Gleichzeitig hat man damit auch wieder mehr überblick über alle Rollen.

4. Weitere Informationen

Wer schon ganz neugierig geworden ist, kann sich auf der Sahnee Website gerne die Dokumentation des Bots durchlesen und den Bot auch gerne auf seinen eigenen Discord Server einladen. Sahnee.dev

5. Zukunft

Der Bot wird stetig, aber in unregelmäßigen Abständen weiter Wachsen und verbessert werden. Einerseits wollen wir auf Feedback eingehen und andererseits eventuelle neue Features der Discord.NET API verwenden, sofern diese für den Bot sinn machen.