> ## Documentation Index
> Fetch the complete documentation index at: https://www.chapterjs.org/llms.txt
> Use this file to discover all available pages before exploring further.

# La présence

> Choisir le statut de votre bot et ce qu’il affiche sous son nom, avec un seul fichier

Dans la liste des membres, un bot a une pastille de couleur et parfois une ligne sous son nom : « Regarde over the server », par exemple. C’est sa **présence**. C’est un seul fichier, `src/presence.ts`, celui que le modèle vous a donné, et cette page est courte parce que le fichier l’est.

## Le fichier

Le modèle affiche un texte libre, « Getting ready ». Remplacez le fichier :

```ts src/presence.ts theme={"theme":{"light":"github-light","dark":"vesper"}}
import { presence } from 'chapterjs';

export default presence({
  status: 'online',
  activity: { type: 'watching', name: 'le serveur' },
});
```

Enregistrez-le pendant que le bot tourne, puis changez le `name` et enregistrez à nouveau :

```text theme={"theme":{"light":"github-light","dark":"vesper"}}
↻ Presence updated
```

Pas de reconnexion : le bot donne sa nouvelle présence à Discord immédiatement. Sans ce fichier, le bot est en ligne et n’affiche rien. Les deux champs sont facultatifs.

## Le statut

| Écrivez | Affiché |
| - | - |
| `'online'` | Une pastille verte (par défaut) |
| `'idle'` | Une lune orange |
| `'dnd'` | Une pastille rouge, « ne pas déranger » |
| `'invisible'` | Hors ligne, alors que le bot continue de tourner |

`'invisible'` sert pour un bot qui travaille en arrière-plan et ne doit pas avoir l’air de quelqu’un à qui parler.

## L’activité

`type` dit comment Discord la formule, `name` est le texte qui suit :

| Type | Affiché |
| - | - |
| `'playing'` | Joue à *name* |
| `'listening'` | Écoute *name* |
| `'watching'` | Regarde *name* |
| `'competing'` | Participe à *name* |
| `'custom'` | *name*, seul |
| `'streaming'` | Streame *name*, avec un lien vers le stream (demande une `url` Twitch ou YouTube) |

Un usage courant est un indice : `{ type: 'playing', name: '/help' }` dit aux gens par où commencer. C’est tout ce qu’un bot peut régler : Discord laisse une personne afficher bien plus (une chanson, un jeu avec des détails), mais un bot n’a qu’un type, un nom, et une URL pour un stream.

## Chacune son tour

Une ligne, c’est peu de place. `activities` en donne plusieurs, affichées l’une après l’autre : chacune reste pendant son `for` (30 secondes quand vous l’omettez, 5 secondes au minimum), puis la suivante arrive, et après la dernière, la première revient. Remplacez le fichier :

```ts src/presence.ts theme={"theme":{"light":"github-light","dark":"vesper"}}
import { presence } from 'chapterjs';

export default presence({
  status: 'online',
  activities: [
    { type: 'playing', name: '/help', for: '20s' },
    { type: 'watching', name: ({ guilds }) => `${guilds} serveurs`, for: '20s' },
  ],
});
```

Le second `name` est une fonction, pas un texte. Le bot l’exécute chaque fois que cette activité revient, et lui donne `guilds`, le nombre de serveurs où il est : la ligne suit votre bot à mesure qu’il grandit, sans toucher au fichier. Une fonction peut aussi être `async` et lire un [store](https://www.chapterjs.org/fr/tutorial/storage.md), et `activities` lui-même peut être une fonction qui donne toute la liste : le [guide](https://www.chapterjs.org/fr/presence.md#des-activités-tirées-de-vos-données) montre les deux.

Pourquoi `for` et pas « changer chaque seconde » ? Discord accepte 5 changements de présence par 20 secondes d’un bot. En dessous de 5 secondes, des changements seraient perdus : ChapterJS le refuse au chargement du fichier.

## Points d’attention

* **La présence est celle du bot, pas du serveur.** Elle est la même dans chaque serveur où se trouve le bot. Raison de plus pour avoir une application de dev séparée : ce que vous essayez ici est affiché partout où est le bot.
* **Discord accepte 5 changements par 20 secondes.** Quand vous enregistrez plus vite que cela, seule la dernière présence est envoyée, quand elle peut l’être.
* **Un fichier qui ne se charge pas** est signalé avec ce qui ne va pas, et le bot garde la dernière présence qui fonctionnait. Supprimer le fichier remet le bot en ligne sans rien afficher.
* **La présence vient uniquement du fichier.** Vos commandes ne la règlent jamais : elles changent les données que lisent ses fonctions (un store, par exemple), et le tour suivant l’affiche.
* **Une fonction qui lève une erreur** est signalée une fois, avec sa ligne, et le bot garde le dernier texte qui fonctionnait.

## Récapitulatif

* `presence({ status, activity })` se déclare une fois, dans `src/presence.ts` ; l’enregistrer s’applique immédiatement.
* `status` est la pastille ; `activity` est la ligne sous le nom, avec un `type` et un `name`.
* `activities` en affiche plusieurs tour à tour, chacune pendant son `for` ; un `name` peut être une fonction, exécutée chaque fois que son activité revient.
* Une seule présence pour tout le bot, dans chaque serveur.

> [card] [Les messages traduits](https://www.chapterjs.org/fr/tutorial/translations.md)
>
> Répondre à chaque personne dans sa langue.

> [card] [Guide : Présence](https://www.chapterjs.org/fr/presence.md)
>
> La même chose, en bref.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.