首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Javascript:反垃圾邮件自动生成器(Discord.js)

Javascript:反垃圾邮件自动生成器(Discord.js)
EN

Stack Overflow用户
提问于 2017-07-12 02:23:16
回答 1查看 12.5K关注 0票数 2

我正在编写一个多用途的不协调机器人,以取代一些较小的机器人,我正在寻找一段代码,用于识别重复的消息或在非常短的时间段(比如说5000ms)内发送的消息。

这里是可以用来实现这个想法的东西。

代码语言:javascript
复制
client.on("message", (message) => {
//let's use something like a spam variable for 10 or more messages sent within 5000ms
if(message.content === spam) {
    message.reply("Warning: Spamming in this channel is forbidden.");
    console.log(message.author.username + " (" + message.author.id + ") has sent 10 messages or more in 5 seconds in " + message.channel.name + ".");
  }
});

作为参考,我还使用~delete n命令创建了一个删除消息的功能。它看起来是这样的:

代码语言:javascript
复制
//this will only delete one message in the channel, the most recent one.
    message.delete(1000);
//1000 represents the timeout duration. it will only delete one message, regardless of the value.

//we can delete multiple messages with this, but note it has to come before the reply message.
    message.channel.bulkDelete(11);

我在考虑以某种方式将删除命令与识别垃圾邮件结合起来。如果你有任何想法,那将是最好的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-05-13 16:30:46

试试这个:

代码语言:javascript
复制
const usersMap = new Map();
const LIMIT = 7;
const DIFF = 5000;

client.on('message', async(message) => {
    if(message.author.bot) return;
    
    if(usersMap.has(message.author.id)) {
        const userData = usersMap.get(message.author.id);
        const { lastMessage, timer } = userData;
        const difference = message.createdTimestamp - lastMessage.createdTimestamp;
        let msgCount = userData.msgCount;
        console.log(difference);

        if(difference > DIFF) {
            clearTimeout(timer);
            console.log('Cleared Timeout');
            userData.msgCount = 1;
            userData.lastMessage = message;
            userData.timer = setTimeout(() => {
                usersMap.delete(message.author.id);
                console.log('Removed from map.')
            }, TIME);
            usersMap.set(message.author.id, userData)
        }
        else {
            ++msgCount;
            if(parseInt(msgCount) === LIMIT) {

               message.reply("Warning: Spamming in this channel is forbidden.");
              message.channel.bulkDelete(LIMIT);
               
            } else {
                userData.msgCount = msgCount;
                usersMap.set(message.author.id, userData);
            }
        }
    }
    else {
        let fn = setTimeout(() => {
            usersMap.delete(message.author.id);
            console.log('Removed from map.')
        }, TIME);
        usersMap.set(message.author.id, {
            msgCount: 1,
            lastMessage : message,
            timer : fn
        });
    }
})
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45041995

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档