Discord Willkommensnachricht-Bot selbst bauen (discord.js 14)
Ein Willkommens-Bot schreibt eine Nachricht, wenn jemand deinem Server beitritt, vergibt auf Wunsch eine Startrolle und verabschiedet Mitglieder, die gehen. Gehostete Bots erledigen das mit ein paar Klicks. Wenn du einen eigenen Bot mit eigenen Texten und Daten auf deinem eigenen Hosting willst, zeigt dir dieser Guide die nötigen Teile: Intent, Event, Vorlage, Auto-Rolle und die typischen Fehler.
Schritt 1: Server-Members-Intent einschalten
Beitritte und Austritte hängen an einem privilegierten Intent. GUILD_MEMBER_ADD schickt Discord nur, wenn dein Bot den Guild-Members-Intent nutzt.
- Im Discord Developer Portal deine App öffnen → Bot.
- Unter Privileged Gateway Intents den Server Members Intent einschalten.
- Denselben Intent im Code anfordern (Schritt 2). Passen Portal und Code nicht zusammen, scheitert der Login mit
[DisallowedIntents].
Ab 10.000 Nutzern verlangt Discord eine Prüfung der privilegierten Intents. Für einen Bot auf deinem eigenen Server spielt das keine Rolle.
Schritt 2: Auf neue Mitglieder reagieren
import { Client, Events, GatewayIntentBits } from "discord.js";
const client = new Client({
intents: [GatewayIntentBits.Guilds, GatewayIntentBits.GuildMembers],
});
const WELCOME_CHANNEL_ID = process.env.WELCOME_CHANNEL_ID!;
const VORLAGE = "Willkommen {user} auf {server}! Du bist Mitglied Nr. {count}. Starte in <#REGELN_KANAL_ID>.";
function render(vorlage: string, vars: Record<string, string>) {
return vorlage.replace(/\{(\w+)\}/g, (m, key) => vars[key] ?? m);
}
client.on(Events.GuildMemberAdd, async (member) => {
const channel = member.guild.channels.cache.get(WELCOME_CHANNEL_ID);
if (!channel?.isTextBased()) return;
await channel.send({
content: render(VORLAGE, {
user: `<@${member.id}>`,
server: member.guild.name,
count: String(member.guild.memberCount),
}),
allowedMentions: { users: [member.id] }, // nur das neue Mitglied pingen
});
});
client.login(process.env.DISCORD_TOKEN);allowedMentions verhindert, dass eine Vorlage versehentlich @everyone pingt. Läuft der Bot auf mehreren Servern, gehören Kanal-ID und Vorlage pro Server in eine Konfiguration oder Datenbank, nicht in den Code.
Schritt 3: Startrolle vergeben (Auto-Rolle)
const AUTO_ROLE_ID = process.env.AUTO_ROLE_ID!;
client.on(Events.GuildMemberAdd, async (member) => {
try {
await member.roles.add(AUTO_ROLE_ID, "Auto-Rolle beim Beitritt");
} catch (err) {
console.error("Auto-Rolle fehlgeschlagen", err); // meist die Rollen-Reihenfolge
}
});Der Bot braucht Rollen verwalten, und seine eigene Rolle muss über der Rolle stehen, die er vergibt.
Schritt 4: Abschiedsnachricht
Events.GuildMemberRemove feuert, wenn jemand den Server verlässt (gleicher Intent). Das Mitglied ist dann eventuell nur teilweise im Cache. Nutze deshalb ID und Nutzernamen, keine Rollen.
Schritt 5: Vorlagen, die funktionieren
- Kurz halten: eine Zeile, eine Erwähnung, ein Link zum Regelkanal.
- Auf Self-Rollen verweisen („Such dir in #rollen deine Spiele aus“), statt alle Kanäle aufzuzählen.
- Speichert dein Bot Daten (Level, Opt-outs), gehört ein kurzer Datenschutz-Satz oder ein
/privacy-Befehl dazu.
Häufige Probleme
- Beim Beitritt passiert nichts: Der Server Members Intent ist im Portal aus oder fehlt in
intents. [DisallowedIntents]beim Login: Der Intent steht im Code, ist im Portal aber nicht aktiviert.- „Missing Permissions“ bei der Auto-Rolle: Die Bot-Rolle steht unter der Zielrolle, oder es fehlt „Rollen verwalten“.
- Die Willkommensnachricht pingt alle:
allowedMentionswie oben setzen.
Aramac Community Bot + Dashboard Starter für Discord
Wenn du lieber mit einer Vorlage startest: Der Community Bot + Dashboard Starter ist ein selbst gehosteter Bot mit Web-Dashboard und automatisierten Tests. Laut Produktseite enthält er Willkommens- und Abschiedsnachrichten mit Vorlagen, Auto-Rollen, Self-Rollen per Button oder Reaktion, Leveling mit Level-Rollen, /rank und /leaderboard, /privacy, /mydata export|delete und /xp optout|optin, DE/EN-Texte pro Server sowie ein Next.js-Dashboard mit Discord-OAuth2-Login, das nie den Bot-Token braucht (discord.js 14, Node.js 22.13 oder neuer, SQLite, Docker Compose). Voraussetzungen: Node.js 22.13 oder neuer (oder Docker), eine eigene Discord-Anwendung und eigenes Hosting. Enthält keine KI. Preis: 29 € inkl. MwSt., verkauft von der Aramac GmbH. Lizenz: persönliche, nicht gewerbliche Nutzung, nur auf privaten und Community-Servern, nicht für Shops, Unternehmen oder Server mit bezahlten Mitgliedschaften oder Rollen (Lizenz). Nicht mit Discord Inc. verbunden.
FAQ
Warum sieht mein Bot keine neuen Mitglieder?
Beitritte kommen nur mit dem Guild-Members-Intent an. Schalte im Developer Portal den „Server Members Intent“ ein und trage GatewayIntentBits.GuildMembers im Client ein.
Kann ich per DM statt im Kanal begrüßen?
Ja, mit member.send(). Viele Mitglieder haben DMs von Servern aber abgeschaltet. Eine Nachricht im Kanal erreicht mehr Leute.
Wie verhindere ich, dass die Willkommensnachricht alle pingt?
Mit allowedMentions: { users: [member.id] } wird nur das neue Mitglied erwähnt.
Ist der Community Bot Starter ein Abo?
Nein. 29 € inkl. MwSt., einmal bezahlt, Lieferung als ZIP. Du hostest ihn selbst.
Darf ich ihn auf einem Firmen- oder Shop-Server nutzen?
Nein. Die Lizenz gilt nur für private und Community-Server, zur persönlichen, nicht gewerblichen Nutzung.
Weitere Guides
_Nicht mit Discord Inc. verbunden oder von Discord unterstützt. „Discord“ ist eine Marke der Discord Inc._