Bots
Eigene Helfer für deinen Server: Sie reagieren auf Befehle und Nachrichten.
Entwickler
Die vollständige Dokumentation für alle, die eigene Helfer bauen wollen: Webhooks, Bots, Gateway, Slash-Befehle und das Node.js-SDK.
Eigene Helfer für deinen Server: Sie reagieren auf Befehle und Nachrichten.
Lass andere Dienste Nachrichten in deine Kanäle schicken.
Im Chat tippst du „/“ und löst schnell etwas aus.
In den Beispielen steht <deine-lobus-adresse> für die Adresse deiner Lobus-Instanz. Ersetze es durch deine echte Adresse.
Lobus bietet zwei Wege, Dinge zu automatisieren. Es gibt außerdem ein kleines Bot-SDK für Node.js.
| Weg | Wofür | Anmeldung |
|---|---|---|
| Webhooks | Einfach Nachrichten in einen Kanal schicken (Build-Status, Alarme, Feeds) | Geheime URL, kein Konto nötig |
| Bots | Auf Nachrichten reagieren, Slash-Befehle anbieten, moderieren | Bot-Token (lobus_bot_…) |
https://<deine-lobus-adresse>/api/v1/hooks/<webhook-id>/<geheimer-teil>. Behandle sie wie ein Passwort.curl -X POST "https://<deine-lobus-adresse>/api/v1/hooks/<webhook-id>/<geheimer-teil>" \
-H "content-type: application/json" \
-d '{"content":"Build #42 ist durch ✅"}'
Antwort bei Erfolg: 204 No Content.
content (Text, bis 4000 Zeichen) und optional embeds (bis 10 Stück).429 mit Wartezeit).Embeds enthalten nur Text und sind für Bots und Webhooks erlaubt. Keine Bilder oder Links von außen.
{
"content": "",
"embeds": [
{
"title": "Deployment",
"description": "Version 1.4.2 ist live.",
"color": "#7c5cff",
"fields": [
{ "name": "Dauer", "value": "42 s", "inline": true },
{ "name": "Branch", "value": "main", "inline": true }
],
"footer": "CI"
}
]
}
Grenzen: höchstens 3 Embeds je Bot-Nachricht, Titel 256 Zeichen, Beschreibung 2000, bis zu 10 Felder, Fußzeile 128, insgesamt 4000 Zeichen.
lobus_bot_…) wird nur einmal angezeigt. Der Server speichert nur einen SHA-256-Hash. Bei Verlust: „Token neu“.Bots sind normale Mitglieder mit einer verwalteten Rolle. Sie sehen nur Kanäle, die ihre Rolle erlaubt, und werden wie Nutzer berechtigt und ratenbegrenzt. Token zurücksetzen, löschen und einsetzen steht im Protokoll.
Jede Anfrage trägt den Header Authorization: Bot <token>.
Bots dürfen: Server lesen, Kanalnachrichten lesen, senden, bearbeiten und löschen, Reaktionen, Dateien, ein Gateway-Ticket holen, Mitglieder entfernen, sperren und mit Timeout belegen, Rollen vergeben und eigene Slash-Befehle melden. Alles andere (Freunde, Direktnachrichten, Profil, Dev-Portal, Server-Verwaltung) ist Menschen vorbehalten.
POST /api/v1/channels/:channelId/messages
{ "content": "…", "embeds": [ … ] }
POST /api/v1/gateway/ticket (gültig 30 Sekunden, einmal verwendbar).wss://<deine-lobus-adresse>/gateway?ticket=<ticket>.{ "t": "<Typ>", "d": { … } }. Wichtige Typen: ready, message.create, message.update, message.delete, interaction.create, presence.update.POST /api/v1/gateway/ticket
wss://<deine-lobus-adresse>/gateway?ticket=<ticket>
{ "t": "message.create", "d": { … } }
Das SDK kümmert sich um Ticket, Verbindung und automatisches Neuverbinden mit Wartezeit.
PUT /api/v1/bot/commands (ersetzt alle bisherigen, höchstens 50). Namen: a-z, 0-9, _, -. Optionen haben den Typ string, integer oder boolean./ und sehen Vorschläge, dann /befehl wert ….interaction.create mit einem einmaligen token.POST /api/v1/interactions/:id/:token/callback mit { "content": "…", "embeds": [ … ] }. Gültig 15 Minuten, höchstens 5 Antworten. Dafür ist kein Bot-Header nötig, nur das Token aus dem Ereignis.[
{
"name": "wuerfeln",
"description": "Würfelt eine Zahl",
"options": [
{ "name": "seiten", "description": "Anzahl Seiten", "type": "integer", "required": true }
]
}
]
POST /api/v1/interactions/:id/:token/callback
{ "content": "…", "embeds": [ … ] }
Ohne Abhängigkeiten, Node 22 oder neuer (eingebautes fetch und WebSocket). Das SDK liegt im Lobus-Projekt unter packages/bot-sdk. Eine Veröffentlichung als Paket gibt es noch nicht.
import { Bot } from './packages/bot-sdk/src/index.ts';
const bot = new Bot({
baseUrl: process.env.LOBUS_URL ?? '',
token: process.env.LOBUS_BOT_TOKEN ?? '',
});
bot.on('ready', async () => {
await bot.rest.setCommands([
{
name: 'wuerfeln',
description: 'Würfelt eine Zahl',
options: [{ name: 'seiten', description: 'Anzahl Seiten', type: 'integer', required: true }],
},
]);
});
bot.on('interaction.create', async (i) => {
if (i.command !== 'wuerfeln') return;
const seiten = Math.min(Math.max(Number(i.options.seiten) || 6, 2), 1000);
const wurf = 1 + Math.floor(Math.random() * seiten);
await bot.rest.respond(i, '', [
{ title: 'Wurf', description: `${i.user.displayName} würfelt eine ${wurf} (W${seiten})`, color: '#7c5cff' },
]);
});
await bot.start();
Start:
LOBUS_URL=https://<deine-lobus-adresse> LOBUS_BOT_TOKEN=lobus_bot_… node bot.ts
Das SDK sendet das Token nur an die angegebene Adresse, hält es nur im Speicher und fängt Fehler einzelner Handler ab, ohne den Bot zu beenden.
Fehler kommen als JSON { "error": "<code>" } mit passendem HTTP-Status:
| Status | Bedeutung |
|---|---|
400 | ungültige Eingabe |
401 | nicht angemeldet |
403 | kein Recht |
404 | nicht gefunden (auch wenn du es nicht sehen darfst) |
409 | Konflikt (z. B. Webhook-Limit) |
429 | zu viele Anfragen |