Как в discord.js отследить удаление сообщения от его автора с использованием библиотеки?

Как можно улучшить код для проверки удаления сообщений в каналах через событие Events.GuildAuditLogEntryCreate таким образом, чтобы оно также отслеживало удаление сообщения самим автором?
  • 18 сентября 2023 г. 6:56
Ответы на вопрос 2
В discord.js для отслеживания удаления сообщения от его автора можно использовать событие `messageDelete` и проверять, совпадает ли ID автора сообщения с ID бота. 

```javascript
client.on('messageDelete', async (message) => {
  if (message.author.id === client.user.id) {
    // Сообщение было удалено ботом
    console.log(`Сообщение от бота удалено: ${message.content}`);
  } else {
    // Сообщение было удалено самим автором
    console.log(`Сообщение от автора удалено: ${message.content}`);
  }
});
```

Чтобы улучшить код и расширить функциональность для проверки удаления сообщений в каналах, можно использовать событие `Events.GuildAuditLogEntryCreate`, чтобы получить дополнительную информацию о пользователе, который удалил сообщение. Это событие вызывается при создании записи в журнале аудита сервера, включая удаление сообщений.

```javascript
client.on('guildAuditLogEntryCreate', async (entry) => {
  if (entry.action === 'MESSAGE_DELETE') {
    const { executor, target } = entry;

    if (executor.id === client.user.id) {
      // Сообщение было удалено ботом
      console.log(`Сообщение от бота удалено: ${target.content}`);
    } else {
      // Сообщение было удалено другим пользователем
      console.log(`Сообщение от пользователя ${executor.username} удалено: ${target.content}`);
    }
  }
});
```

Таким образом, использование события `Events.GuildAuditLogEntryCreate` позволяет отслеживать удаление сообщений как ботом, так и другими пользователями.
Невозможно однозначно определить, удалил ли сообщение его автор. Чтобы получать уведомление о удалении сообщений, можно прослушивать событие "MessageDelete", однако условиями для получения этого уведомления являются наличие сообщения в кэше или включение параметра "парциальные сообщения" в настройках клиента.
Похожие вопросы