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.

Application & Token erstellen · Webhooks

Schritt-für-Schritt (Bot-Token)

  1. Application anlegen und Bot-User erstellen
  2. Bot-Token generieren und sicher speichern
  3. Bot auf deinen Server einladen und Rolle mit SEND_MESSAGES zuweisen
  4. Socket mit Bot-Token verbinden (auth: { authType: "bot", token })
  5. Auf interaction_create warten (Slash-Commands) oder join_server/join_channel für Nachrichten
  6. 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 — Freitext
  • INTEGER — 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

Anleitung & Code

Voxery Developers