Bots Discord
Bots Discord
Un service de type Bot Discord sert à un process qui se connecte à Discord et reste en écoute. Il n'a ni port HTTP ni domaine.
Créer un bot
- Dans votre projet, + Nouveau service et choisissez le type Bot Discord.
- Sélectionnez le runtime : JavaScript (Node.js) ou Python.
- Connectez le dépôt GitHub qui contient le code du bot.
- Ajoutez votre token dans les variables d'environnement (jamais dans le code) :
DISCORD_TOKEN=votre-token-de-bot
Exemple minimal (discord.js)
import { Client, GatewayIntentBits } from "discord.js";
const client = new Client({ intents: [GatewayIntentBits.Guilds] });
client.once("ready", () => console.log(`Connecté : ${client.user.tag}`));
client.login(process.env.DISCORD_TOKEN);
Exemple minimal (discord.py)
import os, discord
client = discord.Client(intents=discord.Intents.default())
@client.event
async def on_ready():
print(f"Connecté : {client.user}")
client.run(os.environ["DISCORD_TOKEN"])
Mode shard
Au-delà de 2 500 serveurs, Discord impose de répartir la connexion du bot en shards. Activez le mode shard à la création du bot, ou plus tard dans l'onglet Bot Discord, puis choisissez le nombre de shards (2 à 32). Le panneau indique le nombre que Discord recommande pour votre bot, environ un shard pour 1 000 serveurs.
Chaque shard tourne dans son propre pod : la charge se répartit sur plusieurs machines, et un shard qui plante n'emporte pas les autres. Les pods démarrent l'un après l'autre, à quelques secondes d'écart, pour respecter la limite d'identification de Discord. Chaque pod reçoit trois variables :
| Variable | Contenu |
|---|---|
SHARD_ID | Numéro du shard de ce pod (0, 1, 2…) |
SHARD_COUNT | Nombre total de shards |
SHARDS | [SHARD_ID], au format attendu par discord.js |
discord.js lit SHARDS et SHARD_COUNT tout seul : l'exemple minimal ci-dessus fonctionne sans modification. N'utilisez pas ShardingManager en plus, la plateforme joue déjà ce rôle.
discord.py : passez les deux variables au 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"])
Changer le nombre de shards redémarre tous les pods du bot, puisque chacun doit connaître le nouveau total. Dans l'onglet Logs, un sélecteur permet de choisir le shard dont vous lisez les logs. L'autoscaling n'est pas disponible pour un bot shardé : il tourne toujours avec un pod par shard.
Statut de connexion
Le panneau du service affiche l'état de connexion Discord du bot, en plus de l'état du conteneur. Vous voyez si le bot est en ligne côté Discord, et non seulement si le process tourne.
Points d'attention
- Pas de port à configurer : un bot n'expose pas de serveur HTTP. Si votre code ouvre quand même un port (dashboard intégré…), préférez un service web classique.
- Le process doit rester vivant. Un script qui se termine provoque un redémarrage en boucle, avec le même diagnostic que pour les commandes de démarrage.
- Les logs du bot sont disponibles en temps réel dans l'onglet Logs.