NOUVEAU 📢 Offre de lancement limitée : jusqu'à 70 % de remise sur votre premier mois, pour tous les jeux !Voir les offres

Comment héberger un bot nextcord 24/7

Hébergement de bots DiscordUpdated Nov 6, 202611 min read

Pour héberger un bot nextcord 24/7, faites-le tourner sur une machine toujours allumée plutôt que sur votre PC : un VPS Linux avec un service systemd si vous l’hébergez vous-même, ou un forfait bot sur l’hébergement de bots Discord PlayNHost (à partir de 1,99 $US par mois), où vous envoyez votre code, collez le token et cliquez sur Démarrer. Dans notre test, un bot nextcord 3.2.0 a utilisé environ 47 Mo de mémoire et a joint Discord environ 1,0 seconde après son lancement. Premier point à vérifier : nextcord 3 exige Python 3.12 ou plus récent. Les étapes sur PlayNHost :

  1. Sur la page d’hébergement de bots Discord, cliquez sur Créer un serveur pour un forfait. Dans la fenêtre de commande, répondez à Pour quelle plateforme est votre bot ? par Discord et choisissez Python.
  2. Ouvrez votre serveur dans le panel. La carte Configurer votre bot de l’Aperçu s’ouvre sur Connexion à Discord. Sa première étape, Ce qui tourne, doit indiquer Ce bot fait tourner Python Bot. ; cliquez sur cette étape pour la vérifier, puis sur Continuer.
  3. Sous Connexion à Discord, collez votre token dans Collez le token de votre bot, cliquez sur Connexion, puis sur Oui, continuer.
  4. Sous Permissions, cochez Mon code l’utilise uniquement pour les intents privilégiés que demande votre code (le bot ci-dessous n’en demande aucun), cliquez sur Ajouter à un serveur Discord, puis sur Continuer.
  5. Sous Votre code, cliquez sur Téléverser des fichiers et envoyez bot.py et un requirements.txt qui liste nextcord, ou cliquez sur Connecter Git.
  6. Sur la page Bot, volet Code, laissez le Runtime sur Python 3.12 (recommended), 3.13 ou 3.14, renseignez le Fichier d’entrée s’il n’est pas bot.py, et cliquez sur Enregistrer.
  7. Cliquez sur Démarrer le bot et surveillez la Console. Quand votre bot affiche Logged in as ..., la carte indique Votre bot est en ligne sur Discord.

Les étapes Python générales (paquets, lignes de la console) sont dans Comment héberger un bot Discord Python. Cette page couvre ce qui change avec nextcord.

Ce que nous avons mesuré

Nous avons fait tourner chaque bibliothèque Discord pour Python sur nos propres serveurs, dans la même configuration Python 3.12 qu’un forfait bot, avec une limite de mémoire de 1 Go :

BibliothèqueVersionMémoire au reposDu démarrage à la réponse de Discord
nextcord3.2.047 Mo1,0 s
discord.py2.7.148 Mo1,0 s
Pycord2.8.151 Mo1,1 s
disnake2.12.247 Mo0,9 s
hikari2.7.061 Mo1,3 s
Python seul3.129 Mo

Méthode : le plus petit programme qui charge la bibliothèque et se connecte avec un faux token, installé comme nos serveurs l’installent. La mémoire est celle que le processus occupait 15 secondes après le refus du token par Discord, et le temps de démarrage court du lancement à cette réponse, il inclut donc un aller-retour vers Discord. Chaque chiffre est la médiane de trois exécutions après une exécution d’échauffement. C’est le plancher : un bot qui s’est connecté, a rejoint des serveurs et met des membres en cache utilise davantage, dans une proportion qui dépend du bot.

Ce que cela signifie pour le forfait : un bot nextcord minimal n’utilise qu’une petite part du forfait STARTER de 0,5 Go. Dimensionnez le forfait d’après ce que votre propre bot garde en mémoire, pas d’après la bibliothèque.

Un bot nextcord minimal

Il répond à /ping avec une commande slash et affiche une ligne de démarrage. Il lit le token dans DISCORD_TOKEN, le nom que le panel donne à votre code.

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"])

La plage de versions dans requirements.txt est voulue : avec un Python trop ancien, pip s’arrête alors sur une erreur au lieu d’installer discrètement un vieux nextcord (voir plus bas). commands.Bot() n’a pas besoin de préfixe pour les commandes slash. nextcord enregistre /ping auprès de Discord de lui-même à chaque connexion. La ligne Logged in as fait passer la pastille de l’Aperçu à En ligne sur Discord.

Si le token est incorrect

Quand Discord refuse le token, nextcord lève cette erreur (le texte qu’a affiché notre bot de test) :

LoginFailure: Improper token has been passed.

Avec bot.run(), un traceback se termine par nextcord.errors.LoginFailure: Improper token has been passed. et le bot s’arrête. Le panel lit cette ligne : la pastille affiche Problème de token et une bannière indique Discord n’a pas accepté le token de votre bot. Obtenez un nouveau token dans le Discord Developer Portal : votre application, Bot, Reset Token (il n’est affiché qu’une fois). Cliquez sur Remplacer le token dans la bannière, puis sur Remplacer le token dans le volet Discord, collez-le et redémarrez le bot. Voir Comment créer un bot Discord et obtenir son token.

Ce qu’un hébergeur doit savoir sur nextcord

  • Python 3.12 ou plus récent. Toutes les versions de nextcord 3 exigent Python 3.12 ou plus. Sous Python 3.10 ou 3.11, une simple ligne nextcord fait installer par pip la 2.6.0, de septembre 2023, dernière version qui les prend en charge, et le code écrit pour nextcord 3 peut alors échouer. Avec nextcord>=3.2,<4, pip refuse : la console affiche l’erreur de pip et [PlayNHost] pip could not install everything in requirements.txt., et si nextcord n’a jamais été installé sur le serveur, le bot s’arrête ensuite avec ModuleNotFoundError: No module named 'nextcord'. Choisissez 3.12, 3.13 ou 3.14 sous Runtime ; le changement s’applique au prochain démarrage.
  • L’import est nextcord. Vous installez nextcord et écrivez import nextcord et from nextcord.ext import commands. Si vous venez de discord.py, le guide de migration de nextcord demande de désinstaller discord.py et de remplacer discord par nextcord dans vos imports et votre code.
  • Les commandes qu’il ne connaît pas sont supprimées. À la connexion, nextcord enregistre les nouvelles commandes, met à jour celles qui ont changé et supprime sur Discord les commandes que votre code ne définit pas (rollout_delete_unknown, activé par défaut). Si un second programme utilise le même bot, comme une copie de test sur votre PC, les commandes que seul ce programme définit sont supprimées chaque fois que la copie du serveur se connecte. Utilisez une application distincte pour les tests.
  • Ne touchez pas à on_connect. Cet enregistrement s’exécute dans le on_connect propre au bot. Définir @bot.event async def on_connect() le remplace et vos commandes cessent d’être mises à jour. Mettez le code de démarrage dans on_ready, comme ci-dessus.
  • Activez la journalisation. nextcord ne configure pas la journalisation lui-même, et sa propre documentation recommande vivement de la configurer. Sans elle, Python n’affiche que les avertissements et les erreurs ; logging.basicConfig(level=logging.INFO) dans le bot ci-dessus affiche aussi les lignes d’information de la bibliothèque.
  • Intents. Les intents par défaut n’incluent aucun intent privilégié, et les commandes slash n’en demandent aucun. Les commandes à préfixe exigent intents.message_content = True dans votre code et Message Content Intent activé dans le Developer Portal. Si votre code le demande alors qu’il est désactivé dans le Portal, Discord refuse la connexion. Voir Corriger « Used disallowed intents » sur votre bot Discord.

L’héberger vous-même sur un VPS Linux

Vérifiez d’abord la version de Python : python3 --version doit afficher 3.12 ou plus. Ubuntu 24.04 fournit 3.12 et Debian 13 fournit 3.13 ; Debian 12 fournit 3.11 et Ubuntu 22.04 fournit 3.10, toutes deux trop anciennes pour nextcord 3. Installez ensuite Python, créez un utilisateur et un dossier pour le bot, puis installez nextcord dans un environnement virtuel :

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

Placez le token dans un fichier que seul root peut lire. Créez /etc/nextcord-bot.env avec sudo nano /etc/nextcord-bot.env, écrivez une ligne, DISCORD_TOKEN= suivi de votre token, enregistrez, puis exécutez sudo chmod 600 /etc/nextcord-bot.env.

Créez ensuite /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

Démarrez-le maintenant et à chaque démarrage de la machine, puis suivez sa sortie :

sudo systemctl daemon-reload
sudo systemctl enable --now nextcord-bot
sudo journalctl -u nextcord-bot -f

PYTHONUNBUFFERED=1 fait arriver print() dans le journal immédiatement, au lieu d’attendre qu’un tampon se remplisse. Pour mettre à jour le bot, copiez les nouveaux fichiers, relancez la ligne pip install puis sudo systemctl restart nextcord-bot.

Auto-hébergement ou forfait bot

Votre propre VPSUn forfait bot PlayNHost
PythonLa version que fournit votre distribution, qui doit être 3.12 ou plus pour nextcord 3Choisissez 3.12, 3.13 ou 3.14 sous Runtime
PaquetsVous lancez pip install après chaque changementInstallés à un démarrage qui suit un changement de requirements.txt ou de version de Python, et au premier démarrage un jour après la dernière installation
RedémarragesVotre unité systemdRelancé après un plantage ; laissé à l’arrêt avec la raison s’il replante en moins d’une minute
Le tokenUn fichier que vous protégez vous-mêmeStocké chiffré, vérifié auprès de Discord quand vous le collez, transmis à votre code sous le nom DISCORD_TOKEN
ErreursVous lisez le journalLa bannière de la console nomme la cause, comme un mauvais token ou un paquet qui ne s’est pas installé
Mises à jour système, pare-feu, SSHÀ vous de les fairePas votre travail

Questions fréquentes

Pourquoi pip a-t-il installé nextcord 2.6.0 ?

Votre Python est en 3.10 ou 3.11. nextcord 3 exige 3.12 ou plus, donc pip choisit la version la plus récente qui prend encore en charge votre Python. Réglez le Runtime du volet Code sur Python 3.12 ou plus récent et redémarrez le bot : les paquets sont réinstallés parce que la version de Python a changé.

Mes commandes slash ont disparu. Pourquoi ?

Une cause fréquente : un autre programme s’est connecté avec le même bot et a synchronisé sa propre liste, et nextcord supprime les commandes que son code ne définit pas. Ne lancez qu’une copie par application. Pendant les tests, guild_ids=[your_server_id] sur une commande, ou default_guild_ids sur commands.Bot(), la crée seulement sur ce serveur, et la documentation de Discord indique que les commandes de serveur se mettent à jour instantanément.

Puis-je garder mon code discord.py ?

En grande partie. nextcord est né d’un fork de discord.py, donc des classes comme Client, Intents et ext.commands existent sous le nom nextcord. Les commandes slash diffèrent : @bot.slash_command et interaction.send() dans nextcord, app_commands dans discord.py. Désinstallez discord.py et changez les imports, comme l’indique le guide de migration de nextcord.

Un bot nextcord tient-il dans le plus petit forfait ?

Oui. Avec environ 47 Mo dans notre test, un bot nextcord minimal laisse la majeure partie du forfait STARTER de 0,5 Go à votre propre code. Passez au forfait supérieur quand votre bot lui-même en a besoin : grands serveurs dont il met les membres en cache, fichiers ou images qu’il traite, ou données qu’il garde en mémoire.

Prêt à faire tourner le vôtre ? Choisissez un forfait sur l’hébergement de bots Discord et envoyez votre bot nextcord.

Votre bot est hébergé ailleurs ? Transférez-le chez nous

NOS DERNIERS ARTICLES