Skip to main content

Was ist das?

Der Strawberry Communication Standard (Strawberry’s Kommunikationsstandard) (kurz stbm, Strawberry Communication Standard) ist ein Kommunikationstandard für unsere Projekte. Das heißt das alle unsere Projekte, die was mit Nachrichtenübertragungen oder ähnliches zu tun haben, dieses System nutzen. Aktuell haben wir 2 Hauptversionen des Strawberry Communication Standards. Um das alte System vom neuen System zu unterscheiden zu können, führen wir das Strawberry Communication System ein (kurz stbm). Dieses Kommunikationssystem bildet einen Standard für Strawberry Chat und möglicherweise für andere Projekte von Strawberry Foundations.

Versionen des Strawberry Communication Standards

Aktuell planen wir eine Umbennenung der kurzen Version vom Strawberry Communication Standard. Die aktuelle kurze Version ist stbm (Strawberry Communication Standard). Wir planen dies zu stbc umzubennenen um möglicherweise weniger Verwirrung zu verursachen

Strawberry Communication Standard v1

Version 1 (stbmv1/stbcv1) ist eine “Legacy” Version und erhält keine Updates mehr. Diese Version sendete pure Python-Strings über Sockets und der Client empfängt diese ohne vieles entschlüsseln der Daten. Die Daten werden jediglich nur entkodiert.

Für diese Version bieten wir keinen weiteren Support an. Die letzte Strawberry Chat Version (v1.8.3) mit diesem Kommunikationssystem erschien am 10. Dezember 2023. Dies war die letzte Legacy Version von Strawberry Chat und wird mit der Veröffentlichung von v1.10 oder v1.11 keinen weiteren Support erhalten.

Strawberry Communication Standard v2

Version 2 (stbmv2/stbcv2) ist eine neue, verbesserte Version unseres Kommunikationssystemes. Diese verwendet JSON, um Nachrichten über den Benutzern zu übertragen. Mit unserem neuen Kommunizierungsstandard können Nutzer nun ihre eigenen Message Builder erstellen und damit selber entscheiden wie eine Nachricht angezeigt sein soll, unabhängig davon wie der Server eigentlich die Nachrichten gesendet hätte.

Zusätzlich gibt es noch Version 2.1 (stbmv2.1) für Nachrichten-Proxying, diese Version ist aber aktuell nicht verfügbar.

Strawberry Communication Standard v3

Version 3 (stbcv3) wurde mit dem Rust-rewrite von Strawberry Chat veröffentlicht. Diese Version implementiert das senden von JSON-Daten auf beiden Seiten (Server & Client). Das bedeutet, dass der Client dann auch JSON senden muss. Aufgrund von aktuellen Performanceproblemen steht dies aber noch nicht fest und könnte daher sich noch ändern. Durch die Implementierung von JSON für den Client stehen viele neue Möglichkeiten offen. Dadurch kann der Client spezielle Daten am Server senden und dieser verarbeitet diese. So könnten Commands, die Client-spezifisch sind, am Server verarbeitet werden.Die Veröffentlichung fand am 19. April 2024 statt. Version 3 ist nicht rückwärtskompatibel.

Unterstützung

Unterstützte Featuresstbcv1stbcv2stbcv2.1stbcv3
Python Strings¹
pure String Transfer²
Kompatiblitätsmodus
JSON Server-to-Client³
JSON Client-to-Server⁴
Msgpack
Das Feature Python Strings¹ bedeutet so viel wie “Unterstützung für reine Python-Strings”. Dies sollte in jedem Fall immer “Ja”/”✅” sein, andersfalls können keine Strings verwendet werden.Die Interne Bezeichnung für Python Strings lautet ps_com oder feat@ps
Das Feature “pure String Transfer” wird für die erste Version des Strawberry Communication Standards verwendet. Dieses Feature verwendet reine Python Strings zum austausch von Daten und Events.Die Interne Bezeichnung für pure String Transfer lautet pST_com oder feat@pst
Das JSON Feature Server-to-Client ist die Weiterentwicklung von pure String Transfer und bietet nun eine kompakte Datenstruktur an, um einfach Daten und Events am Client zu senden. So können auch “leise” Events im Hintergrund passierenDie Interne Bezeichnung für JSON Server-to-Client lautet json_stc oder json@stc
Das JSON Feature Client-to-Server ist die Implementierung von JSON für den Server, sodass der Server nun JSON-Daten vom Client annimmt statt pure String Transfer² Daten. Die zweite Version des Strawberry Communication Standards verwendet von Client zum Server weiterhin pure String Transfer, während die dritte Version vermutlich JSON Client-to-Server verwendet.Die Interne Bezeichnung für JSON Client-to-Server lautet json_cts oder json@cts

Datentypen (stbcv2)

Ab stbcv2 verwenden wir neue und eigene JSON-Datentypen. Hier ist ein kleiner überblick von unseren Datentypen
Nutzernachrichten (user_message) sind Nachrichten die von einem Nutzer gesendet wurden. Der Datentyp beinhaltet wichtige Daten, wie z.B. der Nutzername, das Badge, die Rollenfarbe und am wichtigsten, die Nachricht des Nutzers. Die Struktur könnte sich mit stbcv3 ändern.
JSON
{
    "message_type": "user_message", 
    "username": "julian",
    "nickname": "Julian The Great",
    "badge": "👑",
    "role_color": "\u001b[31m\u001b[1m",
    "avatar_url": "https://example.com/some-avatar-url.png",
    "message": {
        "content": "Hello World!"
    }
}
Systemnachrichten (system_message) sind Nachrichten die vom System gesendet wurden. Dort handelt es sich meist um Nachrichten, dass ein neuer Nutzer beigetreten ist, allerdings können Systemnachrichten auch die eingebauten Slash-Commands sein. Dieser Datentyp ist ziemlich kompakt und sehr klein. Dies könnte sich aber eventuell mit stbcv3 ändern.
JSON
{
    "message_type": "system_message", 
    "message": {
        "content": "Hello from the system!"
    }
}
Benachrichtigungs-Backend (stbchat_notification) sind interne Nachrichtenevents die vom System gesendet wurden. Diese Nachricht siehst du nicht, aber führt im Hintergrund ein Prozess aus, nämlich der, um dir eine Desktop-Benachrichtigung zu senden. Dieser Datentyp ist etwas komplexer. Die Struktur dieses Datentypes könnte sich mit stbcv3 ändern.
JSON
{
    "message_type": "stbchat_notification",
    "title": "Strawberry Chat",
    "username": "Julian",
    "avatar_url": "https://example.com/some-avatar-url.png",
    "content": "Hello, Julian!",
    "bell": true
}
Chatdatenübertragungs-Backend (stbchat_backend) sind interne Nachrichtenevents die vom System gesendet wurden. Diese Nachricht siehst du nicht, aber führt im Hintergrund ein Prozess aus. Dieser Prozess kann unterschiedlich sein. Aktuell sendet stbchat_backend nur den Nutzernamen an den Client zurück. Der Client kann den Nutzernamen dann für verschiedene Dinge verwenden. Dieser Datentyp ist aufgrund seiner Neuheit sehr klein. Mit stbcv3 oder vielleicht sogar stbcv2 erhält dieser Datentyp allerdings noch mehr Features und damit eine höhere Bedeutung.
JSON
{
    "message_type": "stbchat_backend", 
    "user_meta": {
        "username": "Julian"
    }
}

Was? Wieso? Wie?

Du wunderst dich vielleicht und fragst dich was das überhaupt ist? Naja, dies ist wie 2 Socket Instanzen miteinander Kommunizieren. Dies wurde ursprünglich für Strawberry Chat entwickelt um Daten zwischen Server und Client, wie zum Beispiel Nutzername, Badge und Nachrichten zu senden, aber wir haben uns dazu entschieden, ein kleines Tutorial zu geben wie du dieses System auch in deinem Client implementieren kannst!
JSON-Kommunikation (JSON-Communication) ist auch ein anderer Name für unser Strawberry Communication Standard v2 (stbmv2). Hier kannst du mehr darüber erfahren

Die Idee

Das originale Konzept dafür wurde auf unserem Projekteboard auf GitHub GitHub am 10. November 2023 gepostet. Beachte das dies aktuell nur in Deutsch zur Verfügung steht.

Beispielcode

Dies ist ein sehr einfaches Beispiel für JSON-Kommunikation welches in Strawberry Chat verwendet wird
{
    "message_type": "user_message", // Typ der Nachricht, meist user_message
    "username": "julian", // Der Nutzername sollte komplett kleingeschrieben werden und ohne Leerzeichen
    "nickname": "Julian The Great", // Der Nickname kann jede Art von UTF-8 Zeichen sowie Leerzeichen beinhalten
    "badge": "👑", // Emoji
    "role_color": "\u001b[31m\u001b[1m", // Dieses verwendet ANSI Farben, das Beispiel hier zeigt ein Rot mit Bold
    "message": {
        "content": "Hello World!"
    }
}

Unterstützte Versionen in Strawberry Chat

Dies gilt nur für Strawberry Chat, kein anderes Programm
Siehe Tabelle
v1.8.0 - v1.8.2 v1.8.3 v1.9.0
Standard <=2.4.0
Standard v2.5.0
Standard >=v2.5.1✅ (CM)✅ (CM)✅ (CM)
Lite <=v1.0.1
Lite >=v1.1.0
Nano <=v1.0.1
Nano >=v1.1.0
Berryjuice-pico

Kompatiblitätsmodus (CM)

Seit Client v2.5.1 haben wir ein Feature hinzugefügt welches Nutzern erlaubt, sich mit alten Servern zu verbinden. Dies heißt Kompatiblitätsmodus. Um den Kompatiblitätsmodus zu aktivieren musst du entweder compatibility_mode: true zu deinem Legacy Servereintrag hinzufügen oder starte den Client mit dem --compatibility-mode Argument
I