Bots entwickeln
So baust du einen Bot, der Nachrichten empfängt und antwortet.
Überblick
Empfohlen: Application mit Bot-Token (wie Discord). Alternativ: dediziertes Nutzerkonto per JWT. Für reines Senden reicht ein Webhook.
Schritt-für-Schritt (Bot-Token)
- Application anlegen und Bot-User erstellen
- Bot-Token generieren und sicher speichern
- Bot auf deinen Server einladen und Rolle mit SEND_MESSAGES zuweisen
- Socket mit Bot-Token verbinden (auth: { authType: "bot", token })
- Auf interaction_create warten (Slash-Commands) oder join_server/join_channel für Nachrichten
- Antwort per POST /interactions/{token}/callback oder send_message
Slash-Commands (ohne Dashboard)
Commands kannst du jederzeit per REST setzen — das Dashboard ist optional.
PUT Global
PUT /applications/{applicationId}/commands
Authorization: Bot <token>
{
"commands": [
{
"name": "ping",
"description": "Antwortet mit pong",
"options": [
{
"name": "user",
"type": "USER",
"description": "Optionaler Nutzer",
"required": false
}
]
}
]
}Global (alle Server, nach Bot-Einladung sichtbar)
PUT Guild
PUT /applications/{applicationId}/guilds/{serverId}/commands
Authorization: Bot <token>
{ "commands": [ { "name": "serverinfo", "description": "Server-Infos" } ] }Guild (nur ein Server)
Command-Optionen
Jede Option hat name, type (USER | STRING | INTEGER), description und required (true/false). Optionale USER-Parameter dürfen leer bleiben.
USER— Nutzer-ID (Mention oder Name)STRING— FreitextINTEGER— Ganzzahl (z. B. Minuten bei /timeout)
Gateway: interaction_create
Wenn ein Nutzer einen Bot-Command ausführt, erhält dein Bot ein interaction_create-Event mit token, commandName und options. Antworte innerhalb von 15 Minuten per Callback.
Socket.IO
const socket = io("https://api.voxery.xyz", {
auth: { authType: "bot", token: process.env.BOT_TOKEN },
});
socket.on("interaction_create", async (ix) => {
await fetch(`https://api.voxery.xyz/interactions/${ix.token}/callback`, {
method: "POST",
headers: {
Authorization: `Bot ${process.env.BOT_TOKEN}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
type: "CHANNEL_MESSAGE",
content: "Pong!",
}),
});
});Antwort senden
Gateway
socket.emit("send_message", {
channelId: "...",
content: "How are you?",
});oder per REST:
Code
POST /channels/{channelId}/messages
Authorization: Bot <token>
{ "content": "How are you?" }Best Practices
- Eigene Nachrichten ignorieren (author.id !== botId)
- Bot-Token niemals im Client-Code einbetten
- Reconnect bei Socket-Disconnect
- Keine Endlosschleifen (nicht auf eigene Antworten reagieren)
Beispiel-Projekt
Vollständiger Node.js-Bot im Repository: examples/voxery-simple-bot