Om een nextcord-bot 24/7 te hosten, draai je hem op een machine die aan blijft in plaats van op je pc: een Linux-VPS met een systemd-service als je het zelf host, of een botabonnement bij PlayNHost Discord-bothosting (vanaf US$1.99 per maand), waar je je code uploadt, het token plakt en op Start klikt. In onze test gebruikte een nextcord 3.2.0-bot ongeveer 47 MB geheugen en bereikte hij Discord ongeveer 1.0 seconde na het starten. Het eerste wat je moet controleren: nextcord 3 heeft Python 3.12 of nieuwer nodig. De stappen bij PlayNHost:
- Klik op de pagina Discord-bothosting bij een abonnement op Server aanmaken. Beantwoord in het bestelvenster Voor welk platform is je bot? met Discord en kies Python.
- Open je server in het paneel. De kaart Je bot instellen op het Overzicht opent bij Verbinden met Discord. De eerste stap, Wat er draait, hoort Deze bot draait Python Bot. te tonen; klik op die stap om het te controleren en dan op Doorgaan.
- Plak bij Verbinden met Discord je token in Plak je bottoken, klik op Verbinden en dan op Ja, doorgaan.
- Vink bij Rechten Mijn code gebruikt dit alleen aan voor de bevoorrechte intents die je code vraagt (de bot hieronder heeft er geen nodig), klik op Toevoegen aan een Discord-server en dan op Doorgaan.
- Klik bij Je code op Bestanden uploaden en upload
bot.pyen eenrequirements.txtwaarinnextcordstaat, of klik op Git koppelen. - Laat op de pagina Bot, in het onderdeel Code, de Runtime op Python 3.12 (recommended), 3.13 of 3.14 staan, stel het Startbestand in als het niet
bot.pyis, en klik op Opslaan. - Klik op Bot starten en volg de Console. Zodra je bot
Logged in as ...afdrukt, zegt de kaart Je bot is online in Discord.
De algemene Python-stappen (pakketten, consoleregels) staan in Een Python Discord-bot hosten. Deze pagina behandelt wat er bij nextcord anders is.
Wat we hebben gemeten
We lieten elke Python-Discordbibliotheek draaien op onze eigen servers, in dezelfde Python 3.12-opzet die een botabonnement gebruikt, met een geheugenlimiet van 1 GB:
| Bibliotheek | Versie | Geheugen in rust | Start tot het antwoord van 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 alleen | 3.12 | 9 MB |
Zo: het kleinste programma dat de bibliotheek laadt en inlogt met een nep-token, geĂ¯nstalleerd zoals onze servers het installeren. Het geheugen is wat het proces 15 seconden nadat Discord het token weigerde in gebruik had, en de starttijd loopt van het starten tot dat antwoord, dus er zit één reis naar Discord in. Elk getal is de mediaan van drie runs na een opwarmrun. Het is de ondergrens: een bot die verbonden is, servers is binnengekomen en leden in de cache houdt, gebruikt meer, en hoeveel hangt van de bot af.
Wat het betekent voor het abonnement: een minimale nextcord-bot gebruikt een klein deel van het STARTER-abonnement van 0.5 GB. Kies het abonnement op basis van wat je eigen bot in het geheugen houdt, niet op basis van de bibliotheek.
Een minimale nextcord-bot
Hij antwoordt op /ping met een slash-commando en drukt een ready-regel af. Hij leest het token uit DISCORD_TOKEN, de naam die het paneel aan je code geeft.
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"])
Het versiebereik in requirements.txt is bewust: op een te oude Python stopt pip dan met een fout in plaats van stilletjes een oude nextcord te installeren (zie hieronder). commands.Bot() heeft voor slash-commando's geen prefix nodig. nextcord registreert /ping bij elke verbinding zelf bij Discord. De regel Logged in as zet de chip op het Overzicht op Online in Discord.
Als het token fout is
Als Discord het token weigert, geeft nextcord deze fout (de tekst die onze testbot afdrukte):
LoginFailure: Improper token has been passed.
Met bot.run() eindigt een traceback met nextcord.errors.LoginFailure: Improper token has been passed. en stopt de bot. Het paneel leest die regel: de chip toont Tokenprobleem en een banner zegt Discord heeft je bottoken niet geaccepteerd. Haal een nieuw token op in het Discord Developer Portal: je applicatie, Bot, Reset Token (het wordt maar één keer getoond). Klik in de banner op Token vervangen, dan op Token vervangen in het onderdeel Discord, plak het en start de bot opnieuw. Zie Een Discord-bot maken en zijn token ophalen.
Wat een host over nextcord moet weten
- Python 3.12 of nieuwer. Elke nextcord 3-release vereist Python 3.12 of later. Op Python 3.10 of 3.11 laat een kale
nextcord-regel pip 2.6.0 installeren, van september 2023, de laatste release die ze ondersteunt, en code die voor nextcord 3 is geschreven kan dan mislukken. Metnextcord>=3.2,<4weigert pip: de console toont de fout van pip en[PlayNHost] pip could not install everything in requirements.txt., en als nextcord nooit op de server was geĂ¯nstalleerd, stopt de bot daarna metModuleNotFoundError: No module named 'nextcord'. Kies 3.12, 3.13 of 3.14 onder Runtime; de wijziging geldt bij de volgende start. - De import is nextcord. Je installeert
nextcorden schrijftimport nextcordenfrom nextcord.ext import commands. Kom je van discord.py, dan zegt de migratiegids van nextcord dat je discord.py moet verwijderen endiscordin je imports en code moet veranderen innextcord. - Commando's die het niet kent, worden verwijderd. Bij het verbinden registreert nextcord nieuwe commando's, werkt gewijzigde bij en verwijdert commando's bij Discord die je code niet definieert (
rollout_delete_unknown, standaard aan). Als een tweede programma dezelfde bot gebruikt, zoals een testkopie op je pc, worden de commando's die alleen dat programma definieert verwijderd telkens als de kopie op de server verbindt. Gebruik een aparte applicatie om te testen. - Blijf van on_connect af. Die registratie draait in de eigen
on_connectvan de bot. Als je@bot.event async def on_connect()definieert, vervang je die en worden je commando's niet meer bijgewerkt. Zet opstartcode inon_ready, zoals hierboven. - Zet logging aan. nextcord stelt logging niet zelf in, en de eigen documentatie raadt sterk aan het te configureren. Zonder logging toont Python alleen waarschuwingen en fouten;
logging.basicConfig(level=logging.INFO)in de bot hierboven toont ook de infoberichten van de bibliotheek. - Intents. De standaardintents bevatten geen bevoorrechte intent, en slash-commando's hebben er geen nodig. Prefixcommando's hebben
intents.message_content = Truein je code nodig en Message Content Intent ingeschakeld in het Developer Portal. Als je code erom vraagt terwijl het in het Portal uit staat, weigert Discord de login. Zie "Used disallowed intents" oplossen op je Discord-bot.
Zelf hosten op een Linux-VPS
Controleer eerst de Python-versie: python3 --version moet 3.12 of nieuwer tonen. Ubuntu 24.04 levert 3.12 en Debian 13 levert 3.13; Debian 12 levert 3.11 en Ubuntu 22.04 levert 3.10, allebei te oud voor nextcord 3. Installeer dan Python, maak een gebruiker en een map voor de bot en installeer nextcord in een virtuele omgeving:
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
Zet het token in een bestand dat alleen root kan lezen. Maak /etc/nextcord-bot.env met sudo nano /etc/nextcord-bot.env, schrijf één regel, DISCORD_TOKEN= gevolgd door je token, sla het op en voer sudo chmod 600 /etc/nextcord-bot.env uit.
Maak dan /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
Start hem nu en bij elke boot, en volg dan zijn uitvoer:
sudo systemctl daemon-reload
sudo systemctl enable --now nextcord-bot
sudo journalctl -u nextcord-bot -f
PYTHONUNBUFFERED=1 zorgt dat print() meteen in het journal komt in plaats van pas als een buffer vol raakt. Om de bot bij te werken kopieer je de nieuwe bestanden, voer je de pip install-regel opnieuw uit en daarna sudo systemctl restart nextcord-bot.
Zelf hosten of een botabonnement
| Je eigen VPS | Een PlayNHost-botabonnement | |
|---|---|---|
| Python | De versie die je distributie levert, die voor nextcord 3 3.12 of nieuwer moet zijn | Kies 3.12, 3.13 of 3.14 onder Runtime |
| Pakketten | Je voert na elke wijziging pip install uit | GeĂ¯nstalleerd bij een start nadat requirements.txt of de Python-versie is gewijzigd, en bij de eerste start een dag na de laatste installatie |
| Herstarts | Je systemd-unit | Na een crash opnieuw gestart; met de reden gestopt gelaten als hij binnen een minuut opnieuw crasht |
| Het token | Een bestand dat je zelf beschermt | Versleuteld opgeslagen, bij het plakken met Discord gecontroleerd en als DISCORD_TOKEN aan je code gegeven |
| Fouten | Je leest het journal | De console-banner noemt de oorzaak, zoals een fout token of een pakket dat niet is geĂ¯nstalleerd |
| Systeemupdates, firewall, SSH | Dat doe je zelf | Niet jouw taak |
Veelgestelde vragen
Waarom installeerde pip nextcord 2.6.0?
Je Python is 3.10 of 3.11. nextcord 3 heeft 3.12 of nieuwer nodig, dus pip kiest de nieuwste release die je Python nog ondersteunt. Zet Runtime in het onderdeel Code op Python 3.12 of nieuwer en start de bot opnieuw: de pakketten worden opnieuw geĂ¯nstalleerd omdat de Python-versie is gewijzigd.
Mijn slash-commando's zijn verdwenen. Waarom?
Een veelvoorkomende oorzaak: een ander programma logde in met dezelfde bot en synchroniseerde zijn eigen lijst, en nextcord verwijdert de commando's die zijn code niet definieert. Draai maar één kopie per applicatie. Tijdens het testen maakt guild_ids=[your_server_id] bij een commando, of default_guild_ids bij commands.Bot(), het alleen in die server aan, en volgens de documentatie van Discord worden servercommando's direct bijgewerkt.
Kan ik mijn discord.py-code houden?
Het grootste deel. nextcord begon als een fork van discord.py, dus klassen zoals Client, Intents en ext.commands zijn er onder de naam nextcord. Slash-commando's verschillen: @bot.slash_command en interaction.send() in nextcord, app_commands in discord.py. Verwijder discord.py en wijzig de imports, zoals de migratiegids van nextcord zegt.
Past een nextcord-bot in het kleinste abonnement?
Ja. Met ongeveer 47 MB in onze test laat een minimale nextcord-bot het grootste deel van het STARTER-abonnement van 0.5 GB over voor je eigen code. Stap over naar een groter abonnement als je bot zelf het nodig heeft: grote servers waarvan hij leden in de cache houdt, bestanden of afbeeldingen die hij verwerkt, of gegevens die hij in het geheugen bewaart.
Klaar om de jouwe te laten draaien? Kies een abonnement bij Discord-bothosting en upload je nextcord-bot.



