Journaux d'audit
Travailler avec les Journaux d'Audit
Contexte Rapide
Les journaux d'audit sont un excellent outil de modération offert par Discord pour savoir ce qui s'est passé sur un serveur et généralement par qui. L'utilisation des journaux d'audit nécessite la permission ViewAuditLog. Les journaux d'audit peuvent être récupérés sur un serveur, ou ils peuvent être reçus via l'événement gateway guildAuditLogEntryCreate qui nécessite l'intent GuildModeration.
Il y a plusieurs cas où vous pourriez utiliser les journaux d'audit. Ce guide se limitera aux cas d'utilisation les plus courants. N'hésitez pas à consulter la page Discord API pertinente pour plus d'informations.
N'oubliez pas que ces exemples explorent un cas simple et ne sont en aucun cas exhaustifs. Leur but est de vous enseigner comment fonctionnent les journaux d'audit, et l'expansion de ces exemples sera probablement nécessaire pour adapter votre cas d'utilisation.
Récupération des Journaux d'Audit
Commençons par examiner la méthode Guild#fetchAuditLogs et comment l'utiliser. Comme beaucoup de méthodes discord.js, elle retourne une Promise contenant l'objet GuildAuditLogs. Cet objet a une propriété, entries, qui contient une Collection d'objets GuildAuditLogsEntry, et par conséquent, les informations que vous voulez récupérer.
Voici la récupération la plus basique pour regarder quelques entrées.
const fetchedLogs = await guild.fetchAuditLogs();
const firstEntry = fetchedLogs.entries.first();Simple, non ? Maintenant, regardons comment utiliser ses options :
const { AuditLogEvent } = require('discord.js');
const fetchedLogs = await guild.fetchAuditLogs({
type: AuditLogEvent.InviteCreate,
limit: 1,
});
const firstEntry = fetchedLogs.entries.first();Ceci retournera la première entrée où une invitation a été créée. Vous avez utilisé limit: 1 ici pour spécifier une seule entrée.
Réception des Journaux d'Audit
Les journaux d'audit peuvent être reçus via l'événement gateway guildAuditLogEntryCreate. C'est la meilleure façon de recevoir les journaux d'audit si vous voulez les monitorer. Dès qu'un message est supprimé, ou qu'une invitation ou un emoji est créé, votre application recevra une instance de cet événement. Un cas d'utilisation courant est de découvrir qui a effectué l'action qui a causé l'événement de journal d'audit.
Qui a supprimé un message ?
L'un des cas d'utilisation les plus courants des journaux d'audit est de comprendre qui a supprimé un message sur un serveur Discord. Si un utilisateur a supprimé le message d'un autre utilisateur, vous pouvez découvrir qui l'a fait dès que vous recevez l'événement de journal d'audit correspondant.
const { AuditLogEvent, Events } = require('discord.js');
client.on(Events.GuildAuditLogEntryCreate, async (auditLog) => {
// Définissez vos variables.
// Les informations supplémentaires ici seront le canal.
const { action, extra: channel, executorId, targetId } = auditLog;
// Vérifiez uniquement les messages supprimés.
if (action !== AuditLogEvent.MessageDelete) return;
// Assurez-vous que l'exécuteur est en cache.
const executor = await client.users.fetch(executorId);
// Assurez-vous que l'auteur dont le message a été supprimé est en cache.
const target = await client.users.fetch(targetId);
// Enregistrez le résultat.
console.log(`Un message de ${target.tag} a été supprimé par ${executor.tag} dans ${channel}.`);
});Avec ceci, vous avez maintenant un journal très simple vous indiquant qui a supprimé un message d'une autre personne.
Qui a exclu un utilisateur ?
C'est très similaire à l'exemple ci-dessus.
const { AuditLogEvent, Events } = require('discord.js');
client.on(Events.GuildAuditLogEntryCreate, async (auditLog) => {
// Définissez vos variables.
const { action, executorId, targetId } = auditLog;
// Vérifiez uniquement les utilisateurs exclus.
if (action !== AuditLogEvent.MemberKick) return;
// Assurez-vous que l'exécuteur est en cache.
const executor = await client.users.fetch(executorId);
// Assurez-vous que le membre du serveur exclu est en cache.
const kickedUser = await client.users.fetch(targetId);
// Maintenant vous pouvez enregistrer le résultat !
console.log(`${kickedUser.tag} a été exclu par ${executor.tag}.`);
});Si vous voulez vérifier qui a banni un utilisateur, c'est le même exemple que ci-dessus sauf que l'action devrait être AuditLogEvent.MemberBanAdd. Vous pouvez vérifier le reste des types sur la documentation discord-api-types.