Stoat API

Die Stoat API ist ein pre-built Docker Image und kann nicht direkt modifiziert werden.
Für Custom-Funktionen → eigene Microservices erstellen (wie Profile API).

API-Basis

Intern:   http://api:14702
Extern:   https://chat.dreylo.com/api

Authentifizierung

# Session Token Header
X-Session-Token: SESSION_TOKEN

Bot Token Header

X-Bot-Token: BOT_TOKEN

Wichtige Endpunkte

Users

GET  /users/@me                 → Eigenes Profil
PATCH /users/@me                → Profil aktualisieren
GET  /users/:id                 → User-Infos
GET  /users/:id/profile         → Profil-Daten (Bio, Banner)

Sessions

POST /auth/session/login        → Einloggen (Email + Password)
GET  /auth/session              → Aktive Sessions
DELETE /auth/session/:id        → Session löschen

Server

GET  /servers/:id               → Server-Infos
GET  /servers/:id/members       → Member-Liste
PATCH /servers/:id              → Server bearbeiten (Owner)

Channels

GET  /channels/:id              → Channel-Infos
GET  /channels/:id/messages     → Nachrichten
POST /channels/:id/messages     → Nachricht senden
DELETE /channels/:id/messages/:mid → Nachricht löschen

User-Profil aktualisieren (PATCH /users/@me)

const body = {};
// Felder nach Bedarf setzen:

// Anzeigename
body.display_name = "Neuer Name";

// Bio
body.profile = { content: "Meine Bio" };

// Felder entfernen (remove-Array):
body.remove = ["Avatar"]; // Avatar entfernen
body.remove = ["ProfileContent"]; // Bio entfernen
body.remove = ["ProfileBackground"]; // Banner entfernen
// ACHTUNG: Leeres remove-Array [] kann 500 verursachen!
// Besser: remove weglassen wenn nichts zu entfernen ist

// Korrekte Implementierung:
if (changes.remove?.length === 0) delete changes.remove;
await user.edit(changes);

DataEditUser TypeScript Interface

interface DataEditUser {
  display_name?: string;
  avatar?: string;           // Autumn-File-ID
  profile?: {
    content?: string;        // Bio Text
    background?: string;     // Autumn-File-ID
  };
  status?: {
    text?: string;
    presence?: "Online" | "Idle" | "Focus" | "Busy" | "Invisible";
  };
  remove?: FieldsUser[];     // Felder die entfernt werden sollen
}

type FieldsUser =
| "Avatar"
| "StatusText"
| "StatusPresence"
| "ProfileContent"
| "ProfileBackground"
| "DisplayName";

Curl-Beispiele

# Eigenes Profil abrufen
curl -H "X-Session-Token: TOKEN" https://chat.dreylo.com/api/users/@me

Profil aktualisieren

curl -X PATCH \ -H "X-Session-Token: TOKEN" \ -H "Content-Type: application/json" \ -d ""{"display_name": "Sylexo"}"" \ https://chat.dreylo.com/api/users/@me