+-
让Discord机器人每天自动做一些事情。

我是java脚本和discord编程的新手,我想在我的discord服务器上安装一个机器人,在早上5点进行频道清理,但是,我想在专用服务器上运行它,不知道如何正确设置时间触发机制。

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

工作?

0
投票

你可以使用 client.setInterval() 要有定时功能。

例如 client.setInterval(() => purgeChannel(), 300000); 将运行函数 purgeChannel 每5分钟(300000是5分钟的毫秒)。

0
投票

我认为最简单的方法是用一个对象将每个动作保存到一个时间。我选择使用 <HOUR><MINUTE> 来存储每个值。所以,4:12PM的时间将是。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 乐贴网 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 乐贴网 Function');
};

如果你选择这样做,你可以等待我的例子中的任何一个时间。actions 对象只是为了证明它的工作。但是 乐贴网 代码只是在你的当前时间+1分钟的基础上增加了一个样本时间。actions 对象只是为了更容易看到它的运行情况。

setInterval 在这里使用,只是为了简单,但如果这个要运行一整天的话,就不太推荐了。原因.要想知道更准确的时间,我建议更换为 setIntervalsetTimeout 并重新定义 setTimeout 每次运行的时候。