Eine der besten Möglichkeiten, eine Discord-Community lebendig zu halten, ist ein Discord-Bot, der die langweiligen Aufgaben automatisiert. Einen Discord-Bot zu bauen ist einfacher als gedacht: Mit Node.js und der discord.js-Bibliothek läuft dein erster Befehl in wenigen Minuten. In diesem Leitfaden bauen wir einen Bot von Grund auf und enden, wie mein eigener Runa2 Bot, mit einem echten Befehl, der mit einer Spieldatenbank spricht.
Voraussetzungen
- Node.js 18+ und npm.
- Erstelle eine Anwendung + einen Bot im Discord Developer Portal und hole dir den Token.
- Lade den Bot auf deinen Server ein (OAuth2 → Scopes:
bot,applications.commands). - Im Projekt:
npm install discord.js mysql2.
Dein erster Bot: ein funktionierendes /ping
Der Kern eines Bots ist ein Client. Die intents legen fest, welche Ereignisse der Bot empfängt:
// index.js
const { Client, GatewayIntentBits, Events } = require('discord.js');
const client = new Client({ intents: [GatewayIntentBits.Guilds] });
client.once(Events.ClientReady, (c) => {
console.log(`Giris yapildi: ${c.user.tag}`);
});
client.on(Events.InteractionCreate, async (interaction) => {
if (!interaction.isChatInputCommand()) return;
if (interaction.commandName === 'ping') {
await interaction.reply('Pong! 🏓');
}
});
client.login(process.env.TOKEN);
Schreibe den Token niemals fest in den Code; speichere ihn als TOKEN in einer .env-Datei.
Slash-Befehle registrieren
Moderne Bots nutzen Slash-Befehle (/ping). Befehle müssen über die REST API bei Discord registriert werden, bevor Nutzer sie aufrufen können:
// deploy-commands.js
const { REST, Routes, SlashCommandBuilder } = require('discord.js');
const commands = [
new SlashCommandBuilder().setName('ping').setDescription('Pong ile yanitlar'),
].map((c) => c.toJSON());
const rest = new REST().setToken(process.env.TOKEN);
await rest.put(
Routes.applicationGuildCommands(CLIENT_ID, GUILD_ID),
{ body: commands },
);
Tipp: Nutze in der Entwicklung applicationGuildCommands (ein Server) — das aktualisiert sofort. Globale Befehle brauchen bis zu einer Stunde zur Verbreitung.
Aus der Praxis: mit einer Spieldatenbank verbinden
Was Runa2 Bot besonders macht: Er kann die MySQL-Datenbank des Spiels lesen und über Befehle Daten schreiben. Mit mysql2 sieht ein Befehl, der das Level eines Spielers abfragt, so aus:
const mysql = require('mysql2/promise');
const db = await mysql.createConnection({
host: 'localhost', user: 'bot', password: '***', database: 'player',
});
// /seviye komutu icinde:
const [rows] = await db.execute(
'SELECT level FROM player WHERE name = ?', [name]
);
await interaction.reply(`${name} seviye ${rows[0].level}`);
Hinweis: Nutze immer Parameter (?) in Abfragen — Nutzereingaben direkt ins SQL zu setzen öffnet die Tür für SQL-Injection.
Den Bot rund um die Uhr betreiben
Schaltest du deinen Computer aus, stoppt der Bot. Damit er durchgehend läuft, starte ihn auf einem VPS mit einem Prozessmanager wie pm2: pm2 start index.js. pm2 startet den Bot bei einem Absturz automatisch neu und führt Logs.
Häufige Fragen
Node.js oder Python?
Beide funktionieren großartig. Node.js (discord.js) ist sehr angenehm für Echtzeit- und ereignisgesteuerte Aufgaben; Python (discord.py) liest sich sauber für daten-/automatisierungslastige Aufgaben. Ich nutze beide.
Was, wenn der Bot-Token geleakt wird?
Wer den Token hat, kann deinen Bot steuern. Bei einem Leak generiere ihn sofort neu im Developer Portal und lege ihn nie in Code oder auf GitHub ab.
Kann ich den Bot kostenlos hosten?
Für kleine Bots gibt es kostenlose Tarife, aber für einen ernsthaften Bot, der sich mit einer Spieldatenbank verbindet, ist ein kleiner VPS die sicherste Wahl.
Willst du einen maßgeschneiderten Bot für deine Community? Ich baue Bots, die sich mit Spieldatenbanken verbinden, moderieren oder Events verwalten — kontaktiere mich.