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

# Salons

> Distinguer les sortes de salons, et utiliser ce qu’a chaque salon, chaque salon d’un serveur et chaque salon avec des messages

Un salon est l’endroit où les choses se passent dans Discord : un salon textuel, un salon vocal, une catégorie, un forum, un fil ou une conversation privée. Chaque sorte a sa propre classe, et toutes partagent ce qu’a `Channel`. Vous en obtenez un depuis `guild.channels`, `message.channel`, le `channel` d’une commande, ou une option `channel`.

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

async function announce(channel: Channel, text: string) {
  if (!channel.isTextBased()) return; // une catégorie ou un forum : pas de messages là
  await channel.send(text);

  if (channel.isThread() && channel.archived) await channel.unarchive();
}
```

> [!NOTE]
>
> Comment envoyer, modifier et lire des messages est dans [Envoyer des messages](https://www.chapterjs.org/fr/messages.md). Cette page liste ce qu’ont les salons ; chaque sorte a sa propre page ci-dessous.

## Quelle sorte de salon

Un salon obtenu depuis `guild.channels` ou `message.channel` peut être de n’importe quelle sorte. Demandez-le avant d’utiliser ce que seule une sorte possède : à l’intérieur du `if`, votre éditeur connaît la sorte.

| Méthode | Vrai pour | Classe |
| - | - | - |
| `isText()` | Un salon textuel ou d’annonces d’un serveur | [`TextChannel`](https://www.chapterjs.org/fr/reference/channels/text) |
| `isVoice()` | Un salon vocal ou de conférence | [`VoiceChannel`](https://www.chapterjs.org/fr/reference/channels/voice) |
| `isCategory()` | Une catégorie, qui regroupe des salons | [`CategoryChannel`](https://www.chapterjs.org/fr/reference/channels/category) |
| `isForum()` | Un salon forum ou média, fait de publications | [`ForumChannel`](https://www.chapterjs.org/fr/reference/channels/forum) |
| `isThread()` | Un fil, ou une publication d’un forum | [`ThreadChannel`](https://www.chapterjs.org/fr/reference/channels/thread) |
| `isDM()` | Une conversation privée | [`DMChannel`](https://www.chapterjs.org/fr/reference/channels/dm) |
| `isGuildChannel()` | Tout salon d’un serveur qui n’est pas un fil | [`GuildChannel`](#guildchannel) |
| `isTextBased()` | Tout salon où des messages peuvent être envoyés | [`TextBasedChannel`](#textbasedchannel) |

`type` dit la même chose sous forme de valeur de [`ChannelType`](https://www.chapterjs.org/fr/reference/enums#channeltype) :

| `ChannelType` | Classe |
| - | - |
| `GuildText`, `GuildAnnouncement` | `TextChannel` |
| `GuildVoice`, `GuildStageVoice` | `VoiceChannel` |
| `GuildCategory` | `CategoryChannel` |
| `GuildForum`, `GuildMedia` | `ForumChannel` |
| `AnnouncementThread`, `PublicThread`, `PrivateThread` | `ThreadChannel` |
| `Dm`, `GroupDm` | `DMChannel` |

Une sorte que Discord a ajoutée après cette version reste utilisable : comme `GuildChannel` quand elle est dans un serveur, comme `Channel` sinon.

> [card] [TextChannel](https://www.chapterjs.org/fr/reference/channels/text.md)
>
> Un salon textuel ou d’annonces d’un serveur.

> [card] [VoiceChannel](https://www.chapterjs.org/fr/reference/channels/voice.md)
>
> Un salon vocal ou de conférence : on y parle, et on peut aussi y écrire.

> [card] [CategoryChannel](https://www.chapterjs.org/fr/reference/channels/category.md)
>
> Une catégorie : elle regroupe des salons.

> [card] [ForumChannel](https://www.chapterjs.org/fr/reference/channels/forum.md)
>
> Un salon forum ou média : il ne contient que des publications, qui sont des fils.

> [card] [ThreadChannel](https://www.chapterjs.org/fr/reference/channels/thread.md)
>
> Un fil, ou une publication d’un forum.

> [card] [DMChannel](https://www.chapterjs.org/fr/reference/channels/dm.md)
>
> Une conversation privée entre le bot et un utilisateur.

## Channel

Un salon de n’importe quelle sorte. Utilisez les méthodes `is...()` pour savoir de quelle sorte il est et obtenir les propriétés et les actions de cette sorte. Chaque classe de cette section a ce qui est listé ici.

### Propriétés

**id** `Snowflake`

L’identifiant unique que Discord lui a donné.

**createdAt** `Date`

Quand il a été créé : un identifiant Discord contient sa date de création.

**type** `ChannelType`

La sorte de salon, sous forme de valeur de `ChannelType`.

**guildId** `Snowflake | null`

L’identifiant du serveur du salon ; `null` pour un salon privé.

**guild** `Guild | null`

Le serveur du salon ; `null` pour un salon privé.

### Helpers

Ils lisent ce que le bot sait déjà : ils n’envoient jamais de requête.

#### isTextBased()

```ts theme={"theme":{"light":"github-light","dark":"vesper"}}
isTextBased(): this is TextBasedChannel
```

Si des messages peuvent y être envoyés.

#### isGuildChannel()

```ts theme={"theme":{"light":"github-light","dark":"vesper"}}
isGuildChannel(): this is GuildChannel
```

S’il appartient à un serveur et n’est pas un fil.

#### isText()

```ts theme={"theme":{"light":"github-light","dark":"vesper"}}
isText(): this is TextChannel
```

Un salon textuel ou d’annonces d’un serveur.

#### isVoice()

```ts theme={"theme":{"light":"github-light","dark":"vesper"}}
isVoice(): this is VoiceChannel
```

Un salon vocal ou de conférence.

#### isCategory()

```ts theme={"theme":{"light":"github-light","dark":"vesper"}}
isCategory(): this is CategoryChannel
```

Une catégorie, qui regroupe des salons.

#### isForum()

```ts theme={"theme":{"light":"github-light","dark":"vesper"}}
isForum(): this is ForumChannel
```

Un salon forum ou média, fait de publications.

#### isThread()

```ts theme={"theme":{"light":"github-light","dark":"vesper"}}
isThread(): this is ThreadChannel
```

Un fil, ou une publication d’un forum.

#### isDM()

```ts theme={"theme":{"light":"github-light","dark":"vesper"}}
isDM(): this is DMChannel
```

Une conversation privée.

#### toString()

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

`<#id>` : fait un lien vers le salon quand il est mis dans un message.

#### toJSON()

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

Les données de Discord sous forme d’objet simple, avec des noms en camelCase.

### Lire depuis Discord

#### fetch()

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

Demande à Discord les dernières données du salon.

### Actions

#### delete()

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

Supprime le salon (le ferme, pour une conversation privée).

[Documentation de Discord](https://docs.discord.com/developers/resources/channel#deleteclose-channel)

## GuildChannel

Un salon d’un serveur (pas un fil). `TextChannel`, `VoiceChannel`, `CategoryChannel` et `ForumChannel` ont tout ce qui est listé ici, plus ce qu’a [`Channel`](#channel).

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

async function lock(channel: TextChannel) {
  const everyone = channel.guild.everyoneRole;
  // Plus personne ne peut écrire, mais tout le monde lit encore.
  await channel.setPermissions(everyone, { deny: ['SendMessages'] }, 'Salon verrouillé');
}
```

### Propriétés

**guildId** `Snowflake`

L’identifiant du serveur du salon.

**guild** `Guild`

Le serveur du salon.

**name** `string`

Le nom du salon.

**position** `number`

Où se trouve le salon dans la liste.

**parentId** `Snowflake | null`

L’identifiant de la catégorie du salon, quand il est dans une.

**parent** `CategoryChannel | null`

La catégorie du salon, quand il est dans une et qu’elle est connue.

**nsfw** `boolean`

Si le salon est soumis à une limite d’âge.

**permissionOverwrites** `PermissionOverwrite[]`

Ce que les rôles et les membres ont le droit ou non de faire dans ce salon. Chaque entrée est un [`PermissionOverwrite`](https://www.chapterjs.org/fr/reference/data#permissionoverwrite).

### Helpers

#### permissionsFor()

```ts theme={"theme":{"light":"github-light","dark":"vesper"}}
permissionsFor(member: GuildMember): Permissions
```

Ce qu’un membre peut faire dans ce salon : ses permissions sur le serveur, modifiées par les remplacements du salon.

[Documentation de Discord](https://docs.discord.com/developers/topics/permissions#permission-overwrites)

### Lire depuis Discord

#### fetchInvites()

```ts theme={"theme":{"light":"github-light","dark":"vesper"}}
fetchInvites(): Promise<Invite[]>
```

Les invitations qui mènent à ce salon.

[Documentation de Discord](https://docs.discord.com/developers/resources/channel#get-channel-invites)

#### fetchWebhooks()

```ts theme={"theme":{"light":"github-light","dark":"vesper"}}
fetchWebhooks(): Promise<Webhook[]>
```

Les webhooks qui publient dans ce salon.

[Documentation de Discord](https://docs.discord.com/developers/resources/webhook#get-channel-webhooks)

### Actions

#### edit()

```ts theme={"theme":{"light":"github-light","dark":"vesper"}}
edit(options: GuildChannelEditOptions, reason?: string): Promise<this>
```

Modifie le salon. Les options sont un [`GuildChannelEditOptions`](https://www.chapterjs.org/fr/reference/options#guildchanneleditoptions).

[Documentation de Discord](https://docs.discord.com/developers/resources/channel#modify-channel)

#### setPermissions()

```ts theme={"theme":{"light":"github-light","dark":"vesper"}}
setPermissions(
  target: Role | GuildMember | User,
  permissions: { allow?: PermissionResolvable; deny?: PermissionResolvable },
  reason?: string
): Promise<void>
```

Autorise ou refuse des permissions à un rôle ou à un membre dans ce salon. Les permissions qui ne sont dans aucune des deux listes suivent le serveur.

[Documentation de Discord](https://docs.discord.com/developers/resources/channel#edit-channel-permissions)

#### deletePermissions()

```ts theme={"theme":{"light":"github-light","dark":"vesper"}}
deletePermissions(target: Snowflake | { id: Snowflake }, reason?: string): Promise<void>
```

Retire ce qui a été réglé pour un rôle ou un membre dans ce salon.

[Documentation de Discord](https://docs.discord.com/developers/resources/channel#delete-channel-permission)

#### createInvite()

```ts theme={"theme":{"light":"github-light","dark":"vesper"}}
createInvite(options?: InviteCreateOptions, reason?: string): Promise<Invite>
```

Crée une invitation vers ce salon. Les options sont un [`InviteCreateOptions`](https://www.chapterjs.org/fr/reference/options#invitecreateoptions).

[Documentation de Discord](https://docs.discord.com/developers/resources/channel#create-channel-invite)

#### createWebhook()

```ts theme={"theme":{"light":"github-light","dark":"vesper"}}
createWebhook(options: { name: string; avatar?: string | null }, reason?: string): Promise<Webhook>
```

Crée un webhook qui publie dans ce salon : voir [Webhook](https://www.chapterjs.org/fr/reference/webhook.md).

**name** `string` *required*

Le nom du webhook (1 à 80 caractères).

**avatar** `string | null`

L’image de l’avatar par défaut du webhook, sous forme de data URI (`data:image/png;base64,...`).

[Documentation de Discord](https://docs.discord.com/developers/resources/webhook#create-webhook)

## Salons avec des messages

`TextChannel`, `VoiceChannel`, `ThreadChannel` et `DMChannel` peuvent tous envoyer et lire des messages : ils partagent les propriétés et méthodes de cette section. Ensemble, ils forment le type [`TextBasedChannel`](#textbasedchannel).

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

async function clean(channel: TextChannel) {
  const messages = await channel.fetchMessages({ limit: 100 });
  const fromBots = messages.filter(message => message.author.bot);
  const deleted = await channel.bulkDelete(fromBots, 'Nettoyage des messages de bots');
  await channel.send(`${deleted} messages supprimés.`);
}
```

### Propriétés

**messages** `ReadonlyMap\<Snowflake, Message\>`

Les messages du salon dont le bot se souvient.

**lastMessageId** `Snowflake | null`

L’identifiant du dernier message envoyé dans le salon, quand il est connu.

> [!NOTE]
>
> `messages` est vide sauf si l’un de vos fichiers demande de se souvenir des messages : voir [ce dont le bot se souvient](https://www.chapterjs.org/fr/memory.md). `fetchMessage()` et `fetchMessages()` fonctionnent toujours.

### Lire depuis Discord

#### fetchMessage()

```ts theme={"theme":{"light":"github-light","dark":"vesper"}}
fetchMessage(id: Snowflake, options?: { force?: boolean }): Promise<Message>
```

Un message du salon : depuis la mémoire du bot, sinon depuis Discord.

[Documentation de Discord](https://docs.discord.com/developers/resources/message#get-channel-message)

#### fetchMessages()

```ts theme={"theme":{"light":"github-light","dark":"vesper"}}
fetchMessages(options?: FetchMessagesOptions): Promise<Message[]>
```

Les derniers messages du salon, du plus récent au plus ancien. Les options sont un [`FetchMessagesOptions`](https://www.chapterjs.org/fr/reference/options#fetchmessagesoptions).

[Documentation de Discord](https://docs.discord.com/developers/resources/message#get-channel-messages)

#### fetchPins()

```ts theme={"theme":{"light":"github-light","dark":"vesper"}}
fetchPins(): Promise<Message[]>
```

Les messages épinglés du salon, le dernier épinglé en premier.

[Documentation de Discord](https://docs.discord.com/developers/resources/message#get-channel-pins)

### Actions

#### send()

```ts theme={"theme":{"light":"github-light","dark":"vesper"}}
send(message: MessageInput): Promise<Message>
```

Envoie un message dans le salon. Ce qu’elle accepte est un [`MessageInput`](https://www.chapterjs.org/fr/reference/message-options#messageinput).

[Documentation de Discord](https://docs.discord.com/developers/resources/message#create-message)

#### bulkDelete()

```ts theme={"theme":{"light":"github-light","dark":"vesper"}}
bulkDelete(messages: readonly (Snowflake | { id: Snowflake })[], reason?: string): Promise<number>
```

Supprime plusieurs messages d’un coup. Les messages de plus de deux semaines ne peuvent pas être supprimés en masse : ils sont laissés de côté, et ne sont pas comptés dans le résultat.

Renvoie combien de messages ont été supprimés.

[Documentation de Discord](https://docs.discord.com/developers/resources/message#bulk-delete-messages)

#### sendTyping()

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

Affiche « le bot est en train d’écrire… » pendant 10 secondes, ou jusqu’à ce qu’il envoie un message.

[Documentation de Discord](https://docs.discord.com/developers/resources/channel#trigger-typing-indicator)

### Attendre

Elles attendent ce qui suit dans le salon, tant que votre bot tourne : un redémarrage termine l’attente. Comment les utiliser est dans le [guide](https://www.chapterjs.org/fr/waiting.md).

#### waitForMessage()

```ts theme={"theme":{"light":"github-light","dark":"vesper"}}
waitForMessage(options?: WaitForMessageOptions): Promise<Message | null>
```

Attend le prochain message du salon qui convient : d’une personne (`from`), qui dit quelque chose (`matches`). Celui de n’importe qui sauf un bot par défaut. Donne le message, ou `null` quand `within` (une minute par défaut) est passé avant. Un redémarrage du bot termine l’attente.

#### collectMessages()

```ts theme={"theme":{"light":"github-light","dark":"vesper"}}
collectMessages(options?: CollectMessagesOptions): Promise<Message[]>
```

Rassemble les messages du salon qui conviennent, jusqu’à ce que `within` (une minute par défaut) soit passé ou que `max` soient arrivés. Les donne, dans l’ordre.

## Types

### TextBasedChannel

```ts theme={"theme":{"light":"github-light","dark":"vesper"}}
type TextBasedChannel = GuildTextBasedChannel | DMChannel
```

Tout salon où des messages peuvent être envoyés. C’est ce que donnent `message.channel` et `interaction.channel` ; `isTextBased()` restreint un `Channel` à ce type.

### GuildTextBasedChannel

```ts theme={"theme":{"light":"github-light","dark":"vesper"}}
type GuildTextBasedChannel = TextChannel | VoiceChannel | ThreadChannel
```

Tout salon d’un serveur où des messages peuvent être envoyés. C’est le `channel` d’un [`GuildMessage`](https://www.chapterjs.org/fr/reference/message#guildmessage) et d’une commande utilisée sur un serveur.

### WaitForMessageOptions

Ce que prend `waitForMessage()`.

**from** `PersonInput`

Seulement un message de cette personne. N’importe qui sauf un bot par défaut.

**matches** `string | RegExp | ((message: Message) =\> boolean)`

Seulement un message qui dit ceci : un texte (le même, quelles que soient les majuscules et les espaces autour), une expression régulière, ou une fonction du message.

**within** `Duration`

Combien de temps attendre : `'30s'`, `'2m'`. Une minute par défaut, une seconde au moins, un jour au plus.

### CollectMessagesOptions

Ce que prend `collectMessages()` : tout ce qu’a [`WaitForMessageOptions`](#waitformessageoptions), et :

**max** `number`

S’arrête une fois ce nombre de messages arrivés. Pas de limite par défaut : jusqu’à `within`.

### PersonInput

```ts theme={"theme":{"light":"github-light","dark":"vesper"}}
type PersonInput = User | GuildMember | Snowflake
```

Une personne, telle qu’une attente la prend : un utilisateur, un membre, ou un identifiant.

### Ailleurs

* [`PermissionOverwrite`](https://www.chapterjs.org/fr/reference/data#permissionoverwrite) : une entrée de `permissionOverwrites`.
* [`GuildChannelEditOptions`](https://www.chapterjs.org/fr/reference/options#guildchanneleditoptions), [`InviteCreateOptions`](https://www.chapterjs.org/fr/reference/options#invitecreateoptions) et [`FetchMessagesOptions`](https://www.chapterjs.org/fr/reference/options#fetchmessagesoptions) : ce que prennent `edit()`, `createInvite()` et `fetchMessages()`.
* [`MessageInput`](https://www.chapterjs.org/fr/reference/message-options#messageinput) : ce que prend `send()`.


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