Node 定时任务

50 min read
const schedule = require('node-schedule')
// date 参数

// 其他规则见 https://www.npmjs.com/package/node-schedule
// 规则参数讲解, 规则类似 Linux 下的 crontab ('*'代表通配符) 
//
// *  *  *  *  *  *
// ┬ ┬ ┬ ┬ ┬ ┬
// │ │ │ │ │ |
// │ │ │ │ │ └ day of week (0 - 7) (0 or 7 is Sun)
// │ │ │ │ └───── month (1 - 12)
// │ │ │ └────────── day of month (1 - 31)
// │ │ └─────────────── hour (0 - 23)
// │ └──────────────────── minute (0 - 59)
// └───────────────────────── second (0 - 59, OPTIONAL)

// 1. 按固定时间触发
//
// 每分钟的第30秒触发: '30 * * * * *'
//
// 每小时的1分30秒触发 :'30 1 * * * *'
//
// 每天的凌晨1点1分30秒触发 :'30 1 1 * * *'
//
// 每月的1日1点1分30秒触发 :'30 1 1 1 * *'
//
// 每周1的1点1分30秒触发 :'30 1 1 * * 1'

// 2. 按时间差触发 (日/月/周同理)
//
// 每30分钟触发一次: '0 */30 * * * *'
//
// 每6小时触发一次: '0 0 */6 * * *'

function setSchedule(date,callback) {
  schedule.scheduleJob({tz: 'Asia/
'}, date, callback)
}
module.exports = {
  setSchedule
}
// 创建微信每日说定时任务
async function initDay() {
  console.log(`已经设定每日说任务`);
  
  schedule.setSchedule(config.SENDDATE, async () => {
    console.log('你的贴心小助理开始工作啦!');
    let logMsg;
    let contact =
      (await bot.Contact.find({ name: config.NICKNAME })) ||
      (await bot.Contact.find({ alias: config.NAME })); // 获取你要发送的联系人
    let one = await superagent.getOne(); //获取每日一句
    let weather = await superagent.getTXweather(); //获取天气信息
    let today = await untils.formatDate(new Date()); //获取今天的日期
    let memorialDay = untils.getDay(config.MEMORIAL_DAY); //获取纪念日天数
    let sweetWord = await superagent.getSweetWord();
    
    // 你可以修改下面的 str 来自定义每日说的内容和格式
    // PS: 如果需要插入 emoji(表情), 可访问 "https://getemoji.com/" 复制插入
    let str = `${today}\n我们在一起的第${memorialDay}\n\n元气满满的一天开始啦,要开心噢^_^\n\n今日天气\n${weather.weatherTips}\n${weather.todayWeather}\n每日一句:\n${one}\n\n每日土味情话:\n${sweetWord}\n\n————————最爱你的我`;
    try {
      logMsg = str;
      await delay(2000);
      await contact.say(str); // 发送消息
    } catch (e) {
      logMsg = e.message;
    }
    console.log(logMsg);
  });
}