如何在2条漫游器消息/命令之间放置计时器

时间:2020-04-22 20:36:20

标签: javascript discord discord.js

我做了一个不和谐的机器人,这里是代码

const Discord = require("discord.js");
const client = new Discord.Client();

client.on("ready", () => {
   console.log("I am ready!");
});

client.on("message", (message) => {
if (message.content.startsWith("!kevin")) {
  message.channel.send("i'm kevin");
}
if (message.content.startsWith("!thomas")) {
  message.channel.send("random text blabla");
}

基本上,当我输入!something时,我的机器人在聊天室中按正确的路线回答,我当前的问题是我现在的不和谐情绪很大,我想将机器人限制为每分钟仅X条消息,但我找不到一个简单的函数可以做到这一点

我的问题:

是否有可能在机器人发送的2条消息之间设置一个计时器,因为如果没有,我的机器人只是对输入!somethingsomething的每个用户发送垃圾邮件,我希望我的机器人在有人键入{ {1}},该漫游器会锁定自己以X的时间回复其他任何!something

示例

用户1:!thomas

用户2:!thomas

用户3:!thomas

但是该漫游器仅回复其中一个并给自己设置了一个计时器,然后才能发送新的!something回复

因此,基本上,是让机器人每分钟回复X量的!cmd还是限制机器人发送2条消息之间的冷却时间的任何方法

这里是我的脚本:https://i.imgur.com/Q7w98Rm.jpg(我知道它很糟糕,特别是因为它有9000多个!cmd,但是我很快转换了一个旧的MIRC脚本,并且在javascript上很糟糕)

2 个答案:

答案 0 :(得分:1)

用户和/或漫游器的冷却

因此,我从您的评论中发现,您希望机器人仅每隔“ X”次运行一次命令。我不建议这样做,我建议只是防止用户每隔“ X”时间注册一个cmd。在此示例中,我已经将它们包括在内。

svcGrid = GridSearchCV(svc, 
                    cv = 4, 
                    n_jobs = 10,
                    param_grid = {'kernel':['rbf', 'linear', 
                                            'poly']})
#run the parameters tuning
svcGrid.fit(X_train,y_train)
print(svcGrid.cv_results_)

#pick and predict using the best estimators
best_svc =svcGrid.best_estimator_
print(best_svc)
y_predict = best_svc.predict(X_test)
print("BEST SVC ACCURACY:", accuracy_score(y_test, y_predict))

答案 1 :(得分:0)

命令冷却

仅存储命令运行的日期,然后检查自设置日期以来是否经过了一定的金额。
示例: 经过编辑以支持多个命令

let date = false;
let commandsTimers = {
    "!kevin":{
       waitTime: 5 * 60000, // 5 minutes wait for this particular command.
       lastUsed: false,
    }
}
let defaultWaitTime = 60000 * 2; //User needs to wait 2 minutes for each command unless specified
client.on("message", (message) => {
    let msgSentDate = Date.now();
    let commandWaitTimer = commandsTimers[message.content.split(" ")[0]] || {waitTime:defaultWaitTime, lastUsed:false}; 
    if((commandWaitTimer.lastUsed !== false ? msgSentDate - commandWaitTimer.lastUsed < commandWaitTimer.waitTime : false)){
        console.log('User needs to wait: ' + (commandWaitTimer.waitTime - (msgSentDate - commandWaitTimer .lastUsed)) / 1000 + ' seconds');
        return
    }
    commandsTimers[message.content.split(" ")[0]].lastUsed = msgSentDate;

    if (message.content.startsWith("!thomas")) {        
        message.channel.send("random text blabla");
    }
    if (message.content.startsWith("!kevin")) {        
        message.channel.send("Kevin!");
    }
});