スパム対策をするサンプル
いくつか方法があるが、まずは yuto0214w.icon が一番シンプルだと思った方法を書く。
Date.now() を使った例
code:js
const lastSendTime = {}
const prefix = '!'
client.on('messageCreate', msg => {
if (msg.author.bot || !msg.content.startsWith(prefix)) return
return msg.reply('スパムしないでください!')
} else {
}
// ここにコード書いてく
})
Date.now() は現在 (例だとメッセージを受け取った時) の時間
Date.now() - メッセージが送られた時の時間 をすることでその間の時間を ms 単位で得られる
チャンネルごとにメッセージが送られた時の時間を保存しておいて、新たにメッセージが送られたときにその前のメッセージが送られた時の時間と比較をしている
もっと分かりやすい表現あったら教えてください yuto0214w.icon
code:js
const spaminterval = 3000 //連投の間隔
const spamcount = 5 //連投と判断する基準、これだと3000ミリ秒(=3秒)間に5回同じユーザーの発言があったときにスパムと判断する。
const spamcheck = []
client.on("messageCreate", (message) => {
if (message.author.id == client.user.id) return
spamcheck.push(message.author.id)
setTimeout(spamcheck.shift, spaminterval)
if (spamcheck.filter(n => n === message.author.id).length >= spamcount) {
message.reply("スパムしないでください!")
//ここでタイムアウトの処理とかを入れておかないと発言の度に返すことになる
}
})
配列を用いたスパム対策。