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

# VoiceConnection

> Le bot dans un salon vocal : ce qu’il y joue, la pause, l’arrêt et le départ

Une `VoiceConnection` est le bot dans un salon vocal d’un serveur : ce qu’il y joue, et comment il part. `channel.join()` en donne une ; `guild.voice` est celle d’un serveur.

```ts theme={"theme":{"light":"github-light","dark":"vesper"}}
import type { VoiceChannel } from 'chapterjs';

async function ring(channel: VoiceChannel) {
  const voice = await channel.join();
  await voice.play('https://example.com/bell.mp3');
  await voice.leave();
}
```

> [!NOTE]
>
> Comment rejoindre et jouer est dans [Jouer en vocal](https://www.chapterjs.org/fr/voice.md).

## Propriétés

**guild** `Guild`

Le serveur du salon vocal.

**channel** `VoiceChannel`

Le salon vocal où se trouve le bot.

**connected** `boolean`

Si le bot est toujours en vocal dans ce serveur.

**playing** `boolean`

Si quelque chose joue, en pause ou non.

**paused** `boolean`

Si ce qui joue est en pause.

## Helpers

### toJSON()

```ts theme={"theme":{"light":"github-light","dark":"vesper"}}
toJSON(): object
```

Ce que montrent `console.log` et `JSON.stringify` : le serveur, le salon et ce qui joue, jamais la session ni ses clés.

## Actions

### play()

```ts theme={"theme":{"light":"github-light","dark":"vesper"}}
play(source: AudioSource): Promise<void>
```

Joue un fichier de `public/` (`asset('music/intro.ogg')`), un fichier envoyé sur Discord (l’option `attachment` d’une commande) ou un lien. L’Opus (`.ogg`, `.webm`) est envoyé tel quel ; tout le reste est converti avec ffmpeg, qui doit alors être installé. Arrête ce qui jouait. Se résout quand c’est fini, arrêté, ou qu’un autre `play()` le remplace.

[Documentation de Discord](https://docs.discord.com/developers/topics/voice-connections#transport-encryption-and-sending-voice)

### pause()

```ts theme={"theme":{"light":"github-light","dark":"vesper"}}
pause(): void
```

Met en pause ce qui joue ; `resume()` reprend de là.

### resume()

```ts theme={"theme":{"light":"github-light","dark":"vesper"}}
resume(): void
```

Reprend ce qui était en pause.

### stop()

```ts theme={"theme":{"light":"github-light","dark":"vesper"}}
stop(): void
```

Arrête ce qui joue : son `play()` se résout.

### leave()

```ts theme={"theme":{"light":"github-light","dark":"vesper"}}
leave(): Promise<void>
```

Quitte le salon vocal.

[Documentation de Discord](https://docs.discord.com/developers/topics/voice-connections#connecting-to-voice)

## Types

### AudioSource

```ts theme={"theme":{"light":"github-light","dark":"vesper"}}
type AudioSource = AssetFile | Attachment | string
```

Ce que prend `play()` : un fichier de `public/` (`asset('music/intro.ogg')`), un fichier envoyé sur Discord (l’option `attachment` d’une commande, ou l’un des `message.attachments`), ou un lien qui commence par `https://`. Voir [Attachment](https://www.chapterjs.org/fr/reference/data.md#attachment).

### JoinOptions

Ce que prend `join()`.

**deaf** `boolean`

Si le bot a le casque coupé : il n’entend rien, que Discord ne lui envoie alors pas. Par défaut : `true`, puisque le bot ne fait que jouer.

**mute** `boolean`

Si le bot apparaît avec le micro coupé. Par défaut : `false`.

## Erreurs

`join()` et `play()` lèvent une erreur qui dit quoi faire ; elle est affichée avec la ligne de votre code, comme les autres.

> [accordion] The bot can't join Lounge: it needs the Connect permission there.
>
> Donnez au bot **Se connecter** (Connect) dans ce salon. `play()` dit la même chose avec **Parler** (Speak).

> [accordion] The bot can't join Lounge: it is full (5 people), and the bot does not have the Move Members permission that lets it in anyway.
>
> La limite d’utilisateurs du salon est atteinte. Augmentez-la, ou donnez au bot **Déplacer des membres** (Move Members).

> [accordion] Discord did not let the bot join Lounge within 10 s.
>
> Discord n’a pas répondu. Réessayez ; si cela continue, vérifiez les permissions du bot dans le salon.

> [accordion] public/x.mp3 is not an Opus file (.ogg or .webm), and ffmpeg is not installed to convert it.
>
> Installez [ffmpeg](https://ffmpeg.org/download.html) sur la machine qui fait tourner le bot, ou convertissez le fichier en `.ogg` Opus.

> [accordion] ffmpeg could not read public/x.wav: …
>
> ffmpeg n’a pas pu lire le fichier ou le lien : la fin du message est ce que ffmpeg a dit.

> [accordion] … is a web page, not a sound: give the link of an audio file or of a stream, or send the file.
>
> Le lien mène à une page, comme celle d’une vidéo YouTube : le son n’est pas à cette adresse. Donnez le lien du fichier lui-même, ou du flux d’une radio.

> [accordion] … could not be downloaded: the server answered 404.
>
> Un lien ou un fichier envoyé sur Discord n’a pas pu être téléchargé : il a été supprimé, ou le lien est faux.

> [accordion] play() takes a file of public/, like play(asset('music/intro.ogg')), a file sent on Discord, or a link starting with https\://.
>
> `play()` a reçu autre chose, comme un chemin écrit à la main. Utilisez `asset()`.

> [accordion] The bot is no longer in this voice channel: join it again with channel.join().
>
> La connexion est partie, ou quelqu’un a déconnecté le bot. Rejoignez à nouveau pour une nouvelle connexion.


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