Webhooks
Les Webhooks peuvent envoyer des messages à un canal de texte sans avoir à se connecter en tant que bot. Ils peuvent également récupérer, éditer et supprimer leurs propres messages. Il y a une variété de méthodes dans discord.js pour interagir avec les webhooks. Dans cette section, vous apprendrez comment créer, récupérer, éditer et utiliser les webhooks.
Qu'est-ce qu'un webhook
Les webhooks sont un utilitaire utilisé pour envoyer des messages aux canaux texte sans avoir besoin d'une application Discord. Les webhooks sont utiles pour permettre à quelque chose d'envoyer des messages sans nécessiter une application Discord. Vous pouvez également éditer ou supprimer directement les messages que vous avez envoyés via le webhook. Il existe deux structures pour utiliser cette fonctionnalité : Webhook et WebhookClient. WebhookClient est une version étendue d'un Webhook, qui vous permet d'envoyer des messages par son intermédiaire sans avoir besoin d'un client bot.
Si vous souhaitez en savoir plus sur l'utilisation des webhooks via l'API sans discord.js, vous pouvez le lire ici.
Détection des messages de webhook
Les bots reçoivent les messages de webhook dans un canal texte comme d'habitude. Vous pouvez détecter si un webhook a envoyé le message en vérifiant si Message.webhookId n'est pas null. Dans cet exemple, nous revenons si un webhook a envoyé le message.
if (message.webhookId) return;Si vous souhaitez obtenir l'objet webhook qui a envoyé le message, vous pouvez utiliser Message#fetchWebhook.
Récupération des webhooks
Récupération de tous les webhooks d'une guilde
Si vous souhaitez obtenir tous les webhooks d'une guilde, vous pouvez utiliser Guild#fetchWebhooks. Cela retournera une Promise qui se résoudra en une Collection de Webhooks.
Récupération des webhooks d'un canal
Les webhooks appartenant à un canal peuvent être récupérés en utilisant TextChannel#fetchWebhooks. Cela retournera une Promise qui se résoudra en une Collection de Webhooks. Une collection sera retournée même si le canal ne contient qu'un seul webhook. Si vous êtes sûr que le canal ne contient qu'un seul webhook, vous pouvez utiliser Collection#first sur la Collection pour obtenir le webhook.
Récupération d'un seul webhook
Utilisation du client
Vous pouvez récupérer un webhook spécifique en utilisant son id avec Client#fetchWebhook. Vous pouvez obtenir l'id du webhook en regardant son lien, le numéro après https://discord.com/api/webhooks/ est l'id, et la partie après cela est le token.
Utilisation du constructeur WebhookClient
Si vous n'utilisez pas de client bot, vous pouvez obtenir un webhook en créant une nouvelle instance de WebhookClient et en transmettant l'id et le token au constructeur. Ces identifiants ne nécessitent pas d'avoir une application bot, mais ils offrent également des informations limitées au lieu de les récupérer en utilisant un client autorisé.
const webhookClient = new WebhookClient({ id: 'id', token: 'token' }); Vous pouvez également passer juste une url :
const webhookClient = new WebhookClient({ url: 'https://discord.com/api/webhooks/id/token' }); Création de webhooks
Création de webhooks via les paramètres du serveur
Vous pouvez créer des webhooks directement via le client Discord. Allez dans Paramètres du serveur, et vous verrez un onglet Intégrations.
Si vous avez déjà créé un webhook, l'onglet webhooks ressemblera à ceci ; vous devrez cliquer sur le bouton Voir les webhooks.
Une fois là, cliquez sur le bouton Créer un webhook / Nouveau webhook ; cela créera un webhook. À partir de là, vous pouvez éditer le canal, le nom et l'avatar. Copiez le lien, la première partie est l'id, et la deuxième est le token.
Création de webhooks avec discord.js
Les webhooks peuvent être créés avec la méthode TextChannel#createWebhook.
channel
.createWebhook({
name: 'Some-username',
avatar: 'https://i.imgur.com/AfFp7pu.png',
})
.then((webhook) => console.log(`Created webhook ${webhook}`))
.catch(console.error);Édition de webhooks
Vous pouvez éditer les Webhooks et WebhookClients pour modifier leur nom, avatar et canal en utilisant Webhook#edit.
webhook
.edit({
name: 'Some-username',
avatar: 'https://i.imgur.com/AfFp7pu.png',
channel: '222197033908436994',
})
.then((webhook) => console.log(`Edited webhook ${webhook}`))
.catch(console.error);Utilisation de webhooks
Les webhooks peuvent envoyer des messages aux canaux texte, ainsi que récupérer, éditer et supprimer les leurs. Ces méthodes sont les mêmes pour Webhook et WebhookClient.
Envoi de messages
Les webhooks, comme les bots, peuvent envoyer jusqu'à 10 embeds par message. Ils peuvent également envoyer des pièces jointes et du contenu normal. La méthode Webhook#send est très similaire à celle utilisée pour envoyer un message à un canal texte. Les webhooks peuvent également choisir comment le nom d'utilisateur et l'avatar apparaîtront lorsqu'ils enverront le message.
Exemple utilisant un WebhookClient :
const { EmbedBuilder, WebhookClient } = require('discord.js');
const { webhookId, webhookToken } = require('./config.json');
const webhookClient = new WebhookClient({ id: webhookId, token: webhookToken });
const embed = new EmbedBuilder().setTitle('Some Title').setColor(0x00ffff);
webhookClient.send({
content: 'Webhook test',
username: 'some-username',
avatarURL: 'https://i.imgur.com/AfFp7pu.png',
embeds: [embed],
});Essayez de trouver un webhook dont votre bot connaît le token. Cela garantit que votre bot peut exécuter le webhook plus tard.
const { Client, EmbedBuilder, Events, GatewayIntentBits } = require('discord.js');
const { token } = require('./config.json');
const client = new Client({ intents: [GatewayIntentBits.Guilds] });
const embed = new EmbedBuilder().setTitle('Some Title').setColor(0x00ffff);
client.once(Events.ClientReady, async () => {
const channel = client.channels.cache.get('123456789012345678');
try {
const webhooks = await channel.fetchWebhooks();
const webhook = webhooks.find((wh) => wh.token);
if (!webhook) {
return console.log('Aucun webhook trouvé que je puisse utiliser !');
}
await webhook.send({
content: 'Webhook test',
username: 'some-username',
avatarURL: 'https://i.imgur.com/AfFp7pu.png',
embeds: [embed],
});
} catch (error) {
console.error('Erreur lors de l\'envoi d\'un message : ', error);
}
});
client.login(token);Récupération de messages
Vous pouvez utiliser Webhook#fetchMessage pour récupérer les messages précédemment envoyés par le Webhook.
const message = await webhookClient.fetchMessage('123456789012345678'); Édition de messages
Vous pouvez utiliser Webhook#editMessage pour éditer les messages précédemment envoyés par le Webhook.
const message = await webhook.editMessage('123456789012345678', {
content: 'Édit !',
embeds: [embed],
});Suppression de messages
Vous pouvez utiliser Webhook#deleteMessage pour supprimer les messages précédemment envoyés par le Webhook.
await webhookClient.deleteMessage('123456789012345678');