Guide discord.js
Sujets populaires

Fils de Discussion

Les fils de discussion peuvent être considérés comme des sous-canaux temporaires à l'intérieur d'un canal existant, pour aider à mieux organiser la conversation dans un canal occupé.

Événements de passerelle liés aux fils

Vous pouvez utiliser le garde de type ThreadChannel#isThread pour vous assurer qu'un canal est un ThreadChannel !

Les fils de discussion introduisent un certain nombre de nouveaux événements de passerelle, répertoriés ci-dessous :

  • Client#threadCreate : Émis chaque fois qu'un fil est créé ou quand l'utilisateur client est ajouté à un fil.
  • Client#threadDelete : Émis chaque fois qu'un fil est supprimé.
  • Client#threadUpdate : Émis chaque fois qu'un fil est mis à jour (par exemple, changement de nom, changement d'état d'archivage, changement d'état verrouillé).
  • Client#threadListSync : Émis chaque fois que l'utilisateur client a accès à un canal de texte ou d'actualités contenant des fils.
  • Client#threadMembersUpdate : Émis chaque fois que des membres sont ajoutés ou supprimés d'un fil. Nécessite l'intent privilégié GuildMembers.
  • Client#threadMemberUpdate : Émis chaque fois que le membre du fil de l'utilisateur client est mis à jour.

Création et suppression de fils

Les fils de discussion sont créés et supprimés à l'aide de GuildTextThreadManager d'un canal de texte ou d'actualités. Pour créer un fil, vous appelez la méthode GuildTextThreadManager#create :

const thread = await channel.threads.create({
	name: 'food-talk',
	autoArchiveDuration: ThreadAutoArchiveDuration.OneHour,
	reason: 'Needed a separate thread for food',
});

console.log(`Created thread: ${thread.name}`);

Pour supprimer un fil, utilisez la méthode ThreadChannel#delete :

const thread = channel.threads.cache.find((x) => x.name === 'food-talk');
await thread.delete(); 

Rejoindre et quitter des fils

Pour rejoindre votre client à un ThreadChannel, utilisez la méthode ThreadChannel#join :

const thread = channel.threads.cache.find((x) => x.name === 'food-talk');
if (thread.joinable) await thread.join(); 

Et pour quitter un fil, utilisez ThreadChannel#leave ;

const thread = channel.threads.cache.find((x) => x.name === 'food-talk');
await thread.leave(); 

Archivage, désarchivage et verrouillage des fils

Un fil peut être actif ou archivé. Le changement d'un fil archivé à actif s'appelle désarchiver le fil. Les fils dont locked est défini sur true ne peuvent être désarchivés que par un membre ayant la permission ManageThreads.

Les fils sont automatiquement archivés après l'inactivité. L'"activité" est définie comme l'envoi d'un message, le désarchivage d'un fil ou le changement du temps d'archivage automatique.

Pour archiver ou désarchiver un fil, utilisez la méthode ThreadChannel#setArchived et transmettez un paramètre booléen :

const thread = channel.threads.cache.find((x) => x.name === 'food-talk');
await thread.setArchived(true); // archived
await thread.setArchived(false); // unarchived

Le même principe s'applique au verrouillage et au déverrouillage d'un fil via la méthode ThreadChannel#setLocked :

const thread = channel.threads.cache.find((x) => x.name === 'food-talk');
await thread.setLocked(true); // locked
await thread.setLocked(false); // unlocked

Fils publics et privés

Les fils publics sont visibles par tous ceux qui peuvent voir le canal parent du fil. Les fils publics peuvent être créés avec la méthode GuildTextThreadManager#create.

const thread = await channel.threads.create({
	name: 'food-talk',
	autoArchiveDuration: ThreadAutoArchiveDuration.OneHour,
	reason: 'Needed a separate thread for food',
});

console.log(`Created thread: ${thread.name}`);

Ils peuvent également être créés à partir d'un message existant avec la méthode Message#startThread, mais seront "orphelins" si ce message est supprimé. Le fil n'est pas supprimé avec le message et sera toujours disponible via la liste des fils du canal !

const thread = await message.startThread({
	name: 'food-talk',
	autoArchiveDuration: ThreadAutoArchiveDuration.OneHour,
	reason: 'Needed a separate thread for food',
});

console.log(`Created thread: ${thread.name}`);
Le fil créé et le message dont il est issu partageront le même ID.

Les fils privés ne peuvent être créés que sur des canaux texte. Les fils privés ne peuvent initialement être vus que par l'utilisateur qui les crée ainsi que par les modérateurs ayant la permission ManageThreads. Les utilisateurs mentionnés dans les fils sont ajoutés au fil ! Ceci est également vrai pour les rôles avec peu de membres de rôle. Les notifications pour @here et @everyone n'affecteront que les membres du fil et n'ajouteront personne.

Pour créer un fil privé, utilisez GuildTextThreadManager#create et transmettez ChannelType.PrivateThread en tant que type. Les canaux publics sont par défaut, d'où le passage de ChannelType.PublicThread n'est pas nécessaire dans l'exemple ci-dessus :

const { ChannelType, ThreadAutoArchiveDuration } = require('discord.js');

const thread = await channel.threads.create({
	name: 'mod-talk',
	autoArchiveDuration: ThreadAutoArchiveDuration.OneHour,
	type: ChannelType.PrivateThread, 
	reason: 'Needed a separate thread for moderation',
});

console.log(`Created thread: ${thread.name}`);
Vous ne pouvez pas créer de fils privés sur un message existant.

Ajout et suppression de membres

Vous pouvez ajouter et supprimer des membres vers et depuis un canal de fil.

Pour ajouter un membre à un fil, utilisez la méthode ThreadMemberManager#add :

const thread = channel.threads.cache.find((x) => x.name === 'food-talk');
await thread.members.add('140214425276776449'); 

Et pour supprimer un membre d'un fil, utilisez ThreadMemberManager#remove :

const thread = channel.threads.cache.find((x) => x.name === 'food-talk');
await thread.members.remove('140214425276776449'); 

Envoi de messages aux fils avec webhooks

Il est possible pour un webhook construit sur le canal parent d'envoyer des messages aux fils du canal. Aux fins de cet exemple, on suppose qu'un seul webhook existe déjà pour ce canal (Plus précisément, qu'il n'y a pas de canaux suivis ou de webhooks gérés. Ces types de webhooks ne peuvent pas être accédés par votre application). Si vous souhaitez en savoir plus sur les webhooks, consultez notre guide webhook.

const webhooks = await channel.fetchWebhooks();
const webhook = webhooks.first();

await webhook.send({
	content: "Look ma! I'm in a thread!",
	threadId: '123456789012345678', 
});

Et voilà ! Maintenant vous savez tout ce qu'il y a à savoir sur le travail avec les fils en utilisant discord.js !