generated at
メッセージを削除したユーザーを取得するサンプル

messageDeleteイベントが発生したときに、サーバー監査ログからメッセージを削除したユーザーの情報を取り出します。
この方法は使う監査ログ機能はサーバー限定なのでDMチャンネルで発生したものには対応できません。

注意
ボットが起動される前からあるメッセージを削除してもmessageDeleteイベントは発生しないっぽいInkoHX
partials に MESSAGE を指定すれば発生するのでは (憶測) kage-sakura
「”メッセージを削除した人”を直接取得する」わけではなくて、メッセージが削除されたときに「"直近でメッセージを削除した人"を取得する」方法なので絶対的な信頼性は無いかもしれないyuta0801
.target を使って削除された対象を確認すれば確実かも
それからまれに監査ログが正しく記録されないことがあるらしいyuta0801
自分自身でメッセージを消した場合は、監査ログには記録されなかった。InkoHX

下記はコード
js
const client = new Client({ intents: /* ... */ , partials: ['USER', 'MESSAGE'] }); 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}のメッセージを削除しました。`) })