Заставить Discord бота делать вещи автоматически в повседневной жизни - PullRequest
0 голосов
/ 22 апреля 2020

Я новичок в java программировании сценариев и разногласий и хочу, чтобы бот на моем сервере разногласий выполнял очистку канала в 5 часов утра. Однако я хочу запустить его на выделенном сервере и не знаю, как правильно настроить механизм триггера времени c. Будет ли

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

работать?

Ответы [ 2 ]

0 голосов
/ 22 апреля 2020

Самым простым способом, которым я мог видеть, как вы это делаете, был объект, в котором каждое действие было сохранено во время. Я решил использовать <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 просто добавляет время выборки к вашему текущему времени +1 минута в объекте actions, чтобы было проще увидеть его в действии. Используется

setInterval здесь просто, но не очень рекомендуется, если это будет работать весь день. Причина, по которой . Чтобы иметь более точное время , я предлагаю заменить setInterval на setTimeout и просто переопределять setTimeout при каждом его запуске.

0 голосов
/ 22 апреля 2020

Вы можете использовать client.setInterval() для работы по таймеру.

Например: client.setInterval(() => purgeChannel(), 300000); будет запускать функцию purgeChannel каждые 5 минут (300000 - 5 минут в миллисекундах) .

...