Maison  >  Questions et réponses  >  le corps du texte

Comment suivre les utilisateurs qui ont supprimé des messages dans discord.js ?

<p>Je viens de commencer à apprendre à créer un robot Discord et j'essaie de comprendre comment enregistrer qui a supprimé un message. </p> <p>J'ai essayé <code>message.author</code>, mais bien sûr, cela enregistre qui a envoyé le message, et je ne connais pas grand chose de la syntaxe, donc je n'ai rien essayé d'autre. </p>
P粉760675452P粉760675452417 Il y a quelques jours580

répondre à tous(1)je répondrai

  • P粉709307865

    P粉7093078652023-08-30 15:32:16

    Vous pouvez utiliser le messageDeleteEvent qui se déclenche lorsqu'un message est supprimé. Vous pouvez consulter le journal d'audit pour voir si un utilisateur a supprimé les messages d'autres utilisateurs.

    Tout d'abord, assurez-vous d'avoir l'intention requise : GuildsGuildMembersGuildMessages。您还需要partialsChannelMessageGuildMemberpour gérer les messages envoyés avant la mise en ligne de votre bot.

    Une fois qu'un message est supprimé, vous pouvez utiliser la méthode fetchAuditLogs pour obtenir le journal d'audit du serveur sur lequel se trouvait le message supprimé.

    const client = new Client({
      intents: [
        GatewayIntentBits.Guilds,
        GatewayIntentBits.GuildMembers,
        GatewayIntentBits.GuildMessages,
      ],
      partials: [
        Partials.Channel,
        Partials.GuildMember,
        Partials.Message,
      ],
    });
    
    client.on('messageDelete', async (message) => {
      const logs = await message.guild.fetchAuditLogs({
        type: AuditLogEvent.MessageDelete,
        limit: 1,
      });
      // logs.entries is a collection, so grab the first one
      const firstEntry = logs.entries.first();
      const { executorId, target, targetId } = firstEntry;
      // Ensure the executor is cached
      const user = await client.users.fetch(executorId);
    
      if (target) {
        // The message object is in the cache and you can provide a detailed log here
        console.log(`A message by ${target.tag} was deleted by ${user.tag}.`);
      } else {
        // The message object was not cached, but you can still retrieve some information
        console.log(`A message with id ${targetId} was deleted by ${user.tag}.`);
      }
    });
    

    Dans discord.js v14.8+, il y a un nouvel événement GuildAuditLogEntryCreate。您可以在收到相应的审核日志事件(GuildAuditLogEntryCreate)时立即找出谁删除了消息。它需要启用GuildModerationIntent.

    const { AuditLogEvent, Events } = require('discord.js');
    
    client.on(Events.GuildAuditLogEntryCreate, async (auditLog) => {
      // Define your variables
      const { action, executorId, target, targetId } = auditLog;
    
      // Check only for deleted messages
      if (action !== AuditLogEvent.MessageDelete) return;
    
      // Ensure the executor is cached
      const user = await client.users.fetch(executorId);
    
      if (target) {
        // The message object is in the cache and you can provide a detailed log here
        console.log(`A message by ${target.tag} was deleted by ${user.tag}.`);
      } else {
        // The message object was not cached, but you can still retrieve some information
        console.log(`A message with id ${targetId} was deleted by ${user.tag}.`);
      }
    });
    

    répondre
    0
  • Annulerrépondre