Discord-Bots
Discord-Bots
Ein Dienst vom Typ Discord-Bot ist für einen Prozess gedacht, der sich mit Discord verbindet und im Wartezustand bleibt. Er braucht weder HTTP-Port noch Domain.
Einen Bot erstellen
- In Ihrem Projekt, + Neuer Dienst und wählen Sie den Typ Discord-Bot.
- Wählen Sie die Runtime: JavaScript (Node.js) oder Python.
- Verbinden Sie das GitHub-Repository, das den Bot-Code enthält.
- Fügen Sie Ihr Token in den Umgebungsvariablen hinzu (niemals im Code):
DISCORD_TOKEN=ihr-bot-token
Minimalbeispiel (discord.js)
import { Client, GatewayIntentBits } from "discord.js";
const client = new Client({ intents: [GatewayIntentBits.Guilds] });
client.once("ready", () => console.log(`Verbunden: ${client.user.tag}`));
client.login(process.env.DISCORD_TOKEN);
Minimalbeispiel (discord.py)
import os, discord
client = discord.Client(intents=discord.Intents.default())
@client.event
async def on_ready():
print(f"Verbunden: {client.user}")
client.run(os.environ["DISCORD_TOKEN"])
Shard-Modus
Ab 2.500 Servern verlangt Discord, die Verbindung des Bots in Shards aufzuteilen. Aktivieren Sie den Shard-Modus beim Erstellen des Bots oder später im Tab Discord-Bot und wählen Sie die Anzahl der Shards (2 bis 32). Das Bedienfeld zeigt die von Discord für Ihren Bot empfohlene Anzahl, etwa ein Shard pro 1.000 Server.
Jeder Shard läuft in einem eigenen Pod: Die Last verteilt sich auf mehrere Maschinen, und ein abstürzender Shard reißt die anderen nicht mit. Die Pods starten nacheinander im Abstand von einigen Sekunden, um das Identify-Limit von Discord einzuhalten. Jeder Pod erhält drei Variablen:
| Variable | Inhalt |
|---|---|
SHARD_ID | Shard-Nummer dieses Pods (0, 1, 2…) |
SHARD_COUNT | Gesamtzahl der Shards |
SHARDS | [SHARD_ID], im von discord.js erwarteten Format |
discord.js liest SHARDS und SHARD_COUNT selbst: Das Minimalbeispiel oben funktioniert unverändert. Verwenden Sie keinen zusätzlichen ShardingManager, diese Rolle übernimmt bereits die Plattform.
discord.py: Übergeben Sie beide Variablen an den Client.
import os, discord
from discord.ext import commands
bot = commands.AutoShardedBot(
command_prefix="!",
intents=discord.Intents.default(),
shard_ids=[int(os.environ["SHARD_ID"])],
shard_count=int(os.environ["SHARD_COUNT"]),
)
bot.run(os.environ["DISCORD_TOKEN"])
Eine Änderung der Shard-Anzahl startet alle Pods des Bots neu, da jeder die neue Gesamtzahl kennen muss. Im Tab Logs wählen Sie über eine Auswahl den Shard, dessen Logs Sie lesen. Autoscaling ist für einen Bot mit Shards nicht verfügbar: Er läuft immer mit einem Pod pro Shard.
Verbindungsstatus
Das Bedienfeld des Dienstes zeigt zusätzlich zum Container-Status den Discord-Verbindungsstatus des Bots an: Sie sehen sofort, ob der Bot auf Discord-Seite online ist, nicht nur, ob der Prozess läuft.
Wichtige Hinweise
- Kein Port zu konfigurieren: ein Bot exponiert keinen HTTP-Server. Wenn Ihr Code trotzdem einen Port öffnet (integriertes Dashboard…), bevorzugen Sie einen klassischen Web-Dienst.
- Der Prozess muss am Leben bleiben: ein Skript, das sich beendet, verursacht einen Neustart in Endlosschleife. Die Diagnose ist dieselbe wie bei Startbefehlen.
- Die Logs des Bots sind in Echtzeit im Tab Logs verfügbar.