import schedule from "node-schedule"; import common from "../../../lib/common/common.js"; /** * 请求模板 */ class jFeatch { async get(url) { const r = await fetch(url); return await r.json(); } async post(url, params) { const r = await fetch(url, { ...params, method: "POST" }); return await r.json(); } } /** * 每日推送函数 * @param func 回调函数 * @param time cron * @param isAutoPush 是否推送(开关) */ function autoTask(func, time, groupList, isAutoPush = false) { if (isAutoPush) { schedule.scheduleJob(time, () => { // 正常传输 if (groupList instanceof Array) { for (let i = 0; i < groupList.length; i++) { const group = Bot.pickGroup(groupList[i]); func(group); common.sleep(1000); } // 防止恶意破坏函数 } else if (groupList instanceof String) { const group = Bot.pickGroup(groupList[i]); func(group); common.sleep(1000); } else { throw Error("错误传入每日推送参数!"); } }); } } /** * 重试函数(暂时只用于抖音的api) * @param func * @param maxRetries * @param delay * @returns {Promise} */ function retry(func, maxRetries = 3, delay = 1000) { return new Promise((resolve, reject) => { const attempt = (remainingTries) => { func() .then(resolve) .catch(error => { if (remainingTries === 1) { reject(error); } else { console.log(`错误: ${error}. 重试将在 ${delay/1000} 秒...`); setTimeout(() => attempt(remainingTries - 1), delay); } }); }; attempt(maxRetries); }); } export { jFeatch, autoTask, retry };