メッセージを削除したユーザーを取得するサンプル
注意
partials に MESSAGE を指定すれば発生するのでは (憶測) kage-sakura.icon
「”メッセージを削除した人”を直接取得する」わけではなくて、メッセージが削除されたときに「"直近でメッセージを削除した人"を取得する」方法なので絶対的な信頼性は無いかもしれないyuta0801.icon
.targetを使って削除された対象を確認すれば確実かも
それからまれに監査ログが正しく記録されないことがあるらしいyuta0801.icon
自分自身でメッセージを消した場合は、監査ログには記録されなかった。InkoHX.icon
下記はコード
code:js
const client = new Client({
intents: /* ... */ ,
});
client.on('messageDelete', async message => {
if (!message.guild) return // メッセージが送信された場所がサーバーでなければ処理しない。
// サーバーの監査ログからメッセージが削除されたものだけを取得。
const logs = await message.guild.fetchAuditLogs({ type: 'MESSAGE_DELETE' })
const log = logs.entries.find(entry => {
const targetId = entry.target?.id
if (!targetId || targetId !== message.id) return
const channelId = entry.target?.channelId ?? entry.target?.channel_id
return channelId && channelId === message.channelId
})
const executor = log?.executor ?? message.author // メッセージを削除したユーザーのオブジェクト
// 削除されたメッセージがあったチャンネルにメッセージを削除したユーザーのタグとメッセージを送ったユーザのタグを送信
return message.channel.send(${executor.tag}が${message.author.tag}のメッセージを削除しました。)
})