From f0a957325fab66cd7c6837d86d5ff173498db6bd Mon Sep 17 00:00:00 2001 From: hlt1995 <93117676+hlt1995@users.noreply.github.com> Date: Thu, 20 Nov 2025 21:49:38 +0800 Subject: [PATCH] Add files via upload --- Nestle.js | 167 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 167 insertions(+) create mode 100644 Nestle.js diff --git a/Nestle.js b/Nestle.js new file mode 100644 index 0000000..bc537e7 --- /dev/null +++ b/Nestle.js @@ -0,0 +1,167 @@ +// 大大鸣版 雀巢 + +// 环境变量 NESTLE_TOKEN 抓取 Authorization 的值,例如:bearer 0610099d-550e-4e8d-9624-6840ff680812,只需要 bearer 后面的值 +/** + * const $ = new Env('雀巢') + * cron: 30 12 * * * (建议根据实际情况调整) + * 变量:export NESTLE_TOKEN="Authorization" + * 入口:#小程序://雀巢会员/O0NOfAHwAGV3tZb + * + */ + +//自己的User-Agent 不设置将会调用getRandomUserAgent随机分配 +// https://useragent.todaynav.com/ 微信打开此网站即可 +var User_Agent = "Mozilla/5.0 (iPhone; CPU iPhone OS 17_3_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/8.0.65(0x1800412b) NetType/WIFI Language/zh_CN"; + +const axios = require("axios"); +const $ = { + name: "雀巢会员", + wait: a => new Promise(e => setTimeout(e, a)), + logErr: e => console.error(e), + done: () => console.log("任务完成") +}; +const nestleList = process.env.NESTLE_TOKEN ? process.env.NESTLE_TOKEN.split(/[\n&]/) : []; + +let message = ""; + +function getRandomUserAgent() { + if (User_Agent) { + return User_Agent; + } + const a = ["Mozilla/5.0 (iPhone; CPU iPhone OS 15_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148", "Mozilla/5.0 (iPhone; CPU iPhone OS 14_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36"]; + return a[Math.floor(Math.random() * a.length)]; +} + +function getRandomWait(e, a) { + return Math.floor(Math.random() * (a - e + 1) + e); +} + +async function sendRequest(e, a, n, t = null) { + try { + const o = { + url: e, + method: a, + headers: n, + timeout: 1e4, + validateStatus: () => true + }; + if (t && (a.toLowerCase() === "post" || a.toLowerCase() === "put")) { + o.data = t; + } + const r = await axios(o); + return r.data; + } catch (e) { + console.error("请求失败: " + e.message); + return { + errcode: 500, + errmsg: "请求失败: " + e.message + }; + } +} + +const headers = { + "User-Agent": getRandomUserAgent(), + "content-type": "application/json", + referer: "https://servicewechat.com/wxc5db704249c9bb31/353/page-frame.html" +}; +(async () => { + // printBanner(); + console.log("\n已随机分配 User-Agent\n\n" + headers["User-Agent"]); + for (let e = 0; e < nestleList.length; e++) { + const n = e + 1; + console.log("\n*****第[" + n + "]个" + "雀巢会员" + "账号*****"); + headers.authorization = "Bearer " + nestleList[e]; + message += "📣====雀巢会员账号[" + n + "]====📣\n"; + await main(); + await $.wait(Math.floor(Math.random() * 501 + 2e3)); + } + if (message) { + console.log("\n执行结果汇总:\n" + message); + } +})()["catch"](e => console.error(e))["finally"](() => console.log("任务完成")); + +async function main() { + await getUserInfo(); + await everyDaySign() + await $.wait(Math.floor(Math.random() * 1001 + 1e3)); + await getTaskList(); + await $.wait(Math.floor(Math.random() * 1001 + 1e3)); + await getUserBalance(); +} + +async function getUserInfo() { + try { + const e = await sendRequest("https://crm.nestlechinese.com/openapi/member/api/User/GetUserInfo", "get", headers); + if (200 !== e.errcode) { + return console.error("获取用户信息失败:" + e.errmsg); + } + const { + nickname: n, + mobile: t + } = e.data; + console.log("用户:" + n + "(" + t + ")"); + message += "用户:" + n + "(" + t + ")\n"; + } catch (e) { + console.error("获取用户信息时发生异常 -> " + e); + } +} + +async function getTaskList() { + try { + const e = await sendRequest("https://crm.nestlechinese.com/openapi/activityservice/api/task/getlist", "post", headers); + if (200 !== e.errcode) { + return console.error("获取任务列表失败:" + e.errmsg); + } + for (const n of e.data) { + console.log("开始【" + n.task_title + "】任务"); + await doTask(n.task_guid); + await $.wait(Math.floor(Math.random() * 501 + 2e3)); + } + } catch (e) { + console.error("获取任务列表时发生异常 -> " + e); + } +} + +async function doTask(e) { + try { + const n = await sendRequest("https://crm.nestlechinese.com/openapi/activityservice/api/task/add", "post", headers, { + task_guid: e + }); + if (201 == n.errcode) { + return console.error("任务失败 -> " + n.errmsg + "\n"); + } + console.log("完成任务" + n.errcode + " -> " + n.errmsg + "\n"); + } catch (e) { + console.error("完成任务时发生异常 -> " + e); + } +} + +async function everyDaySign() { + let data = JSON.stringify({ + "rule_id": 1, + "goods_rule_id": 1 + }); + try { + const e = await sendRequest("https://crm.nestlechinese.com/openapi/activityservice/api/sign2025/sign", "post", headers, data); + if (200 !== e.errcode) { + return console.error("用户每日签到失败:" + e.errmsg); + } + console.log("当前签到天数:" + e.data.sign_day); + message += "当前签到天数:" + e.data.sign_day + "\n\n"; + } catch (e) { + console.error("用户每日签到发生异常 -> " + e); + } +} + +async function getUserBalance() { + try { + const e = await sendRequest("https://crm.nestlechinese.com/openapi/pointsservice/api/Points/getuserbalance", "post", headers); + if (200 !== e.errcode) { + return console.error("获取用户积分余额失败:" + e.errmsg); + } + console.log("当前巢币:" + e.data); + message += "当前巢币:" + e.data + "\n\n"; + } catch (e) { + console.error("获取用户巢币时发生异常 -> " + e); + } +} \ No newline at end of file