# Bots Discord

Source : https://webgune.cloud/oc-oc/docs/bots-discord · Mis à jour le 2026-10-27

# 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

1. Dans votre projet, **+ Nouveau service** et choisissez le type **Bot Discord**.
2. Sélectionnez le runtime : **JavaScript** (Node.js) ou **Python**.
3. Connectez le dépôt GitHub qui contient le code du bot.
4. Ajoutez votre token dans les variables d'environnement (jamais dans le code) :

```bash
DISCORD_TOKEN=votre-token-de-bot
```

## Exemple minimal (discord.js)

```javascript
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)

```python
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.

```python
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](/docs/commande-demarrage).
- Les logs du bot sont disponibles en temps réel dans l'onglet **Logs**.
