让Discord bot每天自动做事

时间:2020-04-22 15:31:35

标签: javascript discord discord.js

我是Java脚本和Discord编程的新手,我希望Discord服务器上的机器人在早上5点进行频道清除。 但是,我想在专用服务器上运行它,并且不知道如何正确设置时间触发机制。 会

if (date.getHours()==5){
   //do stuff
}

工作吗?

2 个答案:

答案 0 :(得分:0)

您可以使用client.setInterval()具有定时功能。

例如:client.setInterval(() => purgeChannel(), 300000);将每5分钟运行一次purgeChannel函数(300000是5分钟,以毫秒为单位)。

答案 1 :(得分:0)

我能看到的最简单的方法是将每个动作保存到一个时间的对象。我选择使用<HOUR><MINUTE>来存储每个值。因此,下午4:12的时间为:1612。然后setInterval每分钟运行一次,并检查是否需要执行新操作。

function hello() {
  console.log('Hello');
}
let actions = {
  "0630": function() {
    console.log('Its 6:30');
  },
  "1200": hello, //NOON
  "1400": hello, //2:00 PM
  "0000": function() {
    console.log('New Day / Midnight');
  },
};
let codeStartTime = new Date();

function checkActions() {
  let date = new Date();
  let action = actions[`${date.getHours() >= 10 ? "" : "0"}${date.getHours()}${date.getMinutes() >= 9 ? "" : "0"}${date.getMinutes()}`];
  if (typeof action === "function") action(); //If an action exists for this time, run it.
}
setTimeout(function() {
  checkActions();
  setInterval(checkActions, 60000); //Run the function every minute. Can increase/decrease this number
}, ((60 - codeStartTime.getSeconds()) * 1000) - codeStartTime.getMilliseconds()); // Start the interval at the EXACT time it starts at a new minute


/** CODE for the Stack Overflow Snippet **/
console.log(`Starting first interval in ${((60 - codeStartTime.getSeconds()))} seconds.`);
console.log(`Adding in StackOverflow function, set to run at: ${codeStartTime.getHours() >= 10 ? "" : "0"}${codeStartTime.getHours()}${codeStartTime.getMinutes() >= 9 ? "" : "0"}${codeStartTime.getMinutes() + 1}`);
actions[`${codeStartTime.getHours() >= 10 ? "" : "0"}${codeStartTime.getHours()}${codeStartTime.getMinutes() >= 9 ? "" : "0"}${codeStartTime.getMinutes() + 1}`] = function() {
  console.log('Ran the StackOverflow Function');
};

如果选择这样做,可以在actions对象中等待我的任何示例时间,以证明其有效。但是 StackOverflow 代码只是在actions对象中的当前时间+1分钟中添加了一个示例时间,只是为了使其更易于查看。

在这里使用

setInterval只是为了简单起见,但如果它会整天运行,则不建议这样做。 Reason Why为了获得更准确的时间,我建议将setInterval替换为setTimeout,并在每次运行时重新定义setTimeout