Um einen nextcord-Bot 24/7 zu hosten, lässt du ihn auf einer Maschine laufen, die immer an ist, statt auf deinem PC: ein Linux-VPS mit einem systemd-Dienst, wenn du selbst hostest, oder ein Bot-Tarif bei PlayNHost Discord-Bot-Hosting (ab 1,99 US$ im Monat), wo du deinen Code hochlädst, den Token einfügst und auf Start klickst. In unserem Test brauchte ein nextcord-3.2.0-Bot etwa 47 MB Speicher und erreichte Discord etwa 1,0 Sekunden nach dem Start. Das Erste, was du prüfen solltest: nextcord 3 braucht Python 3.12 oder neuer. Die Schritte bei PlayNHost:
- Klicke auf der Seite Discord-Bot-Hosting bei einem Tarif auf Server erstellen. Beantworte im Bestellfenster die Frage Wofür ist dein Bot? mit Discord und wähle Python.
- Öffne deinen Server im Panel. Die Karte Deinen Bot einrichten auf der Übersicht öffnet sich bei Mit Discord verbinden. Der erste Schritt, Was läuft, sollte Dieser Bot führt Python Bot aus. anzeigen; klicke auf diesen Schritt, um das zu prüfen, dann auf Weiter.
- Füge bei Mit Discord verbinden deinen Token in Füge deinen Bot-Token ein ein, klicke auf Verbinden und dann auf Ja, weiter.
- Setze bei Berechtigungen nur dann ein Häkchen bei Mein Code nutzt das, wenn dein Code privilegierte Intents anfordert (der Bot unten braucht keine), klicke auf Zu einem Discord-Server hinzufügen und dann auf Weiter.
- Klicke bei Dein Code auf Dateien hochladen und lade
bot.pysowie einerequirements.txthoch, dienextcordenthält, oder klicke auf Git verbinden. - Lasse auf der Seite Bot im Bereich Code die Laufzeitumgebung auf Python 3.12 (recommended), 3.13 oder 3.14, setze die Startdatei, falls sie nicht
bot.pyheißt, und klicke auf Speichern. - Klicke auf Bot starten und beobachte die Console. Sobald dein Bot
Logged in as ...ausgibt, zeigt die Karte Dein Bot ist online in Discord.
Die allgemeinen Python-Schritte (Pakete, Konsolenzeilen) stehen in So hostest du einen Python-Discord-Bot. Diese Seite behandelt, was bei nextcord anders ist.
Was wir gemessen haben
Wir haben jede Python-Discord-Bibliothek auf unseren eigenen Servern laufen lassen, im selben Python-3.12-Setup, das ein Bot-Tarif nutzt, mit einem Speicherlimit von 1 GB:
| Bibliothek | Version | Speicher ohne Last | Start bis zur Antwort von Discord |
|---|---|---|---|
| nextcord | 3.2.0 | 47 MB | 1,0 s |
| discord.py | 2.7.1 | 48 MB | 1,0 s |
| Pycord | 2.8.1 | 51 MB | 1,1 s |
| disnake | 2.12.2 | 47 MB | 0,9 s |
| hikari | 2.7.0 | 61 MB | 1,3 s |
| Python allein | 3.12 | 9 MB |
So haben wir gemessen: das kleinstmögliche Programm, das die Bibliothek lädt und sich mit einem falschen Token anmeldet, installiert so, wie unsere Server es installieren. Der Speicher ist das, was der Prozess 15 Sekunden nach der Ablehnung des Tokens durch Discord belegte, und die Startzeit reicht vom Start bis zu dieser Antwort, enthält also einen Weg zu Discord. Jeder Wert ist der Median aus drei Läufen nach einem Aufwärmlauf. Das ist die Untergrenze: Ein Bot, der verbunden ist, Servern beigetreten ist und Mitglieder zwischenspeichert, braucht mehr, und zwar je nach Bot unterschiedlich viel.
Was das für den Tarif bedeutet: Ein minimaler nextcord-Bot nutzt nur einen kleinen Teil des STARTER-Tarifs mit 0,5 GB. Dimensioniere den Tarif nach dem, was dein eigener Bot im Speicher hält, nicht nach der Bibliothek.
Ein minimaler nextcord-Bot
Er antwortet mit einem Slash-Befehl auf /ping und gibt eine Ready-Zeile aus. Den Token liest er aus DISCORD_TOKEN, dem Namen, den das Panel deinem Code gibt.
requirements.txt
nextcord>=3.2,<4
bot.py
import logging
import os
import nextcord
from nextcord.ext import commands
logging.basicConfig(level=logging.INFO)
bot = commands.Bot()
@bot.event
async def on_ready():
print(f"Logged in as {bot.user}")
@bot.slash_command(description="Check that the bot answers")
async def ping(interaction: nextcord.Interaction):
await interaction.send("Pong!")
bot.run(os.environ["DISCORD_TOKEN"])
Der Versionsbereich in requirements.txt ist Absicht: Auf einem zu alten Python bricht pip dann mit einem Fehler ab, statt stillschweigend ein altes nextcord zu installieren (siehe unten). commands.Bot() braucht für Slash-Befehle kein Präfix. nextcord registriert /ping bei jeder Verbindung selbst bei Discord. Die Zeile Logged in as schaltet den Chip auf der Übersicht auf Online in Discord.
Wenn der Token falsch ist
Wenn Discord den Token ablehnt, löst nextcord diesen Fehler aus (der Text, den unser Test-Bot ausgegeben hat):
LoginFailure: Improper token has been passed.
Mit bot.run() endet ein Traceback mit nextcord.errors.LoginFailure: Improper token has been passed., und der Bot hält an. Das Panel liest diese Zeile: Der Chip zeigt Token-Problem und ein Banner sagt Discord hat deinen Bot-Token nicht akzeptiert. Hole dir im Discord Developer Portal einen neuen Token: deine Anwendung, Bot, Reset Token (er wird nur einmal angezeigt). Klicke im Banner auf Token ersetzen, dann im Bereich Discord auf Token ersetzen, füge ihn ein und starte den Bot erneut. Siehe So erstellst du einen Discord-Bot und holst seinen Token.
Was ein Host über nextcord wissen muss
- Python 3.12 oder neuer. Jede nextcord-3-Version verlangt Python 3.12 oder später. Unter Python 3.10 oder 3.11 lässt eine einfache
nextcord-Zeile pip die Version 2.6.0 vom September 2023 installieren, die letzte Version, die sie unterstützt, und für nextcord 3 geschriebener Code kann dann fehlschlagen. Mitnextcord>=3.2,<4verweigert pip die Installation: Die Konsole zeigt den Fehler von pip und[PlayNHost] pip could not install everything in requirements.txt., und wenn nextcord auf dem Server nie installiert war, bricht der Bot danach mitModuleNotFoundError: No module named 'nextcord'ab. Wähle unter Laufzeitumgebung 3.12, 3.13 oder 3.14; die Änderung gilt ab dem nächsten Start. - Importiert wird nextcord. Du installierst
nextcordund schreibstimport nextcordundfrom nextcord.ext import commands. Wenn du von discord.py kommst, sagt die Migrationsanleitung von nextcord, du sollst discord.py deinstallieren und in deinen Imports und deinem Codediscorddurchnextcordersetzen. - Unbekannte Befehle werden gelöscht. Beim Verbinden registriert nextcord neue Befehle, aktualisiert geänderte und löscht Befehle bei Discord, die dein Code nicht definiert (
rollout_delete_unknown, standardmäßig aktiv). Wenn ein zweites Programm denselben Bot nutzt, etwa eine Testkopie auf deinem PC, werden die Befehle, die nur dieses Programm definiert, jedes Mal entfernt, wenn sich die Kopie auf dem Server verbindet. Nutze für Tests eine separate Anwendung. - Lass on_connect in Ruhe. Diese Registrierung läuft im
on_connectdes Bots selbst. Wenn du@bot.event async def on_connect()definierst, ersetzt du es, und deine Befehle werden nicht mehr aktualisiert. Setze Startcode inon_ready, wie oben. - Schalte Logging ein. nextcord richtet Logging nicht selbst ein, und die eigene Dokumentation empfiehlt dringend, es zu konfigurieren. Ohne Logging zeigt Python nur Warnungen und Fehler;
logging.basicConfig(level=logging.INFO)im Bot oben zeigt auch die Info-Zeilen der Bibliothek. - Intents. Die Standard-Intents enthalten keinen privilegierten, und Slash-Befehle brauchen keinen. Präfixbefehle brauchen
intents.message_content = Truein deinem Code und Message Content Intent im Developer Portal eingeschaltet. Wenn dein Code ihn anfordert, während er im Portal ausgeschaltet ist, lehnt Discord die Anmeldung ab. Siehe „Used disallowed intents“ bei deinem Discord-Bot beheben.
Selbst auf einem Linux-VPS hosten
Prüfe zuerst die Python-Version: python3 --version muss 3.12 oder neuer anzeigen. Ubuntu 24.04 liefert 3.12 und Debian 13 liefert 3.13; Debian 12 liefert 3.11 und Ubuntu 22.04 liefert 3.10, beide zu alt für nextcord 3. Installiere dann Python, lege einen Benutzer und einen Ordner für den Bot an und installiere nextcord in einer virtuellen Umgebung:
sudo apt update
sudo apt install -y python3 python3-venv
sudo useradd --system --create-home --home-dir /opt/nextcord-bot bot
sudo cp bot.py requirements.txt /opt/nextcord-bot/
sudo chown bot: /opt/nextcord-bot/bot.py /opt/nextcord-bot/requirements.txt
sudo -u bot python3 -m venv /opt/nextcord-bot/venv
sudo -u bot /opt/nextcord-bot/venv/bin/pip install -r /opt/nextcord-bot/requirements.txt
Lege den Token in eine Datei, die nur root lesen kann. Erstelle /etc/nextcord-bot.env mit sudo nano /etc/nextcord-bot.env, schreibe eine Zeile, DISCORD_TOKEN= gefolgt von deinem Token, speichere sie und führe sudo chmod 600 /etc/nextcord-bot.env aus.
Erstelle dann /etc/systemd/system/nextcord-bot.service:
[Unit]
Description=nextcord Discord bot
Wants=network-online.target
After=network-online.target
[Service]
User=bot
WorkingDirectory=/opt/nextcord-bot
EnvironmentFile=/etc/nextcord-bot.env
Environment=PYTHONUNBUFFERED=1
ExecStart=/opt/nextcord-bot/venv/bin/python bot.py
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
Starte ihn jetzt und bei jedem Boot und verfolge dann seine Ausgabe:
sudo systemctl daemon-reload
sudo systemctl enable --now nextcord-bot
sudo journalctl -u nextcord-bot -f
PYTHONUNBUFFERED=1 sorgt dafür, dass print() sofort im Journal ankommt, statt erst, wenn ein Puffer voll ist. Zum Aktualisieren des Bots kopierst du die neuen Dateien, führst die pip install-Zeile erneut aus und startest mit sudo systemctl restart nextcord-bot neu.
Selbst hosten oder Bot-Tarif
| Dein eigener VPS | Ein PlayNHost-Bot-Tarif | |
|---|---|---|
| Python | Die Version, die deine Distribution mitbringt; für nextcord 3 muss sie 3.12 oder neuer sein | Wähle 3.12, 3.13 oder 3.14 unter Laufzeitumgebung |
| Pakete | Du führst nach jeder Änderung pip install aus | Werden bei einem Start installiert, nachdem sich requirements.txt oder die Python-Version geändert hat, und beim ersten Start einen Tag nach der letzten Installation |
| Neustarts | Deine systemd-Unit | Wird nach einem Absturz wieder gestartet; bleibt mit Angabe des Grundes gestoppt, wenn er innerhalb einer Minute erneut abstürzt |
| Der Token | Eine Datei, die du selbst schützt | Verschlüsselt gespeichert, beim Einfügen mit Discord geprüft und als DISCORD_TOKEN an deinen Code übergeben |
| Fehler | Du liest das Journal | Das Konsolen-Banner nennt die Ursache, etwa einen falschen Token oder ein Paket, das nicht installiert wurde |
| Systemupdates, Firewall, SSH | Das erledigst du selbst | Nicht deine Aufgabe |
Häufige Fragen
Warum hat pip nextcord 2.6.0 installiert?
Dein Python ist 3.10 oder 3.11. nextcord 3 braucht 3.12 oder neuer, deshalb wählt pip die neueste Version, die dein Python noch unterstützt. Stelle die Laufzeitumgebung im Bereich Code auf Python 3.12 oder neuer und starte den Bot erneut: Die Pakete werden neu installiert, weil sich die Python-Version geändert hat.
Meine Slash-Befehle sind verschwunden. Warum?
Eine häufige Ursache: Ein anderes Programm hat sich mit demselben Bot angemeldet und seine eigene Liste synchronisiert, und nextcord löscht die Befehle, die sein Code nicht definiert. Betreibe pro Anwendung nur eine Kopie. Beim Testen erstellt guild_ids=[your_server_id] an einem Befehl oder default_guild_ids bei commands.Bot() ihn nur auf diesem Server, und laut Discord-Dokumentation werden Server-Befehle sofort aktualisiert.
Kann ich meinen discord.py-Code behalten?
Das meiste davon. nextcord begann als Fork von discord.py, daher gibt es Klassen wie Client, Intents und ext.commands unter dem Namen nextcord. Bei Slash-Befehlen gibt es Unterschiede: @bot.slash_command und interaction.send() in nextcord, app_commands in discord.py. Deinstalliere discord.py und ändere die Imports, wie es die Migrationsanleitung von nextcord sagt.
Passt ein nextcord-Bot in den kleinsten Tarif?
Ja. Mit etwa 47 MB in unserem Test lässt ein minimaler nextcord-Bot den größten Teil des STARTER-Tarifs mit 0,5 GB für deinen eigenen Code frei. Steige um, wenn dein Bot es selbst braucht: große Server, deren Mitglieder er zwischenspeichert, Dateien oder Bilder, die er verarbeitet, oder Daten, die er im Speicher hält.
Bereit, deinen Bot zu starten? Wähle einen Tarif bei Discord-Bot-Hosting und lade deinen nextcord-Bot hoch.



