> ## 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.

# Vocal

> Réagir aux personnes qui rejoignent, quittent ou changent de salon vocal, coupent leur micro ou lancent un stream

Quand quelqu’un rejoint un salon vocal, les événements `voiceJoin` tournent :

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

export default event({
  name: 'voiceJoin',
  async run({ voice: { member, channel } }) {
    // Un salon vocal a son propre chat écrit : le bot y écrit.
    await channel.send(`${member.displayName} a rejoint ${channel.name}.`);
  },
});
```

C’est tout. Votre fonction reçoit `voice` et le serveur, `guild` : `voice.member` est qui a rejoint, `voice.channel` le [`VoiceChannel`](https://www.chapterjs.org/fr/reference/channels/voice) (un salon de conférence en est un aussi, avec `channel.isStage`), et `voice.state` son [`VoiceState`](https://www.chapterjs.org/fr/reference/data#voicestate) : micro coupé, casque coupé, en stream, caméra allumée...

> [!NOTE]
>
> Les quatre événements vocaux, avec ce qu’ils donnent, sont dans la [référence](https://www.chapterjs.org/fr/reference/events.md#voicejoin). Votre bot qui rejoint lui-même un salon vocal, pour y jouer du son, est dans [Jouer en vocal](https://www.chapterjs.org/fr/voice.md).

## Quatre événements

Discord envoie une seule sorte de changement pour le vocal ; ChapterJS vous dit ce que c’était, en comparant avec ce que faisait la personne avant :

| Événement | Tourne quand | Votre fonction reçoit |
| - | - | - |
| `voiceJoin` | Quelqu’un rejoint un salon vocal | `voice` (`member`, `channel`, `state`), `guild` |
| `voiceLeave` | Quelqu’un part, ou est déconnecté | `voice` (`member`, `channel` quitté, `state` tel qu’il était), `guild` |
| `voiceMove` | Quelqu’un va dans un autre salon vocal, ou y est déplacé | `voice` (`member`, `from`, `to`, `state`), `guild` |
| `voiceUpdate` | Quelqu’un dans un salon change : micro, casque, stream, caméra | `voice` (`member`, `channel`, `state` maintenant, `before` tel qu’il était), `guild` |

Un changement de salon n’est qu’un `voiceMove` : pas un `voiceLeave` suivi d’un `voiceJoin`. Et `voiceUpdate` ne tourne jamais pour une arrivée, un départ ou un changement de salon.

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

export default event({
  name: 'voiceUpdate',
  async run({ voice: { member, channel, state, before } }) {
    if (state.selfStream && !before.selfStream) {
      await channel.send(`${member.displayName} est en direct !`);
    }
  },
});
```

## Le salon que quelqu’un a quitté

`voiceLeave` donne toujours le salon, même quand il a été supprimé avec des personnes dedans : le bot garde le salon de chaque personne tant qu’elle est en vocal.

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

export default event({
  name: 'voiceLeave',
  run({ voice: { member, channel }, guild }) {
    console.log(`${member.displayName} a quitté ${channel.name} de ${guild.name}`);
  },
});
```

## Ce dont le bot se souvient

Pour distinguer une arrivée d’un changement de salon ou d’un micro coupé, le bot se souvient de qui est dans un salon vocal, et l’oublie quand la personne part. Il ne le fait que quand un fichier écoute l’un de ces événements : sans fichier, Discord n’envoie pas du tout les changements du vocal. C’est peu : une petite entrée par personne en vocal en ce moment.

## Intents

Les quatre événements ont besoin de `GUILD_VOICE_STATES`, qui n’est pas privilégié. Ils ne se produisent que sur les serveurs : il n’y a pas d’option `where`.

```text theme={"theme":{"light":"github-light","dark":"vesper"}}
ℹ Intents computed from your files: GUILDS, GUILD_VOICE_STATES
```

> [card] [Modération et serveur](https://www.chapterjs.org/fr/events/server.md)
>
> Bannissements, journal d’audit, invitations, emojis, événements programmés, fils.

> [card] [Référence des événements](https://www.chapterjs.org/fr/reference/events.md#voicejoin)
>
> Chaque champ de chaque événement.


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