# Héberger un bot Discord

> Mets ton bot discord.js en ligne jour et nuit, son jeton gardé secret, et sa mémoire dans une base Redis ou PostgreSQL.

Source : https://docs.arkya.gg/guides/bot-discord

Un bot Discord est une application comme une autre : une image Docker qui tourne en continu. Il n’a pas besoin d’écouter sur un port, puisqu’il se connecte lui-même à Discord.

## 1. Le bot

```js index.js
const { Client, Events, GatewayIntentBits } = require("discord.js");

const client = new Client({ intents: [GatewayIntentBits.Guilds] });

client.once(Events.ClientReady, (ready) => console.log(`Connecté en tant que ${ready.user.tag}`));

for (const signal of ["SIGTERM", "SIGINT"]) {
  process.on(signal, () => client.destroy().then(() => process.exit(0)));
}

client.login(process.env.DISCORD_TOKEN);
```

Il s’arrête proprement au signal `SIGTERM`, qu’Arkya envoie avant chaque redémarrage.

## 2. L’image

```dockerfile Dockerfile
FROM node:22-alpine
WORKDIR /app
ENV NODE_ENV=production
COPY package*.json ./
RUN npm ci --omit=dev
COPY . .
USER node
CMD ["node", "index.js"]
```

## 3. Créer l’application

```bash
ark init --app mon-bot
```

Laisse `"env": {}` dans `arkya.json` : le jeton du bot est un secret, il ne va pas dans Git.

## 4. Poser le jeton

Dans l’espace client, ouvre l’onglet **Variables** de `mon-bot` et ajoute `DISCORD_TOKEN`, avec le jeton du portail développeur de Discord. Marque-la comme secrète.

## 5. Déployer

```bash
ark deploy
ark logs mon-bot
```

Le journal doit afficher « Connecté en tant que… ». Si le bot plante, Arkya le relance tout seul.

## Garder une mémoire

Le bot repart de son image à chaque redémarrage. Pour garder des réglages, des niveaux ou des tickets, ajoute une base dans le même projet :

```json arkya.json
{
  "app": "mon-bot",
  "services": {
    "cache": { "type": "redis" }
  },
  "env": {}
}
```

```bash
ark plan --apply
```

Puis, dans les variables du bot, `REDIS_URL=redis://:MOT_DE_PASSE@${mon-bot-cache.URL}`. Voir [Variables et références](https://docs.arkya.gg/applications/variables).

## Ce que ça coûte

Un bot léger tient dans la plus petite taille, 1 vCPU et 1 Go. Il se paie à la minute ; éteint, il ne coûte rien.
