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

# Données

> Lire les objets simples que vous obtenez pour les pièces jointes, réactions, étiquettes, remplacements de permissions, bannissements, journaux d’audit, événements, règles, stickers, états vocaux et présences

Certaines choses n’ont pas de classe à elles : vous les obtenez sous forme d’objets simples, avec les champs de Discord écrits en camelCase. Elles n’ont pas de méthodes, et rien sur elles n’envoie de requête.

> [!NOTE]
>
> Les structures qui ont leur propre page sont listées dans la [vue d’ensemble](https://www.chapterjs.org/fr/reference.md). Ce que contient un message quand vous en envoyez un est dans [Options des messages](https://www.chapterjs.org/fr/reference/message-options.md).

Deux choses valent partout sur cette page :

* Une date est un `string` au format ISO 8601 (`'2026-10-06T12:00:00.000000+00:00'`) : `new Date(value)` la transforme en `Date`.
* Un utilisateur dans des données simples est lui aussi une donnée simple (`id`, `username`, `globalName`, `avatar`...), pas un [`User`](https://www.chapterjs.org/fr/reference/user). Seul `Ban` contient un vrai `User`.

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

function images(message: Message) {
  return message.attachments.filter(file => file.contentType?.startsWith('image/'));
}
```

## Attachment

Un fichier joint à un message. Vous les lisez dans `message.attachments`.

**id** `Snowflake` *required*

L’identifiant de la pièce jointe.

**filename** `string` *required*

Le nom du fichier.

**title** `string`

Le titre du fichier.

**description** `string`

Ce que montre le fichier, pour les personnes qui ne peuvent pas le voir (1024 caractères au plus).

**contentType** `string`

Le type de média du fichier (`image/png`).

**size** `number` *required*

La taille du fichier, en octets.

**url** `string` *required*

L’URL du fichier.

**proxyUrl** `string` *required*

L’URL du fichier à travers le relais de Discord.

**height** `number | null`

La hauteur, pour une image ou une vidéo.

**width** `number | null`

La largeur, pour une image ou une vidéo.

**placeholder** `string`

Un tout petit aperçu flou d’une image ou d’une vidéo, sous forme de thumbhash.

**placeholderVersion** `number`

La version de cet aperçu.

**ephemeral** `boolean`

Si le fichier appartient à un message éphémère : il disparaît avec lui.

**durationSecs** `number`

La durée d’un fichier audio ou vidéo, en secondes.

**waveform** `string`

La forme d’onde échantillonnée d’un message vocal, en base64.

**flags** `number`

Les drapeaux de la pièce jointe, sous forme de champ de bits.

**clipParticipants** `object[]`

Pour un clip d’un stream, les utilisateurs qui étaient dans le stream (données simples).

**clipCreatedAt** `string`

Pour un clip d’un stream, quand il a été enregistré.

**application** `object | null`

Pour un clip d’un stream, l’application qui était streamée, quand Discord l’a reconnue (données simples).

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

## Reaction

Les réactions d’un emoji sur un message. Vous les lisez dans `message.reactions`, une entrée par emoji.

**count** `number` *required*

Combien de fois l’emoji a été utilisé, super réactions comprises.

**countDetails** `object` *required*

Le même nombre, détaillé.

**champs**

**normal** `number` *required*

Combien de réactions normales.

**burst** `number` *required*

Combien de super réactions.

**me** `boolean` *required*

Si le bot a réagi avec cet emoji.

**meBurst** `boolean` *required*

Si le bot a fait une super réaction avec cet emoji.

**emoji** `object` *required*

L’emoji.

**champs**

**id** `Snowflake | null`

L’identifiant d’un emoji personnalisé ; `null` pour un emoji standard.

**name** `string | null`

Le nom d’un emoji personnalisé, ou le caractère d’un emoji standard.

**animated** `boolean`

Si un emoji personnalisé est animé.

**burstColors** `string[]` *required*

Les couleurs des super réactions, sous forme de texte hexadécimal.

Pour réagir ou lire qui a réagi, voir [Message](https://www.chapterjs.org/fr/reference/message.md) : `react()`, `fetchReactionUsers()`.

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

## ReactionEmoji

L’emoji d’une réaction : un emoji standard n’a qu’un `name` (`"👍"`), un emoji personnalisé a aussi un `id`. Les [événements de réactions](https://www.chapterjs.org/fr/reference/events.md#reactionadd) en donnent un.

**id** `Snowflake | null` *required*

L’identifiant d’un emoji personnalisé ; `null` pour un emoji standard.

**name** `string | null` *required*

Le nom d’un emoji personnalisé, ou le caractère d’un emoji standard.

**animated** `boolean`

Si un emoji personnalisé est animé.

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

## ForumTag

Une étiquette que peuvent avoir les publications d’un forum. Vous les lisez dans `forum.availableTags`, et les passez dans `availableTags` quand vous [créez](https://www.chapterjs.org/fr/reference/options.md#channelcreateoptions) ou [modifiez](https://www.chapterjs.org/fr/reference/options.md#guildchanneleditoptions) un salon forum.

**id** `Snowflake` *required*

L’identifiant de l’étiquette.

**name** `string` *required*

Le nom de l’étiquette (0 à 20 caractères).

**moderated** `boolean` *required*

Si seuls les membres avec la permission `ManageThreads` peuvent ajouter l’étiquette à une publication ou la retirer.

**emojiId** `Snowflake | null` *required*

L’identifiant d’un emoji personnalisé du serveur affiché à côté de l’étiquette.

**emojiName** `string | null` *required*

Un emoji standard affiché à côté de l’étiquette, sous forme de son caractère.

Une étiquette a soit `emojiId`, soit `emojiName`, ou aucun des deux.

[Documentation de Discord](https://docs.discord.com/developers/resources/channel#forum-tag-object-forum-tag-structure)

## ThreadMember

Quelqu’un dans un fil, et depuis quand. `thread.fetchMembers()` en renvoie une liste.

**id** `Snowflake`

L’identifiant du fil.

**userId** `Snowflake`

L’identifiant de l’utilisateur.

**joinTimestamp** `string` *required*

Quand l’utilisateur a rejoint le fil pour la dernière fois.

**flags** `number` *required*

Les réglages de l’utilisateur pour le fil, sous forme de champ de bits ; aujourd’hui seulement les notifications.

Pour obtenir le membre derrière, utilisez `guild.fetchMember(threadMember.userId)`.

[Documentation de Discord](https://docs.discord.com/developers/resources/channel#thread-member-object-thread-member-structure)

## PermissionOverwrite

Ce qu’un rôle ou un membre a le droit ou non de faire dans un salon. Vous les lisez dans `channel.permissionOverwrites`.

**id** `Snowflake` *required*

L’identifiant du rôle ou du membre.

**type** `'role' | 'member'` *required*

S’il s’applique à un rôle ou à un membre.

**allow** `Permissions` *required*

Ce qui est autorisé, quoi que dise le serveur.

**deny** `Permissions` *required*

Ce qui est refusé, quoi que dise le serveur.

`allow` et `deny` sont des ensembles [`Permissions`](https://www.chapterjs.org/fr/reference/permissions), donc `overwrite.allow.has('SendMessages')` fonctionne. Pour changer un remplacement, utilisez `channel.setPermissions()` et `channel.deletePermissions()` ; le champ `permissionOverwrites` de [`ChannelCreateOptions`](https://www.chapterjs.org/fr/reference/options#channelcreateoptions) a une autre forme, celle que prend Discord.

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

## Ban

Un bannissement d’un serveur. `guild.fetchBan()` en renvoie un, `guild.fetchBans()` une liste.

**user** `User` *required*

Qui est banni.

**reason** `string | null` *required*

Pourquoi, quand une raison a été donnée.

[Documentation de Discord](https://docs.discord.com/developers/resources/guild#ban-object-ban-structure)

## AuditLog

Ce que les modérateurs et les bots ont fait sur un serveur : ses entrées, de la plus récente à la plus ancienne, et ce à quoi elles font référence. `guild.fetchAuditLog()` en renvoie un.

**auditLogEntries** `object[]` *required*

Les entrées, de la plus récente à la plus ancienne.

**champs d’une entrée**

**id** `Snowflake` *required*

L’identifiant de l’entrée.

**actionType** `AuditLogEvent` *required*

Ce qui s’est passé : une valeur de [`AuditLogEvent`](https://www.chapterjs.org/fr/reference/enums#auditlogevent).

**targetId** `string | null` *required*

L’identifiant de ce qui a été touché : un webhook, un utilisateur, un rôle...

**userId** `Snowflake | null` *required*

L’identifiant de l’utilisateur ou de l’app qui l’a fait.

**reason** `string`

La raison donnée (1 à 512 caractères).

**changes** `object[]`

Ce qui a changé sur la cible.

**champs d’un changement**

**key** `string` *required*

Le nom de ce qui a changé, avec quelques exceptions que liste Discord.

**oldValue** `unknown`

La valeur avant.

**newValue** `unknown`

La valeur après.

**options** `object`

Plus de détails pour certaines sortes d’entrées. Chaque champ peut manquer ; les nombres et les jours sont du texte, tels que Discord les envoie.

**champs**

**applicationId** `Snowflake`

L’identifiant de l’app dont les permissions ont été changées.

**autoModerationRuleName** `string`

Le nom de la règle de modération automatique qui s’est déclenchée.

**autoModerationRuleTriggerType** `string`

Ce qui déclenche cette règle.

**channelId** `Snowflake`

Le salon où c’est arrivé.

**count** `string`

Combien de choses ont été touchées.

**deleteMemberDays** `string`

Au bout de combien de jours d’inactivité les membres ont été retirés.

**id** `Snowflake`

L’identifiant du rôle ou du membre dont le remplacement a changé.

**membersRemoved** `string`

Combien de membres le nettoyage a retirés.

**messageId** `Snowflake`

L’identifiant du message épinglé ou désépinglé.

**roleName** `string`

Le nom du rôle, quand `type` vaut `"0"`.

**type** `string`

De qui le remplacement a changé : `"0"` un rôle, `"1"` un membre.

**integrationType** `string`

La sorte d’intégration qui l’a fait.

**status** `string`

Le nouveau statut du salon vocal.

**users** `object[]` *required*

Les utilisateurs auxquels font référence les entrées (données simples).

**webhooks** `object[]` *required*

Les webhooks auxquels font référence les entrées (données simples).

**threads** `object[]` *required*

Les fils auxquels font référence les entrées (données simples).

**integrations** `object[]` *required*

Les intégrations auxquelles font référence les entrées, en partie (données simples).

**applicationCommands** `object[]` *required*

Les commandes auxquelles font référence les entrées (données simples).

**autoModerationRules** `AutoModerationRule[]` *required*

Les règles de modération automatique auxquelles font référence les entrées.

**guildScheduledEvents** `ScheduledEvent[]` *required*

Les événements programmés auxquels font référence les entrées.

[Documentation de Discord](https://docs.discord.com/developers/resources/audit-log#audit-log-object-audit-log-structure)

## AuditLogEntry

Une chose qu’un modérateur ou un bot a faite sur un serveur : quoi, par qui, sur quoi, et ce qui a changé. `auditLogEntryCreate` en donne une ; ses champs sont ceux d’une entrée de [`AuditLog`](#auditlog) : `id`, `actionType`, `targetId`, `userId`, `reason`, `changes` et `options`.

[Documentation de Discord](https://docs.discord.com/developers/resources/audit-log#audit-log-entry-object-audit-log-entry-structure)

## ScheduledEvent

Un événement programmé sur un serveur : quand il a lieu, où, et à quelle fréquence. `guild.fetchScheduledEvents()` en renvoie une liste, `guild.createScheduledEvent()` celui qu’il a créé.

**id** `Snowflake` *required*

L’identifiant de l’événement.

**guildId** `Snowflake` *required*

L’identifiant du serveur.

**channelId** `Snowflake | null` *required*

L’identifiant du salon où a lieu l’événement ; `null` quand il a lieu hors de Discord.

**creatorId** `Snowflake | null`

L’identifiant de l’utilisateur qui a créé l’événement.

**name** `string` *required*

Le nom de l’événement (1 à 100 caractères).

**description** `string | null`

La description de l’événement (1 à 1000 caractères).

**scheduledStartTime** `string` *required*

Quand l’événement commence.

**scheduledEndTime** `string | null` *required*

Quand l’événement se termine ; toujours réglé pour un événement hors de Discord.

**privacyLevel** `2` *required*

Qui peut voir l’événement : `2`, les membres du serveur.

**status** `1 | 2 | 3 | 4` *required*

`1` programmé, `2` en cours, `3` terminé, `4` annulé.

**entityType** `1 | 2 | 3` *required*

Où il a lieu : `1` un salon de conférence, `2` un salon vocal, `3` hors de Discord.

**entityId** `Snowflake | null` *required*

L’identifiant de ce à quoi l’événement est lié, quand il y en a un.

**entityMetadata** `object | null` *required*

Plus de détails sur le lieu.

**champs**

**location** `string`

Où a lieu l’événement, pour un événement hors de Discord (1 à 100 caractères).

**creator** `object`

L’utilisateur qui a créé l’événement (données simples).

**userCount** `number`

Combien d’utilisateurs sont intéressés par l’événement.

**image** `string | null`

Le hash de l’image de couverture.

**recurrenceRule** `object | null` *required*

À quelle fréquence l’événement se répète ; `null` quand il n’a lieu qu’une fois.

**champs**

**start** `string` *required*

Quand la répétition commence.

**end** `string | null` *required*

Quand la répétition se termine.

**frequency** `0 | 1 | 2 | 3` *required*

`0` chaque année, `1` chaque mois, `2` chaque semaine, `3` chaque jour.

**interval** `number` *required*

L’espacement entre deux occurrences, en unités de `frequency` : chaque semaine avec un intervalle de `2` veut dire une semaine sur deux.

**byWeekday** `number[] | null` *required*

Les jours de la semaine où il se répète, de `0` (lundi) à `6` (dimanche).

**byNWeekday** `object[] | null` *required*

Des jours d’une semaine donnée du mois : `{ n, day }`, avec `n` la semaine (1 à 5) et `day` le jour.

**byMonth** `number[] | null` *required*

Les mois où il se répète, de `1` (janvier) à `12` (décembre).

**byMonthDay** `number[] | null` *required*

Les jours du mois où il se répète.

**byYearDay** `number[] | null` *required*

Les jours de l’année où il se répète (1 à 364).

**count** `number | null` *required*

Combien de fois il se répète avant de s’arrêter.

[Documentation de Discord](https://docs.discord.com/developers/resources/guild-scheduled-event#guild-scheduled-event-object-guild-scheduled-event-structure)

## AutoModerationRule

Une règle que Discord applique tout seul aux messages d’un serveur : ce qui la déclenche, et ce qu’elle fait alors. `guild.fetchAutoModerationRules()` en renvoie une liste.

**id** `Snowflake` *required*

L’identifiant de la règle.

**guildId** `Snowflake` *required*

L’identifiant du serveur.

**name** `string` *required*

Le nom de la règle.

**creatorId** `Snowflake` *required*

L’identifiant de l’utilisateur qui a créé la règle.

**eventType** `1 | 2` *required*

Quand la règle est vérifiée : `1` un membre envoie ou modifie un message, `2` un membre modifie son profil.

**triggerType** `1 | 3 | 4 | 5 | 6` *required*

Ce qui la déclenche : `1` des mots d’une liste, `3` du spam, `4` des mots d’une liste prédéfinie de Discord, `5` trop de mentions, `6` des mots d’une liste dans le profil d’un membre.

**triggerMetadata** `object` *required*

Les détails du déclencheur. Les champs présents dépendent de `triggerType`.

**champs**

**keywordFilter** `string[]`

Les mots ou parties de mots recherchés (1000 au plus).

**regexPatterns** `string[]`

Les expressions régulières testées sur le contenu (10 au plus).

**presets** `number[]`

Les listes prédéfinies de Discord recherchées : `1` grossièretés, `2` contenu sexuel, `3` insultes.

**allowList** `string[]`

Les mots qui ne déclenchent jamais la règle (100 ou 1000 au plus, selon le déclencheur).

**mentionTotalLimit** `number`

Combien de rôles et d’utilisateurs différents un message peut mentionner (50 au plus).

**mentionRaidProtectionEnabled** `boolean`

Si les raids de mentions sont détectés tout seuls.

**actions** `object[]` *required*

Ce qui se passe quand la règle se déclenche.

**champs d’une action**

**type** `1 | 2 | 3 | 4` *required*

`1` bloquer le message, `2` envoyer une alerte dans un salon, `3` exclure temporairement le membre, `4` empêcher le membre d’utiliser le texte, le vocal et les autres interactions.

**metadata** `object`

Ce dont l’action a besoin.

**champs**

**channelId** `Snowflake`

Le salon où l’alerte est envoyée.

**durationSeconds** `number`

Combien de temps dure l’exclusion, en secondes.

**customMessage** `string | null`

Ce qui est dit au membre quand son message est bloqué.

**enabled** `boolean` *required*

Si la règle est active.

**exemptRoles** `Snowflake[]` *required*

Les identifiants des rôles que la règle ignore (20 au plus).

**exemptChannels** `Snowflake[]` *required*

Les identifiants des salons que la règle ignore (50 au plus).

[Documentation de Discord](https://docs.discord.com/developers/resources/auto-moderation#auto-moderation-rule-object-auto-moderation-rule-structure)

## Sticker

Un sticker : celui d’un serveur, ou un sticker standard d’un pack. `guild.fetchStickers()` renvoie ceux d’un serveur.

**id** `Snowflake` *required*

L’identifiant du sticker.

**packId** `Snowflake`

Pour un sticker standard, l’identifiant de son pack.

**name** `string` *required*

Le nom du sticker.

**description** `string | null` *required*

La description du sticker.

**tags** `string` *required*

Les mots qui suggèrent le sticker pendant la saisie (200 caractères au plus).

**type** `1 | 2` *required*

`1` un sticker standard d’un pack, `2` un sticker d’un serveur.

**formatType** `1 | 2 | 3 | 4` *required*

Le format de l’image : `1` PNG, `2` APNG, `3` Lottie, `4` GIF.

**available** `boolean`

Si le sticker d’un serveur peut être utilisé ; `false` quand le serveur a perdu les boosts nécessaires.

**guildId** `Snowflake`

L’identifiant du serveur à qui appartient le sticker.

**user** `object`

L’utilisateur qui a téléversé le sticker (données simples).

**sortValue** `number`

La place d’un sticker standard dans son pack.

Pour en envoyer un, passez son identifiant dans les `stickers` d’un message : voir [Options des messages](https://www.chapterjs.org/fr/reference/message-options.md).

[Documentation de Discord](https://docs.discord.com/developers/resources/sticker#sticker-object-sticker-structure)

## VoiceState

Où se trouve quelqu’un en vocal, et comment : micro coupé, casque coupé, en stream... Les [événements vocaux](https://www.chapterjs.org/fr/reference/events.md#voicejoin) en donnent un.

**channelId** `Snowflake | null` *required*

L’identifiant du salon vocal où se trouve la personne.

**userId** `Snowflake` *required*

L’identifiant de la personne.

**sessionId** `string` *required*

L’identifiant de sa session vocale.

**deaf** `boolean` *required*

Si le serveur lui a coupé le son.

**mute** `boolean` *required*

Si le serveur lui a coupé le micro.

**selfDeaf** `boolean` *required*

Si la personne a coupé son casque.

**selfMute** `boolean` *required*

Si la personne a coupé son micro.

**selfStream** `boolean`

Si la personne diffuse avec Go Live.

**selfVideo** `boolean` *required*

Si sa caméra est allumée.

**suppress** `boolean` *required*

Si la personne ne peut pas parler (dans un salon de conférence, un membre du public).

**requestToSpeakTimestamp** `string | null` *required*

Quand la personne a demandé la parole, dans un salon de conférence.

[Documentation de Discord](https://docs.discord.com/developers/resources/voice#voice-state-object)

## UserPresence

Si quelqu’un est en ligne et ce qu’il fait : son statut, ses activités, et sur quels appareils. `presenceUpdate` en donne une.

**status** `'online' | 'idle' | 'dnd' | 'offline'` *required*

Son statut.

**activities** `object[]` *required*

Ce que fait la personne, la première étant ce que Discord affiche.

**champs d’une activité**

**name** `string` *required*

Le nom de l’activité : le jeu, le service de musique...

**type** `0 | 1 | 2 | 3 | 4 | 5` *required*

`0` joue, `1` diffuse, `2` écoute, `3` regarde, `4` un statut personnalisé, `5` participe à une compétition.

**url** `string | null`

Le lien d’un stream.

**createdAt** `number` *required*

Quand l’activité a commencé, en millisecondes depuis 1970.

**timestamps** `object`

Quand la partie a commencé ou finit : `start` et `end`, en millisecondes depuis 1970.

**applicationId** `Snowflake`

L’identifiant de l’application du jeu.

**details** `string | null`

Ce que la personne y fait.

**state** `string | null`

L’état de son groupe, ou le texte d’un statut personnalisé.

**emoji** `object | null`

L’emoji d’un statut personnalisé (données simples).

**party** `object`

Son groupe : `id`, et `size` sous la forme `[actuel, max]`.

**assets** `object`

Les images de l’activité et leurs textes (données simples).

**instance** `boolean`

Si c’est une session de jeu instanciée.

**flags** `number`

Ce que contient l’activité, en champ de bits.

**clientStatus** `object` *required*

Son statut sur chaque sorte d’appareil utilisé ; un appareil non utilisé est absent.

**champs**

**desktop** `string`

Sur une application d’ordinateur.

**mobile** `string`

Sur un téléphone.

**web** `string`

Dans un navigateur.

**vr** `string`

En réalité virtuelle.

[Documentation de Discord](https://docs.discord.com/developers/events/gateway-events#presence-update-presence-update-event-fields)


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