diff --git a/Backup/sendNotify_251126.js b/Backup/sendNotify_251126.js
deleted file mode 100644
index 55a77b7..0000000
--- a/Backup/sendNotify_251126.js
+++ /dev/null
@@ -1,2730 +0,0 @@
-/*
- * @Author: ccwav https://github.com/ccwav/QLScript2
-
- * sendNotify 推送通知功能 (text, desp, params , author , strsummary)
- * @param text 通知标题 (必要)
- * @param desp 通知内容 (必要)
- * @param params 某些推送通知方式点击弹窗可跳转, 例:{ url: 'https://abc.com' } ,没啥用,只是为了兼容旧脚本保留 (非必要)
- * @param author 通知底部作者` (非必要)
- * @param strsummary 指定某些微信模板通知的预览信息,空则默认为desp (非必要)
-
- * sendNotifybyWxPucher 一对一推送通知功能 (text, desp, PtPin, author, strsummary )
- * @param text 通知标题 (必要)
- * @param desp 通知内容 (必要)
- * @param PtPin CK的PTPIN (必要)
- * @param author 通知底部作者` (非必要)
- * @param strsummary 指定某些微信模板通知的预览信息,空则默认为desp (非必要)
-
- */
-// 修改:hlt1995
-// 编辑时间:2025-11-26
-// 1.修复捕获CK过期通知后无法获取别名,导致CK过期通知处理失败的问题。修改了GetPtPin() 函数。
-// 2.修复无法正确读取配置文件中的BARK_GROUP参数的问题。
-// 3.添加BARK_ICON参数读取。
-// 4.修复sendNotify正在处理账号Remark时,青龙面板 API 访问失败返回401的问题。不再调用 getEnvs() 读取备注,改为直接读取本地 JSON 文件。
-// 5.修复捕获账号CK失效后,自动禁用失效CK时,青龙面板 API 访问失败返回401的问题。添加401容错机制,跳过执行自动禁用失效CK,仅发送通知。
-
-//详细说明参考 https://github.com/ccwav/QLScript2.
-const querystring = require('querystring');
-const exec = require('child_process').exec;
-const $ = new Env();
-const timeout = 15000; //超时时间(单位毫秒)
-//console.log("加载sendNotify,当前版本: 20230712");
-// =======================================go-cqhttp通知设置区域===========================================
-//gobot_url 填写请求地址http://127.0.0.1/send_private_msg
-//gobot_token 填写在go-cqhttp文件设置的访问密钥
-//gobot_qq 填写推送到个人QQ或者QQ群号
-//go-cqhttp相关API https://docs.go-cqhttp.org/api
-let GOBOT_URL = ''; // 推送到个人QQ: http://127.0.0.1/send_private_msg 群:http://127.0.0.1/send_group_msg
-let GOBOT_TOKEN = ''; //访问密钥
-let GOBOT_QQ = ''; // 如果GOBOT_URL设置 /send_private_msg 则需要填入 user_id=个人QQ 相反如果是 /send_group_msg 则需要填入 group_id=QQ群
-
-// =======================================微信server酱通知设置区域===========================================
-//此处填你申请的SCKEY.
-//(环境变量名 PUSH_KEY)
-let SCKEY = '';
-
-// =======================================PushDeer通知设置区域===========================================
-//此处填你申请的PushDeer KEY.
-//(环境变量名 DEER_KEY)
-let PUSHDEER_KEY = '';
-
-// =======================================Bark App通知设置区域===========================================
-//此处填你BarkAPP的信息(IP/设备码,例如:https://api.day.app/XXXXXXXX)
-let BARK_PUSH = '';
-//下方填写推送图标设置,自定义推送图标(需iOS15或以上)
-let BARK_ICON = '';
-//BARK app推送铃声,铃声列表去APP查看复制填写
-let BARK_SOUND = '';
-//BARK app推送消息的分组, 默认为"QingLong"
-let BARK_GROUP = 'Qinglong';
-
-// =======================================telegram机器人通知设置区域===========================================
-//此处填你telegram bot 的Token,telegram机器人通知推送必填项.例如:1077xxx4424:AAFjv0FcqxxxxxxgEMGfi22B4yh15R5uw
-//(环境变量名 TG_BOT_TOKEN)
-let TG_BOT_TOKEN = '';
-//此处填你接收通知消息的telegram用户的id,telegram机器人通知推送必填项.例如:129xxx206
-//(环境变量名 TG_USER_ID)
-let TG_USER_ID = '';
-//tg推送HTTP代理设置(不懂可忽略,telegram机器人通知推送功能中非必填)
-let TG_PROXY_HOST = ''; //例如:127.0.0.1(环境变量名:TG_PROXY_HOST)
-let TG_PROXY_PORT = ''; //例如:1080(环境变量名:TG_PROXY_PORT)
-let TG_PROXY_AUTH = ''; //tg代理配置认证参数
-//Telegram api自建的反向代理地址(不懂可忽略,telegram机器人通知推送功能中非必填),默认tg官方api(环境变量名:TG_API_HOST)
-let TG_API_HOST = 'api.telegram.org';
-// =======================================钉钉机器人通知设置区域===========================================
-//此处填你钉钉 bot 的webhook,例如:5a544165465465645d0f31dca676e7bd07415asdasd
-//(环境变量名 DD_BOT_TOKEN)
-let DD_BOT_TOKEN = '';
-//密钥,机器人安全设置页面,加签一栏下面显示的SEC开头的字符串
-let DD_BOT_SECRET = '';
-
-// =======================================企业微信机器人通知设置区域===========================================
-//此处填你企业微信机器人的 webhook(详见文档 https://work.weixin.qq.com/api/doc/90000/90136/91770),例如:693a91f6-7xxx-4bc4-97a0-0ec2sifa5aaa
-//(环境变量名 QYWX_KEY)
-let QYWX_KEY = '';
-
-// =======================================企业微信应用消息通知设置区域===========================================
-/*
-此处填你企业微信应用消息的值(详见文档 https://work.weixin.qq.com/api/doc/90000/90135/90236)
-环境变量名 QYWX_AM依次填入 corpid,corpsecret,touser(注:多个成员ID使用|隔开),agentid,消息类型(选填,不填默认文本消息类型)
-注意用,号隔开(英文输入法的逗号),例如:wwcff56746d9adwers,B-791548lnzXBE6_BWfxdf3kSTMJr9vFEPKAbh6WERQ,mingcheng,1000001,2COXgjH2UIfERF2zxrtUOKgQ9XklUqMdGSWLBoW_lSDAdafat
-可选推送消息类型(推荐使用图文消息(mpnews)):
-- 文本卡片消息: 0 (数字零)
-- 文本消息: 1 (数字一)
-- 图文消息(mpnews): 素材库图片id, 可查看此教程(http://note.youdao.com/s/HMiudGkb)或者(https://note.youdao.com/ynoteshare1/index.html?id=1a0c8aff284ad28cbd011b29b3ad0191&type=note)
- */
-let QYWX_AM = '';
-
-// =======================================飞书机器人通知设置区域===========================================
-//此处填你飞书机器人的 webhook(详见文档 https://open.feishu.cn/document/ukTMukTMukTM/ucTM5YjL3ETO24yNxkjN)
-//(环境变量名 FS_KEY)
-let FS_KEY = '';
-
-
-// =======================================iGot聚合推送通知设置区域===========================================
-//此处填您iGot的信息(推送key,例如:https://push.hellyw.com/XXXXXXXX)
-let IGOT_PUSH_KEY = '';
-
-// =======================================push+设置区域=======================================
-//官方文档:http://www.pushplus.plus/
-//PUSH_PLUS_TOKEN:微信扫码登录后一对一推送或一对多推送下面的token(您的Token),不提供PUSH_PLUS_USER则默认为一对一推送
-//PUSH_PLUS_USER: 一对多推送的“群组编码”(一对多推送下面->您的群组(如无则新建)->群组编码,如果您是创建群组人。也需点击“查看二维码”扫描绑定,否则不能接受群组消息推送)
-let PUSH_PLUS_TOKEN = '';
-let PUSH_PLUS_USER = '';
-
-// =======================================smtp 通知设置=======================================
-// 变量SMTP_SERVICE SMTP_EMAI SMTP_TO SMTP_PASSWORD SMTP_NAME
-let SMTP_SERVICE = ''; // 邮箱服务名称,比如 126、163、Gmail、QQ 等,支持列表 https://github.com/nodemailer/nodemailer/blob/master/lib/well-known/services.json
-let SMTP_EMAIL = ''; // SMTP 发件邮箱
-let SMTP_TO = ''; // SMTP 收件邮箱,默认通知将会发给发件邮箱
-let SMTP_PASSWORD = ''; // SMTP 登录密码,也可能为特殊口令,视具体邮件服务商说明而定
-let SMTP_NAME = ''; // SMTP 收发件人姓名,可随意填写
-
-// ======================================= WxPusher 通知设置区域 ===========================================
-// 此处填你申请的 appToken. 官方文档:https://wxpusher.zjiecode.com/docs
-// WP_APP_TOKEN 可在管理台查看: https://wxpusher.zjiecode.com/admin/main/app/appToken
-// WP_TOPICIDS 群发, 发送目标的 topicId, 以 ; 分隔! 使用 WP_UIDS 单发的时候, 可以不传
-// WP_UIDS 发送目标的 uid, 以 ; 分隔。注意 WP_UIDS 和 WP_TOPICIDS 可以同时填写, 也可以只填写一个。
-// WP_URL 原文链接, 可选参数
-let WP_APP_TOKEN = "";
-let WP_TOPICIDS = "";
-let WP_UIDS = "";
-let WP_URL = "";
-
-let WP_APP_TOKEN_ONE = "";
-if (process.env.WP_APP_TOKEN_ONE) {
- WP_APP_TOKEN_ONE = process.env.WP_APP_TOKEN_ONE;
-}
-let WP_UIDS_ONE = "";
-
-// =======================================gotify通知设置区域==============================================
-//gotify_url 填写gotify地址,如https://push.example.de:8080
-//gotify_token 填写gotify的消息应用token
-//gotify_priority 填写推送消息优先级,默认为0
-let GOTIFY_URL = '';
-let GOTIFY_TOKEN = '';
-let GOTIFY_PRIORITY = 0;
-
-// =======================================ntfy 通知设置区域==============================================
-//ntfy_url 填写 ntfy 地址,如https://push.example.de:8080
-//ntfy_token 填写 ntfy 的消息应用token
-//ntfy_priority 填写推送消息优先级,默认为0
-let NTFY_URL = '';
-let NTFY_TOKEN = '';
-let NTFY_TOPIC = '';
-let NTFY_PRIORITY = 0;
-let NTFY_ACTIONS = '';
-
-// =======================================BncrBot通知设置区域==============================================
-//BncrHost 填写BncrHost地址,如https://192.168.31.192:9090
-//BncrToken 填写Bncr的消息应用Token
-let BncrHost = '';
-let BncrToken = '';
-
-let PushErrorTime = 0;
-let strTitle = "";
-let ShowRemarkType = "1";
-let Notify_NoCKFalse = "false";
-let Notify_NoLoginSuccess = "false";
-let UseGroupNotify = 1;
-//const {
-// getEnvs,
-// DisableCk,
-// getEnvByPtPin
-//} = require('./function/ql');
-const fs = require('fs');
-let isnewql = fs.existsSync('/ql/data/config/auth.json');
-let strCKFile = "/ql/data/scripts/CKName_cache.json";
-let strUidFile = "/ql/data/scripts/CK_WxPusherUid.json";
-if (isnewql) {
- strCKFile = '/ql/data/scripts/CKName_cache.json';
- strUidFile = '/ql/data/scripts/CK_WxPusherUid.json';
- } else {
- strCKFile = '/ql/scripts/CKName_cache.json';
- strUidFile = '/ql/scripts/CK_WxPusherUid.json';
-}
-
-let Fileexists = fs.existsSync(strCKFile);
-let TempCK = [];
-if (Fileexists) {
- //console.log("检测到别名缓存文件CKName_cache.json,载入...");
- TempCK = fs.readFileSync(strCKFile, 'utf-8');
- if (TempCK) {
- TempCK = TempCK.toString();
- TempCK = JSON.parse(TempCK);
- }
-}
-
-let UidFileexists = fs.existsSync(strUidFile);
-let TempCKUid = [];
-if (UidFileexists) {
- //console.log("检测到一对一Uid文件WxPusherUid.json,载入...");
- TempCKUid = fs.readFileSync(strUidFile, 'utf-8');
- if (TempCKUid) {
- TempCKUid = TempCKUid.toString();
- TempCKUid = JSON.parse(TempCKUid);
- }
-}
-
-let tempAddCK = {};
-let boolneedUpdate = false;
-let strCustom = "";
-let strCustomArr = [];
-let strCustomTempArr = [];
-let Notify_CKTask = "";
-let Notify_SkipText = [];
-let isLogin = false;
-if (process.env.NOTIFY_SHOWNAMETYPE) {
- ShowRemarkType = process.env.NOTIFY_SHOWNAMETYPE;
-}
-async function sendNotify(text, desp, params = {}, author = "",strsummary="") {
- console.log(`开始发送通知...`);
-
- //NOTIFY_FILTERBYFILE代码来自Ca11back.
- if (process.env.NOTIFY_FILTERBYFILE) {
- var no_notify = process.env.NOTIFY_FILTERBYFILE.split('&');
- if (module.parent.filename) {
- const script_name = module.parent.filename.split('/').slice(-1)[0];
- if (no_notify.some(key_word => {
- const flag = script_name.includes(key_word);
- if (flag) {
- console.log(`${script_name}含有关键字${key_word},不推送`);
- }
- return flag;
- })) {
- return;
- }
- }
- }
-
- try {
- //Reset 变量
- UseGroupNotify = 1;
- strTitle = "";
- GOBOT_URL = '';
- GOBOT_TOKEN = '';
- GOBOT_QQ = '';
- SCKEY = '';
- PUSHDEER_KEY= '';
- BARK_PUSH = '';
- BARK_SOUND = '';
- BARK_GROUP = 'QingLong';
- TG_BOT_TOKEN = '';
- TG_USER_ID = '';
- TG_PROXY_HOST = '';
- TG_PROXY_PORT = '';
- TG_PROXY_AUTH = '';
- TG_API_HOST = 'api.telegram.org';
- DD_BOT_TOKEN = '';
- DD_BOT_SECRET = '';
- QYWX_KEY = '';
- QYWX_AM = '';
- FS_KEY = '';
- IGOT_PUSH_KEY = '';
- PUSH_PLUS_TOKEN = '';
- PUSH_PLUS_USER = '';
- Notify_CKTask = "";
- Notify_SkipText = [];
-
- //变量开关
- var Use_serverNotify = true;
- var Use_pushdeerNotify = true;
- var Use_pushPlusNotify = true;
- var Use_BarkNotify = true;
- var Use_tgBotNotify = true;
- var Use_ddBotNotify = true;
- var Use_qywxBotNotify = true;
- var Use_qywxamNotify = true;
- var Use_fsBotNotify = true;
- var Use_iGotNotify = true;
- var Use_gobotNotify = true;
- var Use_WxPusher = true;
- var strtext = text;
- var strdesp = desp;
- var titleIndex =-1;
- if (process.env.NOTIFY_NOCKFALSE) {
- Notify_NoCKFalse = process.env.NOTIFY_NOCKFALSE;
- }
- if (process.env.NOTIFY_NOLOGINSUCCESS) {
- Notify_NoLoginSuccess = process.env.NOTIFY_NOLOGINSUCCESS;
- }
- if (process.env.NOTIFY_CKTASK) {
- Notify_CKTask = process.env.NOTIFY_CKTASK;
- }
-
- if (process.env.NOTIFY_SKIP_TEXT && desp) {
- Notify_SkipText = process.env.NOTIFY_SKIP_TEXT.split('&');
- if (Notify_SkipText.length > 0) {
- for (var Templ in Notify_SkipText) {
- if (desp.indexOf(Notify_SkipText[Templ]) != -1) {
- console.log("检测内容到内容存在屏蔽推送的关键字(" + Notify_SkipText[Templ] + "),将跳过推送...");
- return;
- }
- }
- }
- }
-
- if (text.indexOf("已失效") != -1 || desp.indexOf("登录") != -1 || text == "Ninja 运行通知") {
-
- if (Notify_CKTask) {
- console.log("触发CK脚本,开始执行....");
- await exec(`ps -ef|grep -v grep|grep ${Notify_CKTask}`, async function (err, stdout, stderr){
- if (!stdout) {
- Notify_CKTask = "task " + Notify_CKTask + " now";
- console.log(Notify_CKTask)
- await exec(Notify_CKTask);
- } else {
- console.log('已有相同任务在执行,跳过此次执行!\n')
- return
- }
- })
-
- }
- }
- if (process.env.NOTIFY_AUTOCHECKCK == "true") {
- if (text.indexOf("已失效") != -1 || desp.indexOf("登录") != -1) {
- console.log(`捕获CK过期通知,开始尝试处理...`);
- var strPtPin = await GetPtPin(text, desp);
- var strdecPtPin = decodeURIComponent(strPtPin);
- var llHaderror = false;
-
- if (strPtPin) {
- var temptest = await getEnvByPtPin(strdecPtPin);
- if (!temptest) {
- console.log(`未找到` + strPtPin + `对应的环境变量,跳过自动禁用\n`);
- text = "京东CK检测";
- strNotifyOneTemp = `京东账号: ` + strdecPtPin + ` 已失效!\n如果要继续挂机,请重新登录账号.`;
- strNotifyOneTemp += "\n任务标题:" + strtext;
- if (strAllNotify)
- strNotifyOneTemp += `\n` + strAllNotify;
- desp = strNotifyOneTemp;
- if (WP_APP_TOKEN_ONE) {
- await sendNotifybyWxPucher(`账号过期下线通知`, strNotifyOneTemp, strdecPtPin);
- }
- }
- if (temptest) {
- if (temptest.status == 0) {
- isLogin = true;
- await isLoginByX1a0He(temptest.value);
- if (!isLogin) {
- var tempid = 0;
- if (temptest._id) {
- tempid = temptest._id;
- }
- if (temptest.id) {
- tempid = temptest.id;
- }
- const DisableCkBody = await DisableCk(tempid);
- strPtPin = temptest.value;
- strPtPin = (strPtPin.match(/pt_pin=([^; ]+)(?=;?)/) && strPtPin.match(/pt_pin=([^; ]+)(?=;?)/)[1]);
- var strAllNotify = "";
- var MessageUserGp2 = "";
- var MessageUserGp3 = "";
- var MessageUserGp4 = "";
-
- var userIndex2 = -1;
- var userIndex3 = -1;
- var userIndex4 = -1;
-
- var strNotifyOneTemp = "";
- if ($.isNode() && process.env.BEANCHANGE_USERGP2) {
- MessageUserGp2 = process.env.BEANCHANGE_USERGP2 ? process.env.BEANCHANGE_USERGP2.split('&') : [];
- }
-
- if ($.isNode() && process.env.BEANCHANGE_USERGP3) {
- MessageUserGp3 = process.env.BEANCHANGE_USERGP3 ? process.env.BEANCHANGE_USERGP3.split('&') : [];
- }
-
- if ($.isNode() && process.env.BEANCHANGE_USERGP4) {
- MessageUserGp4 = process.env.BEANCHANGE_USERGP4 ? process.env.BEANCHANGE_USERGP4.split('&') : [];
- }
-
- if (MessageUserGp4) {
- userIndex4 = MessageUserGp4.findIndex((item) => item === strPtPin);
-
- }
- if (MessageUserGp2) {
- userIndex2 = MessageUserGp2.findIndex((item) => item === strPtPin);
- }
- if (MessageUserGp3) {
- userIndex3 = MessageUserGp3.findIndex((item) => item === strPtPin);
- }
-
- if (userIndex2 != -1) {
- console.log(`该账号属于分组2`);
- text = "京东CK检测#2";
- }
- if (userIndex3 != -1) {
- console.log(`该账号属于分组3`);
- text = "京东CK检测#3";
- }
- if (userIndex4 != -1) {
- console.log(`该账号属于分组4`);
- text = "京东CK检测#4";
- }
- if (userIndex4 == -1 && userIndex2 == -1 && userIndex3 == -1) {
- text = "京东CK检测";
- }
- if (process.env.CHECKCK_ALLNOTIFY) {
- strAllNotify = process.env.CHECKCK_ALLNOTIFY;
- /* if (strTempNotify.length > 0) {
- for (var TempNotifyl in strTempNotify) {
- strAllNotify += strTempNotify[TempNotifyl] + '\n';
- }
- }*/
- console.log(`检测到设定了温馨提示,将在推送信息中置顶显示...`);
- strAllNotify = `\n【✨✨✨✨温馨提示✨✨✨✨】\n` + strAllNotify;
- console.log(strAllNotify);
- }
-
- if (DisableCkBody.code == 200) {
- console.log(`京东账号` + strdecPtPin + `已失效,自动禁用成功!\n`);
-
- strNotifyOneTemp = `京东账号: ` + strdecPtPin + ` 已失效,已自动禁用!\n如果要继续挂机,请重新登录账号.`;
- strNotifyOneTemp += "\n任务标题:" + strtext;
- if (strAllNotify)
- strNotifyOneTemp += `\n` + strAllNotify;
- desp = strNotifyOneTemp;
- if (WP_APP_TOKEN_ONE) {
- await sendNotifybyWxPucher(`账号过期下线通知`, strNotifyOneTemp, strdecPtPin);
- }
-
- } else {
- console.log(`京东账号` + strPtPin + `已失效,自动禁用失败!\n`);
- strNotifyOneTemp = `京东账号: ` + strdecPtPin + ` 已失效!\n如果要继续挂机,请重新登录账号.`;
- strNotifyOneTemp += "\n任务标题:" + strtext;
- if (strAllNotify)
- strNotifyOneTemp += `\n` + strAllNotify;
- desp = strNotifyOneTemp;
- if (WP_APP_TOKEN_ONE) {
- await sendNotifybyWxPucher(`账号过期下线通知`, strNotifyOneTemp, strdecPtPin);
- }
- }
- } else {
- console.log(`该CK已经检测没有有效,跳过通知...`);
- llHaderror = true;
- }
- } else {
- console.log(`该CK已经禁用不需要处理`);
- llHaderror = true;
- }
-
- }
-
- } else {
- console.log(`CK过期通知处理失败...`);
- }
- if (llHaderror)
- return;
- }
- }
-
- if (strtext.indexOf("已失效") != -1 || strdesp.indexOf("登录") != -1 || strtext == "Ninja 运行通知") {
- if (Notify_NoCKFalse == "true" && text != "Ninja 运行通知") {
- console.log(`检测到NOTIFY_NOCKFALSE变量为true,不发送ck失效通知...`);
- return;
- }
- }
-
- if (text.indexOf("已可领取") != -1) {
- if (text.indexOf("农场") != -1) {
- strTitle = "东东农场领取";
- } else {
- strTitle = "东东萌宠领取";
- }
- }
- if (text.indexOf("汪汪乐园养joy") != -1) {
- strTitle = "汪汪乐园养joy领取";
- }
-
- if (text == "京喜工厂") {
- if (desp.indexOf("元造进行兑换") != -1) {
- strTitle = "京喜工厂领取";
- }
- }
-
- if (text.indexOf("任务") != -1 && (text.indexOf("新增") != -1 || text.indexOf("删除") != -1)) {
- strTitle = "脚本任务更新";
- }
-
- if (strTitle) {
- const notifyRemindList = process.env.NOTIFY_NOREMIND ? process.env.NOTIFY_NOREMIND.split('&') : [];
- titleIndex = notifyRemindList.findIndex((item) => item === strTitle);
-
- if (titleIndex !== -1) {
- console.log(`${text} 在领取信息黑名单中,已跳过推送`);
- return;
- }
-
- } else {
- strTitle = text;
- }
- if (Notify_NoLoginSuccess == "true") {
- if (desp.indexOf("登陆成功") != -1) {
- console.log(`登陆成功不推送`);
- return;
- }
- }
-
- if (strTitle == "汪汪乐园养joy领取" && WP_APP_TOKEN_ONE) {
- console.log(`捕获汪汪乐园养joy领取通知,开始尝试一对一推送...`);
- var strPtPin = await GetPtPin(text, desp);
- var strdecPtPin = decodeURIComponent(strPtPin);
- if (strPtPin) {
- await sendNotifybyWxPucher("汪汪乐园领取通知", `【京东账号】${strdecPtPin}\n当前等级: 30\n请到京东极速版APP提现6.66\n活动入口:京东极速版APP->我的->汪汪乐园->点礼包`, strdecPtPin);
- }
- }
-
- console.log("通知标题: " + strTitle);
-
- //检查黑名单屏蔽通知
- const notifySkipList = process.env.NOTIFY_SKIP_LIST ? process.env.NOTIFY_SKIP_LIST.split('&') : [];
- titleIndex = notifySkipList.findIndex((item) => item === strTitle);
-
- if (titleIndex !== -1) {
- console.log(`${strTitle} 在推送黑名单中,已跳过推送`);
- return;
- }
-
- //检查脚本名称是否需要通知到Group2,Group2读取原环境配置的变量名后加2的值.例如: QYWX_AM2
- for (lncount = 2; lncount < 20; lncount++) {
- if (process.env["NOTIFY_GROUP" + lncount + "_LIST"]) {
- const strtemp = process.env["NOTIFY_GROUP" + lncount + "_LIST"];
- const notifyGroupList = strtemp ? strtemp.split('&') : [];
- const titleIndex = notifyGroupList.findIndex((item) => item === strTitle);
- if (titleIndex !== -1) {
- console.log(`${strTitle} 在群组${lncount}推送名单中,初始化群组推送`);
- UseGroupNotify = lncount;
- }
- }
- }
-
- if (process.env.NOTIFY_CUSTOMNOTIFY) {
- strCustom = process.env.NOTIFY_CUSTOMNOTIFY;
- strCustomArr = strCustom.replace(/^\[|\]$/g, "").split(",");
- strCustomTempArr = [];
- for (var Tempj in strCustomArr) {
- strCustomTempArr = strCustomArr[Tempj].split("&");
- if (strCustomTempArr.length > 1) {
- if (strTitle == strCustomTempArr[0]) {
- console.log("检测到自定义设定,开始执行配置...");
- if (strCustomTempArr[1].indexOf("组") != -1) {
- UseGroupNotify = strCustomTempArr[1].replace("组", "") * 1;
- console.log("自定义设定强制使用组" + UseGroupNotify + "配置通知...");
- } else {
- UseGroupNotify = 1;
- }
- if (strCustomTempArr.length > 2) {
- console.log("关闭所有通知变量...");
- Use_serverNotify = false;
- Use_pushdeerNotify = false;
- Use_pushPlusNotify = false;
- Use_BarkNotify = false;
- Use_tgBotNotify = false;
- Use_ddBotNotify = false;
- Use_qywxBotNotify = false;
- Use_fsBotNotify = false;
- Use_qywxamNotify = false;
- Use_iGotNotify = false;
- Use_gobotNotify = false;
-
- for (let Tempk = 2; Tempk < strCustomTempArr.length; Tempk++) {
- var strTrmp = strCustomTempArr[Tempk];
- switch (strTrmp) {
- case "Server酱":
- Use_serverNotify = true;
- console.log("自定义设定启用Server酱进行通知...");
- break;
- case "pushdeer":
- Use_pushdeerNotify = true;
- console.log("自定义设定启用pushdeer进行通知...");
- break;
- case "pushplus":
- Use_pushPlusNotify = true;
- console.log("自定义设定启用pushplus(推送加)进行通知...");
- break;
- case "Bark":
- Use_BarkNotify = true;
- console.log("自定义设定启用Bark进行通知...");
- break;
- case "TG机器人":
- Use_tgBotNotify = true;
- console.log("自定义设定启用telegram机器人进行通知...");
- break;
- case "钉钉":
- Use_ddBotNotify = true;
- console.log("自定义设定启用钉钉机器人进行通知...");
- break;
- case "企业微信机器人":
- Use_qywxBotNotify = true;
- console.log("自定义设定启用企业微信机器人进行通知...");
- break;
- case "企业微信应用消息":
- Use_qywxamNotify = true;
- console.log("自定义设定启用企业微信应用消息进行通知...");
- break;
- case "飞书机器人":
- Use_fsBotNotify = true;
- console.log("自定义设定启用飞书机器人进行通知...");
- break;
- case "iGotNotify":
- Use_iGotNotify = true;
- console.log("自定义设定启用iGot进行通知...");
- break;
- case "gobotNotify":
- Use_gobotNotify = true;
- console.log("自定义设定启用go-cqhttp进行通知...");
- break;
- case "WxPusher":
- Use_WxPusher = true;
- console.log("自定义设定启用WxPusher进行通知...");
- break;
-
- }
- }
-
- }
- }
- }
- }
- }
- if (desp) {
- for (lncount = 2; lncount < 20; lncount++) {
- if (process.env["NOTIFY_INCLUDE_TEXT" + lncount]) {
- Notify_IncludeText = process.env["NOTIFY_INCLUDE_TEXT" + lncount].split('&');
- if (Notify_IncludeText.length > 0) {
- for (var Templ in Notify_IncludeText) {
- if (desp.indexOf(Notify_IncludeText[Templ]) != -1) {
- console.log("检测内容到内容存在组别推送的关键字(" + Notify_IncludeText[Templ] + "),将推送到组" + lncount + "...");
- UseGroupNotify = lncount;
- break;
- }
- }
- }
- }
- }
- }
- if (UseGroupNotify == 1)
- UseGroupNotify = "";
-
- if (process.env["GOBOT_URL" + UseGroupNotify] && Use_gobotNotify) {
- GOBOT_URL = process.env["GOBOT_URL" + UseGroupNotify];
- }
- if (process.env["GOBOT_TOKEN" + UseGroupNotify] && Use_gobotNotify) {
- GOBOT_TOKEN = process.env["GOBOT_TOKEN" + UseGroupNotify];
- }
- if (process.env["GOBOT_QQ" + UseGroupNotify] && Use_gobotNotify) {
- GOBOT_QQ = process.env["GOBOT_QQ" + UseGroupNotify];
- }
-
- if (process.env["PUSH_KEY" + UseGroupNotify] && Use_serverNotify) {
- SCKEY = process.env["PUSH_KEY" + UseGroupNotify];
- }
- if (process.env["DEER_KEY"+ UseGroupNotify] && Use_pushdeerNotify) {
- PUSHDEER_KEY = process.env["DEER_KEY"+ UseGroupNotify];
- }
- if (process.env["WP_APP_TOKEN" + UseGroupNotify] && Use_WxPusher) {
- WP_APP_TOKEN = process.env["WP_APP_TOKEN" + UseGroupNotify];
- }
-
- if (process.env["WP_TOPICIDS" + UseGroupNotify] && Use_WxPusher) {
- WP_TOPICIDS = process.env["WP_TOPICIDS" + UseGroupNotify];
- }
-
- if (process.env["WP_UIDS" + UseGroupNotify] && Use_WxPusher) {
- WP_UIDS = process.env["WP_UIDS" + UseGroupNotify];
- }
-
- if (process.env["WP_URL" + UseGroupNotify] && Use_WxPusher) {
- WP_URL = process.env["WP_URL" + UseGroupNotify];
- }
- if (process.env["BARK_PUSH" + UseGroupNotify] && Use_BarkNotify) {
- if (process.env["BARK_PUSH" + UseGroupNotify].indexOf('https') > -1 || process.env["BARK_PUSH" + UseGroupNotify].indexOf('http') > -1) {
- //兼容BARK自建用户
- BARK_PUSH = process.env["BARK_PUSH" + UseGroupNotify];
- } else {
- //兼容BARK本地用户只填写设备码的情况
- BARK_PUSH = `https://api.day.app/${process.env["BARK_PUSH" + UseGroupNotify]}`;
- }
- if (process.env["BARK_SOUND" + UseGroupNotify]) {
- BARK_SOUND = process.env["BARK_SOUND" + UseGroupNotify];
- }
- if (process.env["BARK_GROUP" + UseGroupNotify]) {
- BARK_GROUP = process.env["BARK_GROUP" + UseGroupNotify];
- }
- if (process.env["BARK_ICON" + UseGroupNotify]) {
- BARK_ICON = process.env["BARK_ICON" + UseGroupNotify];
- }
- }
- if (process.env["TG_BOT_TOKEN" + UseGroupNotify] && Use_tgBotNotify) {
- TG_BOT_TOKEN = process.env["TG_BOT_TOKEN" + UseGroupNotify];
- }
- if (process.env["TG_USER_ID" + UseGroupNotify] && Use_tgBotNotify) {
- TG_USER_ID = process.env["TG_USER_ID" + UseGroupNotify];
- }
- if (process.env["TG_PROXY_AUTH"])
- TG_PROXY_AUTH = process.env["TG_PROXY_AUTH"];
- if (process.env["TG_PROXY_HOST"])
- TG_PROXY_HOST = process.env["TG_PROXY_HOST"];
- if (process.env["TG_PROXY_PORT"])
- TG_PROXY_PORT = process.env["TG_PROXY_PORT"];
- if (process.env["TG_API_HOST"])
- TG_API_HOST = process.env["TG_API_HOST"];
-
- if (process.env["SMTP_NAME"])
- SMTP_NAME = process.env["SMTP_NAME"];
- if (process.env["SMTP_PASSWORD"])
- SMTP_PASSWORD = process.env["SMTP_PASSWORD"];
- if (process.env["SMTP_TO"])
- SMTP_TO = process.env["SMTP_TO"];
- if (process.env["SMTP_EMAIL"])
- SMTP_EMAIL = process.env["SMTP_EMAIL"];
- if (process.env["SMTP_SERVICE"])
- SMTP_SERVICE = process.env["SMTP_SERVICE"];
-
- if (process.env["DD_BOT_TOKEN" + UseGroupNotify] && Use_ddBotNotify) {
- DD_BOT_TOKEN = process.env["DD_BOT_TOKEN" + UseGroupNotify];
- if (process.env["DD_BOT_SECRET" + UseGroupNotify]) {
- DD_BOT_SECRET = process.env["DD_BOT_SECRET" + UseGroupNotify];
- }
- }
-
- if (process.env["QYWX_KEY" + UseGroupNotify] && Use_qywxBotNotify) {
- QYWX_KEY = process.env["QYWX_KEY" + UseGroupNotify];
- }
-
- if (process.env["QYWX_AM" + UseGroupNotify] && Use_qywxamNotify) {
- QYWX_AM = process.env["QYWX_AM" + UseGroupNotify];
- }
-
- if (process.env["FS_KEY" + UseGroupNotify] && Use_fsBotNotify) {
- FS_KEY = process.env["FS_KEY" + UseGroupNotify];
- }
-
- if (process.env["IGOT_PUSH_KEY" + UseGroupNotify] && Use_iGotNotify) {
- IGOT_PUSH_KEY = process.env["IGOT_PUSH_KEY" + UseGroupNotify];
- }
-
- if (process.env["PUSH_PLUS_TOKEN" + UseGroupNotify] && Use_pushPlusNotify) {
- PUSH_PLUS_TOKEN = process.env["PUSH_PLUS_TOKEN" + UseGroupNotify];
- }
- if (process.env["PUSH_PLUS_USER" + UseGroupNotify] && Use_pushPlusNotify) {
- PUSH_PLUS_USER = process.env["PUSH_PLUS_USER" + UseGroupNotify];
- }
- if (process.env["GOTIFY_URL" + UseGroupNotify]) {
- GOTIFY_URL = process.env["GOTIFY_URL" + UseGroupNotify];
- }
- if (process.env["GOTIFY_TOKEN" + UseGroupNotify]) {
- GOTIFY_TOKEN = process.env["GOTIFY_TOKEN" + UseGroupNotify];
- }
- if (process.env["GOTIFY_PRIORITY" + UseGroupNotify]) {
- GOTIFY_PRIORITY = process.env["GOTIFY_PRIORITY" + UseGroupNotify];
- }
- if (process.env["NTFY_URL" + UseGroupNotify]) {
- NTFY_URL = process.env["NTFY_URL" + UseGroupNotify];
- }
- if (process.env["NTFY_TOKEN" + UseGroupNotify]) {
- NTFY_TOKEN = process.env["NTFY_TOKEN" + UseGroupNotify];
- }
- if (process.env["NTFY_TOPIC" + UseGroupNotify]) {
- NTFY_TOPIC = process.env["NTFY_TOPIC" + UseGroupNotify];
- }
- if (process.env["NTFY_PRIORITY" + UseGroupNotify]) {
- NTFY_PRIORITY = process.env["NTFY_PRIORITY" + UseGroupNotify];
- }
- if (process.env["NTFY_ACTIONS" + UseGroupNotify]) {
- NTFY_ACTIONS = process.env["NTFY_ACTIONS" + UseGroupNotify];
- }
- if (process.env["BncrHost" + UseGroupNotify]) {
- BncrHost = process.env["BncrHost" + UseGroupNotify];
- }
- if (process.env["BncrToken" + UseGroupNotify]) {
- BncrToken = process.env["BncrToken" + UseGroupNotify];
- }
- //检查是否在不使用Remark进行名称替换的名单
- const notifySkipRemarkList = process.env.NOTIFY_SKIP_NAMETYPELIST ? process.env.NOTIFY_SKIP_NAMETYPELIST.split('&') : [];
- const titleIndex3 = notifySkipRemarkList.findIndex((item) => item === strTitle);
-
- if (ShowRemarkType != "1" && titleIndex3 == -1) {
- console.log("sendNotify正在处理账号Remark.....");
-
- const remarkFile = "/ql/data/scripts/CKName_cache.json";
- let localRemarks = [];
- try {
- if (fs.existsSync(remarkFile)) {
- localRemarks = JSON.parse(fs.readFileSync(remarkFile, "utf8"));
- console.log(`已读取本地备注文件`);
- } else {
- console.log(`未找到本地备注文件:${remarkFile}`);
- }
- } catch (e) {
- console.log("读取或解析 CKName_cache.json 失败:", e);
- localRemarks = [];
- }
-
- if (localRemarks.length > 0) {
- var strTempdesp = [];
- var strAllNotify = "";
-
- if (text.includes("京东资产统计")) {
- strTempdesp = desp.split('🎏🎏🎏🎏🎏🎏🎏🎏🎏🎏🎏🎏🎏');
- if (strTempdesp.length == 2) {
- strAllNotify = strTempdesp[0];
- desp = strTempdesp[1];
- }
- }
-
- for (let i = 0; i < localRemarks.length; i++) {
- const pt_pin = localRemarks[i].pt_pin;
- const remark = localRemarks[i].nickName || "";
- if (!pt_pin) continue;
-
- // nickName 优先使用 remark
- $.UserName = pt_pin;
- $.nickName = remark || pt_pin;
- $.Remark = remark;
-
- // 替换文本中的用户名
- try {
- text = text.replace(new RegExp(`${$.UserName}`, 'gm'), $.Remark);
- desp = desp.replace(new RegExp(`${$.UserName}`, 'gm'), $.Remark);
- strsummary = strsummary.replace(new RegExp(`${$.UserName}`, 'gm'), $.Remark);
- } catch (err) {
- console.log("替换出错了: " + err);
- }
- }
-
- console.log("Remark处理完成,开始发送通知...");
- if (strAllNotify) {
- desp = strAllNotify + "\n" + desp;
- }
- }
-
- }
- } catch (error) {
- console.error(error);
- }
-
- if (boolneedUpdate) {
- var str = JSON.stringify(TempCK, null, 2);
- fs.writeFile(strCKFile, str, function (err) {
- if (err) {
- console.log(err);
- console.log("更新CKName_cache.json失败!");
- } else {
- console.log("缓存文件CKName_cache.json更新成功!");
- }
- })
- }
-
- //提供6种通知
- desp = buildLastDesp(desp, author);
- await serverNotify(text, desp); //微信server酱
-
- if (PUSH_PLUS_TOKEN) {
- console.log("PUSH_PLUS TOKEN :" + PUSH_PLUS_TOKEN);
- }
- if (PUSH_PLUS_USER) {
- console.log("PUSH_PLUS USER :" + PUSH_PLUS_USER);
- }
- PushErrorTime = 0;
- await pushPlusNotify(text, desp); //pushplus(推送加)
- if (PushErrorTime > 0) {
- console.log("等待1分钟后重试.....");
- await $.wait(60000);
- await pushPlusNotify(text, desp); //pushplus(推送加)
- }
- if (PushErrorTime > 0) {
- console.log("等待1分钟后重试.....");
- await $.wait(60000);
- await pushPlusNotify(text, desp); //pushplus(推送加)
-
- }
-
- //由于上述两种微信通知需点击进去才能查看到详情,故text(标题内容)携带了账号序号以及昵称信息,方便不点击也可知道是哪个京东哪个活动
- text = text.match(/.*?(?=\s?-)/g) ? text.match(/.*?(?=\s?-)/g)[0] : text;
- await Promise.all([
- BarkNotify(text, desp, params), //iOS Bark APP
- tgBotNotify(text, desp), //telegram 机器人
- ddBotNotify(text, desp), //钉钉机器人
- qywxBotNotify(text, desp), //企业微信机器人
- qywxamNotify(text, desp, strsummary), //企业微信应用消息推送
- fsBotNotify(text, desp), //飞书机器人
- smtpNotify(text, desp), // SMTP 邮件
- iGotNotify(text, desp, params), //iGot
- gobotNotify(text, desp), //go-cqhttp
- gotifyNotify(text, desp), //gotify
- // ntfyNotify(text, desp), //ntfy 已禁用
- bncrNotify(text, desp), //bncr
- wxpusherNotify(text, desp), // wxpusher
- PushDeerNotify(text, desp) //pushdeer推送
- ]);
-}
-
-function getuuid(strRemark, PtPin) {
- var strTempuuid = "";
- if (strRemark) {
- var Tempindex = strRemark.indexOf("@@");
- if (Tempindex != -1) {
- console.log(PtPin + ": 检测到NVJDC的一对一格式,瑞思拜~!");
- var TempRemarkList = strRemark.split("@@");
- for (let j = 0; j < TempRemarkList.length; j++) {
- if (TempRemarkList[j]) {
- if (TempRemarkList[j].length > 4) {
- if (TempRemarkList[j].substring(0, 4) == "UID_") {
- strTempuuid = TempRemarkList[j];
- break;
- }
- }
- }
- }
- if (!strTempuuid) {
- console.log("检索资料失败...");
- }
- }
- }
- if (!strTempuuid && TempCKUid) {
- console.log("正在从CK_WxPusherUid文件中检索资料...");
- for (let j = 0; j < TempCKUid.length; j++) {
- if (PtPin == decodeURIComponent(TempCKUid[j].pt_pin)) {
- strTempuuid = TempCKUid[j].Uid;
- break;
- }
- }
- }
- return strTempuuid;
-}
-
-function getQLinfo(strCK, intcreated, strTimestamp, strRemark) {
- var strCheckCK = strCK.match(/pt_key=([^; ]+)(?=;?)/) && strCK.match(/pt_key=([^; ]+)(?=;?)/)[1];
- var strPtPin = decodeURIComponent(strCK.match(/pt_pin=([^; ]+)(?=;?)/) && strCK.match(/pt_pin=([^; ]+)(?=;?)/)[1]);
- var strReturn = "";
- if (strCheckCK.substring(0, 3) == "AAJ") {
- var DateCreated = new Date(intcreated);
- var DateTimestamp = new Date(strTimestamp);
- var DateToday = new Date();
- if (strRemark) {
- var Tempindex = strRemark.indexOf("@@");
- if (Tempindex != -1) {
- //console.log(strPtPin + ": 检测到NVJDC的备注格式,尝试获取登录时间,瑞思拜~!");
- var TempRemarkList = strRemark.split("@@");
- for (let j = 1; j < TempRemarkList.length; j++) {
- if (TempRemarkList[j]) {
- if (TempRemarkList[j].length == 13) {
- DateTimestamp = new Date(parseInt(TempRemarkList[j]));
- //console.log(strPtPin + ": 获取登录时间成功:" + GetDateTime(DateTimestamp));
- break;
- }
- }
- }
- }
- }
-
- //过期时间
- var UseDay = Math.ceil((DateToday.getTime() - DateCreated.getTime()) / 86400000);
- var LogoutDay = 30 - Math.ceil((DateToday.getTime() - DateTimestamp.getTime()) / 86400000);
- let Loginday = Math.ceil((DateToday.getTime() - DateTimestamp.getTime()) / 86400000)
- //if (LogoutDay < 1) {
- //} else {
- // strReturn = "\n【登录信息】已服务" + UseDay + "天(有效期约剩" + LogoutDay + "天)"
- //}
-
- }
- return strReturn
-}
-
-function getRemark(strRemark) {
- if (strRemark) {
- var Tempindex = strRemark.indexOf("@@");
- if (Tempindex != -1) {
- var TempRemarkList = strRemark.split("@@");
- return TempRemarkList[0].trim();
- } else {
- //这是为了处理ninjia的remark格式
- strRemark = strRemark.replace("remark=", "");
- strRemark = strRemark.replace(";", "");
- return strRemark.trim();
- }
- } else {
- return "";
- }
-}
-
-async function sendNotifybyWxPucher(text, desp, PtPin, author = '', strsummary = "") {
-
- try {
- var Uid = "";
- var UserRemark = "";
- var strTempdesp = [];
- var strAllNotify = "";
- if (text == "京东资产统计") {
- strTempdesp = desp.split('🎏🎏🎏🎏🎏🎏🎏🎏🎏🎏🎏🎏🎏');
- if (strTempdesp.length == 2) {
- strAllNotify = strTempdesp[0];
- desp = strTempdesp[1];
- }
-
- }
-
- if (WP_APP_TOKEN_ONE) {
- var tempEnv = await getEnvByPtPin(PtPin);
- if (tempEnv) {
- cookie = tempEnv.value;
- Uid = getuuid(tempEnv.remarks, PtPin);
- UserRemark = getRemark(tempEnv.remarks);
-
- if (Uid) {
- console.log("查询到Uid :" + Uid);
- WP_UIDS_ONE = Uid;
- console.log("正在发送一对一通知,请稍后...");
-
- if (text == "京东资产统计") {
- try {
- $.nickName = "";
- $.FoundPin = "";
- $.UserName = PtPin;
- if (tempEnv.status == 0) {
- if (TempCK) {
- for (let j = 0; j < TempCK.length; j++) {
- if (TempCK[j].pt_pin == $.UserName) {
- $.FoundPin = TempCK[j].pt_pin;
- $.nickName = TempCK[j].nickName;
- }
- }
- }
- //if (!$.FoundPin) {
- // //缓存文件中有没有这个账号,调用京东接口获取别名,并更新缓存文件
- // console.log($.UserName + "好像是新账号,尝试获取别名.....");
- // await GetnickName();
- // if (!$.nickName) {
- // console.log("别名获取失败,尝试调用另一个接口获取别名.....");
- // await GetnickName2();
- // }
- //}
- }
-
- $.nickName = $.nickName || $.UserName;
-
- //额外处理1,nickName包含星号
- $.nickName = $.nickName.replace(new RegExp(`[*]`, 'gm'), "[*]");
-
- var Tempinfo = "";
- if (tempEnv.created)
- Tempinfo = getQLinfo(cookie, tempEnv.created, tempEnv.timestamp, tempEnv.remarks);
- else
- if (tempEnv.updatedAt)
- Tempinfo = getQLinfo(cookie, tempEnv.createdAt, tempEnv.updatedAt, tempEnv.remarks);
- else
- Tempinfo = getQLinfo(cookie, tempEnv.createdAt, tempEnv.timestamp, tempEnv.remarks);
-
- if (Tempinfo) {
- Tempinfo = $.nickName + Tempinfo;
- desp = desp.replace(new RegExp(`${$.UserName}|${$.nickName}`, 'gm'), Tempinfo);
- }
-
- //额外处理2,nickName不包含星号,但是确实是手机号
- var tempname = $.UserName;
- if (tempname.length == 13 && tempname.substring(8)) {
- tempname = tempname.substring(0, 3) + "[*][*][*][*][*]" + tempname.substring(8);
- desp = desp.replace(new RegExp(tempname, 'gm'), $.Remark);
- }
-
- } catch (err) {
- console.log("替换出错了");
- console.log("Debug Name1 :" + $.UserName);
- console.log("Debug Name2 :" + $.nickName);
- console.log("Debug Remark :" + $.Remark);
- }
- }
- if (UserRemark) {
- text = text + " (" + UserRemark + ")";
- }
- console.log("处理完成,开始发送通知...");
- desp = buildLastDesp(desp, author);
- if (strAllNotify) {
- desp = strAllNotify + "\n" + desp;
- }
- await wxpusherNotifyByOne(text, desp, strsummary);
- } else {
- console.log("未查询到用户的Uid,取消一对一通知发送...");
- }
- }
- } else {
- console.log("变量WP_APP_TOKEN_ONE未配置WxPusher的appToken, 取消发送...");
-
- }
- } catch (error) {
- console.error(error);
- }
-
-}
-
-async function GetPtPin(text, desp) {
- try {
- let strPtPin = "";
- // 尝试从标题中提取(原逻辑)
- const TempList = text.split('- ');
- if (TempList.length > 1) {
- var strNickName = TempList[TempList.length - 1];
- console.log(`从标题捕获别名: ${strNickName}`);
- if (TempCK) {
- for (let j = 0; j < TempCK.length; j++) {
- if (TempCK[j].nickName === strNickName || TempCK[j].pt_pin === strNickName) {
- strPtPin = TempCK[j].pt_pin;
- console.log(`通过别名反查PtPin成功: ${strPtPin}`);
- return strPtPin;
- }
- }
- console.log(`别名反查PtPin失败: 1.用户更改了别名 2.可能是新用户,别名缓存还没有。`);
- }
- }
-
- // 尝试从内容中提取 PtPin(新增逻辑)
- const pinMatch = desp.match(/账号\d+\s+([^\s]+)/);
- if (pinMatch) {
- strPtPin = pinMatch[1];
- console.log(`从内容中提取到PtPin: ${strPtPin}`);
- return strPtPin;
- }
-
- // 尝试匹配其他常见格式
- const jdPinMatch = text.match(/(jd_[^\s]+)/) || desp.match(/(jd_[^\s]+)/);
- if (jdPinMatch) {
- strPtPin = jdPinMatch[1];
- console.log(`通过正则匹配到PtPin: ${strPtPin}`);
- return strPtPin;
- }
-
- console.log(`无法从通知中提取PtPin`);
- return "";
- } catch (error) {
- console.error(`GetPtPin函数出错: ${error}`);
- return "";
- }
-}
-
-async function isLoginByX1a0He(cookie) {
- return new Promise((resolve) => {
- const options = {
- url: 'https://plogin.m.jd.com/cgi-bin/ml/islogin',
- headers: {
- "Cookie": cookie,
- "referer": "https://h5.m.jd.com/",
- "User-Agent": "jdapp;iPhone;10.1.2;15.0;network/wifi;Mozilla/5.0 (iPhone; CPU iPhone OS 15_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1",
- },
- }
- $.get(options, (err, resp, data) => {
- try {
- if (data) {
- data = JSON.parse(data);
- if (data.islogin === "1") {
- console.log(`使用X1a0He写的接口加强检测: Cookie有效\n`)
- } else if (data.islogin === "0") {
- isLogin = false;
- console.log(`使用X1a0He写的接口加强检测: Cookie无效\n`)
- } else {
- console.log(`使用X1a0He写的接口加强检测: 未知返回,不作变更...\n`)
- }
- }
- } catch (e) {
- console.log(e);
- }
- finally {
- resolve();
- }
- });
- });
-}
-
-function bncrNotify(text, desp) {
- return new Promise(resolve => {
- try {
- if (BncrHost && BncrToken) {
- const options = {
- url: `${BncrHost}/api/qinglongMessage`,
- body: `title=${encodeURIComponent(text)}&message=${encodeURIComponent(
- desp
- )}&token=${BncrToken}`,
- headers: {
- 'Content-Type': 'application/x-www-form-urlencoded',
- },
- };
- $.post(options, (err, resp, data) => {
- if (err) {
- console.log('\nBncr发送通知调用API失败!!\n');
- console.log(err);
- } else {
- data = JSON.parse(data);
- if (data.code === 200) {
- console.log('\nBncr发送通知消息成功🎉\n');
- } else {
- console.log(`\nBncr发送通知调用API失败:${data.msg}\n`);
- }
- }
- });
- } else {
- resolve();
- }
- } catch (e) {
- $.logErr(`\nBncr发送通知调用API失败:`, e);
- } finally {
- resolve();
- }
- });
-}
-
-function gotifyNotify(text, desp) {
- return new Promise((resolve) => {
- if (GOTIFY_URL && GOTIFY_TOKEN) {
- const options = {
- url: `${GOTIFY_URL}/message?token=${GOTIFY_TOKEN}`,
- body: `title=${encodeURIComponent(text)}&message=${encodeURIComponent(desp)}&priority=${GOTIFY_PRIORITY}`,
- headers: {
- 'Content-Type': 'application/x-www-form-urlencoded',
- }
- };
- $.post(options, (err, resp, data) => {
- try {
- if (err) {
- console.log('gotify发送通知调用API失败!!\n');
- console.log(err);
- } else {
- data = JSON.parse(data);
- if (data.id) {
- console.log('gotify发送通知消息成功🎉\n');
- } else {
- console.log(`${data.message}\n`);
- }
- }
- } catch (e) {
- $.logErr(e, resp);
- }
- finally {
- resolve();
- }
- });
- } else {
- resolve();
- }
- });
-}
-
-function encodeRFC2047(str) {
- return `=?UTF-8?B?${Buffer.from(str, 'utf8').toString('base64')}?=`;
-}
-
-function ntfyNotify(text, desp) {
- console.log('ntfy发送通知\n');
- console.log('NTFY_URL:', NTFY_URL);
- console.log('NTFY_TOKEN:', NTFY_TOKEN);
- console.log('NTFY_TOPIC:', NTFY_TOPIC);
- return new Promise((resolve) => {
- if (NTFY_URL && NTFY_TOKEN && NTFY_TOPIC) {
- const options = {
- url: `${NTFY_URL}/${NTFY_TOPIC}?auth=${NTFY_TOKEN}`,
- body: Buffer.from(desp, 'utf-8').toString(),
- headers: {
- 'Icon': 'https://user-images.githubusercontent.com/22700758/191449379-f9f56204-0e31-4a16-be5a-331f52696a73.png',
- 'Title': encodeRFC2047(text),
- 'Priority': `${NTFY_PRIORITY}`,
- 'Actions': `${NTFY_ACTIONS}`,
- }
- };
- console.log('ntfy options:', options); // 打印 options 内容
- $.post(options, (err, resp, data) => {
- try {
- if (err) {
- console.log('ntfy发送通知调用API失败!!\n');
- console.log(err);
- } else {
- data = JSON.parse(data);
- if (data.id) {
- console.log('ntfy发送通知消息成功🎉\n');
- } else {
- console.log(`${data.message}\n`);
- }
- }
- } catch (e) {
- $.logErr(e, resp);
- }
- finally {
- resolve();
- }
- });
- } else {
- resolve();
- }
- });
-}
-
-function gobotNotify(text, desp, time = 2100) {
- return new Promise((resolve) => {
- if (GOBOT_URL) {
- const options = {
- url: `${GOBOT_URL}?access_token=${GOBOT_TOKEN}&${GOBOT_QQ}`,
- json: {
- message: `${text}\n${desp}`
- },
- headers: {
- 'Content-Type': 'application/json',
- },
- timeout,
- };
- setTimeout(() => {
- $.post(options, (err, resp, data) => {
- try {
- if (err) {
- console.log('发送go-cqhttp通知调用API失败!!\n');
- console.log(err);
- } else {
- data = JSON.parse(data);
- if (data.retcode === 0) {
- console.log('go-cqhttp发送通知消息成功🎉\n');
- } else if (data.retcode === 100) {
- console.log(`go-cqhttp发送通知消息异常: ${data.errmsg}\n`);
- } else {
- console.log(`go-cqhttp发送通知消息异常\n${JSON.stringify(data)}`);
- }
- }
- } catch (e) {
- $.logErr(e, resp);
- }
- finally {
- resolve(data);
- }
- });
- }, time);
- } else {
- resolve();
- }
- });
-}
-
-function serverNotify(text, desp, time = 2100) {
- return new Promise((resolve) => {
- if (SCKEY) {
- //微信server酱推送通知一个\n不会换行,需要两个\n才能换行,故做此替换
- desp = desp.replace(/[\n\r]/g, '\n\n');
- const options = {
- url: SCKEY.includes('SCT') ? `https://sctapi.ftqq.com/${SCKEY}.send` : `https://sc.ftqq.com/${SCKEY}.send`,
- body: `text=${text}&desp=${desp}`,
- headers: {
- 'Content-Type': 'application/x-www-form-urlencoded',
- },
- timeout,
- };
- setTimeout(() => {
- $.post(options, (err, resp, data) => {
- try {
- if (err) {
- console.log('发送通知调用API失败!!\n');
- console.log(err);
- } else {
- data = JSON.parse(data);
- //server酱和Server酱·Turbo版的返回json格式不太一样
- if (data.errno === 0 || data.data.errno === 0) {
- console.log('server酱发送通知消息成功🎉\n');
- } else if (data.errno === 1024) {
- // 一分钟内发送相同的内容会触发
- console.log(`server酱发送通知消息异常: ${data.errmsg}\n`);
- } else {
- console.log(`server酱发送通知消息异常\n${JSON.stringify(data)}`);
- }
- }
- } catch (e) {
- $.logErr(e, resp);
- }
- finally {
- resolve(data);
- }
- });
- }, time);
- } else {
- resolve();
- }
- });
-}
-
-function BarkNotify(text, desp, params = {}) {
- return new Promise((resolve) => {
- if (BARK_PUSH) {
- // 创建基础的 JSON 对象
- const jsonData = {
- title: text,
- body: desp,
- group: `${BARK_GROUP}`,
- sound: `${BARK_SOUND}`,
- };
-
- // 如果设置了图标URL,添加到 JSON 对象中
- if (BARK_ICON) {
- jsonData.icon = BARK_ICON;
- }
-
- const options = {
- url: `${BARK_PUSH}`,
- json: jsonData, // 使用上面构建的 jsonData 对象
- headers: {
- 'Content-Type': 'application/json; charset=utf-8',
- },
- timeout,
- };
-
- $.post(options, (err, resp, data) => {
- try {
- if (err) {
- console.log('Bark APP发送通知调用API失败!!\n');
- console.log(err);
- } else {
- data = JSON.parse(data);
- if (data.code === 200) {
- console.log('Bark APP发送通知消息成功🎉\n');
- } else {
- console.log(`${data.message}\n`);
- }
- }
- } catch (e) {
- $.logErr(e, resp);
- } finally {
- resolve();
- }
- });
- } else {
- resolve();
- }
- });
-}
-
-
-function tgBotNotify(text, desp) {
- return new Promise(resolve => {
- if (TG_BOT_TOKEN && TG_USER_ID) {
- const options = {
- url: `https://${TG_API_HOST}/bot${TG_BOT_TOKEN}/sendMessage`,
- json: {
- chat_id: `${TG_USER_ID}`,
- text: `${text}\n\n${desp}`,
- disable_web_page_preview: true
- },
- headers: {
- 'Content-Type': 'application/json',
- },
- timeout
- }
- if (TG_PROXY_HOST && TG_PROXY_PORT) {
- const tunnel = require("tunnel");
- const agent = {
- https: tunnel.httpsOverHttp({
- proxy: {
- host: TG_PROXY_HOST,
- port: TG_PROXY_PORT * 1,
- proxyAuth: TG_PROXY_AUTH
- }
- })
- }
- Object.assign(options, { agent })
- }
- $.post(options, (err, resp, data) => {
- try {
- if (err) {
- console.log('telegram发送通知消息失败!!\n')
- console.log(err);
- } else {
- data = JSON.parse(data);
- if (data.ok) {
- console.log('Telegram发送通知消息成功🎉\n')
- } else if (data.error_code === 400) {
- console.log('请主动给bot发送一条消息并检查接收用户ID是否正确。\n')
- } else if (data.error_code === 401) {
- console.log('Telegram bot token 填写错误。\n')
- }
- }
- } catch (e) {
- $.logErr(e, resp);
- } finally {
- resolve(data);
- }
- })
- } else {
- resolve()
- }
- })
-}
-
-function ddBotNotify(text, desp) {
- return new Promise((resolve) => {
- const options = {
- url: `https://oapi.dingtalk.com/robot/send?access_token=${DD_BOT_TOKEN}`,
- json: {
- msgtype: 'text',
- text: {
- content: ` ${text}\n\n${desp}`,
- },
- },
- headers: {
- 'Content-Type': 'application/json',
- },
- timeout,
- };
- if (DD_BOT_TOKEN && DD_BOT_SECRET) {
- const crypto = require('crypto');
- const dateNow = Date.now();
- const hmac = crypto.createHmac('sha256', DD_BOT_SECRET);
- hmac.update(`${dateNow}\n${DD_BOT_SECRET}`);
- const result = encodeURIComponent(hmac.digest('base64'));
- options.url = `${options.url}×tamp=${dateNow}&sign=${result}`;
- $.post(options, (err, resp, data) => {
- try {
- if (err) {
- console.log('钉钉发送通知消息失败!!\n');
- console.log(err);
- } else {
- data = JSON.parse(data);
- if (data.errcode === 0) {
- console.log('钉钉发送通知消息成功🎉。\n');
- } else {
- console.log(`${data.errmsg}\n`);
- }
- }
- } catch (e) {
- $.logErr(e, resp);
- }
- finally {
- resolve(data);
- }
- });
- } else if (DD_BOT_TOKEN) {
- $.post(options, (err, resp, data) => {
- try {
- if (err) {
- console.log('钉钉发送通知消息失败!!\n');
- console.log(err);
- } else {
- data = JSON.parse(data);
- if (data.errcode === 0) {
- console.log('钉钉发送通知消息完成。\n');
- } else {
- console.log(`${data.errmsg}\n`);
- }
- }
- } catch (e) {
- $.logErr(e, resp);
- }
- finally {
- resolve(data);
- }
- });
- } else {
- resolve();
- }
- });
-}
-
-function qywxBotNotify(text, desp) {
- return new Promise((resolve) => {
- const options = {
- url: `https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=${QYWX_KEY}`,
- json: {
- msgtype: 'text',
- text: {
- content: ` ${text}\n\n${desp}`,
- },
- },
- headers: {
- 'Content-Type': 'application/json',
- },
- timeout,
- };
- if (QYWX_KEY) {
- $.post(options, (err, resp, data) => {
- try {
- if (err) {
- console.log('企业微信发送通知消息失败!!\n');
- console.log(err);
- } else {
- data = JSON.parse(data);
- if (data.errcode === 0) {
- console.log('企业微信发送通知消息成功🎉。\n');
- } else {
- console.log(`${data.errmsg}\n`);
- }
- }
- } catch (e) {
- $.logErr(e, resp);
- }
- finally {
- resolve(data);
- }
- });
- } else {
- resolve();
- }
- });
-}
-async function smtpNotify(text, desp) {
- if (![SMTP_EMAIL, SMTP_PASSWORD].every(Boolean) || !SMTP_SERVICE) {
- return;
- }
-
- try {
- const nodemailer = require('nodemailer');
- const transporter = nodemailer.createTransport({
- service: SMTP_SERVICE,
- auth: {
- user: SMTP_EMAIL,
- pass: SMTP_PASSWORD,
- },
- });
-
- const addr = SMTP_NAME ? `"${SMTP_NAME}" <${SMTP_EMAIL}>` : SMTP_EMAIL;
- const info = await transporter.sendMail({
- from: addr,
- to: SMTP_TO ? SMTP_TO.split(';') : addr,
- subject: text,
- html: `${desp.replace(/\n/g, '
')}`,
- });
-
- transporter.close();
-
- if (info.messageId) {
- console.log('SMTP 发送通知消息成功🎉\n');
- return true;
- }
- console.log('SMTP 发送通知消息失败😞\n');
- } catch (e) {
- console.log('SMTP 发送通知消息出现异常😞\n', e);
- }
-}
-function fsBotNotify(text, desp) {
- return new Promise((resolve) => {
- const options = {
- url: `https://open.feishu.cn/open-apis/bot/v2/hook/${FS_KEY}`,
- json: {
- msg_type: 'text',
- content: {
- text: ` ${text}\n\n${desp}`,
- },
- },
- headers: {
- 'Content-Type': 'application/json',
- },
- timeout,
- };
- if (FS_KEY) {
- $.post(options, (err, resp, data) => {
- try {
- if (err) {
- console.log('飞书发送通知消息失败!!\n');
- console.log(err);
- } else {
- data = JSON.parse(data);
- if (data.errcode === 0) {
- console.log('飞书发送通知消息成功🎉。\n');
- } else {
- console.log(`${data.errmsg}\n`);
- }
- }
- } catch (e) {
- $.logErr(e, resp);
- }
- finally {
- resolve(data);
- }
- });
- } else {
- resolve();
- }
- });
-}
-
-function buildLastDesp(desp, author = '') {
- author = process.env.NOTIFY_AUTHOR || author;
- if (process.env.NOTIFY_AUTHOR_BLANK || !author) {
- return desp.trim();
- } else {
- if (!author.match(/本通知 By/)) {
- author = `\n\n${author}`
- }
- return desp.trim() + author// + "\n" + GetDateTime(new Date());
- }
-}
-
-function ChangeUserId(desp) {
- const QYWX_AM_AY = QYWX_AM.split(',');
- if (QYWX_AM_AY[2]) {
- const userIdTmp = QYWX_AM_AY[2].split('|');
- let userId = '';
- for (let i = 0; i < userIdTmp.length; i++) {
- const count = '账号' + (i + 1);
- const count2 = '签到号 ' + (i + 1);
- if (desp.match(count2)) {
- userId = userIdTmp[i];
- }
- }
- if (!userId)
- userId = QYWX_AM_AY[2];
- return userId;
- } else {
- return '@all';
- }
-}
-
-function qywxamNotify(text, desp, strsummary = "") {
- return new Promise((resolve) => {
- if (QYWX_AM) {
- const QYWX_AM_AY = QYWX_AM.split(',');
- const options_accesstoken = {
- url: `https://qyapi.weixin.qq.com/cgi-bin/gettoken`,
- json: {
- corpid: `${QYWX_AM_AY[0]}`,
- corpsecret: `${QYWX_AM_AY[1]}`,
- },
- headers: {
- 'Content-Type': 'application/json',
- },
- timeout,
- };
- $.post(options_accesstoken, (err, resp, data) => {
- html = desp.replace(/\n/g, '
');
- html = `${html}`;
- if (strsummary == "") {
- strsummary = desp;
- }
- var json = JSON.parse(data);
- accesstoken = json.access_token;
- let options;
-
- switch (QYWX_AM_AY[4]) {
- case '0':
- options = {
- msgtype: 'textcard',
- textcard: {
- title: `${text}`,
- description: `${strsummary}`,
- url: 'https://github.com/whyour/qinglong',
- btntxt: '更多',
- },
- };
- break;
-
- case '1':
- options = {
- msgtype: 'text',
- text: {
- content: `${text}\n\n${desp}`,
- },
- };
- break;
-
- default:
- options = {
- msgtype: 'mpnews',
- mpnews: {
- articles: [{
- title: `${text}`,
- thumb_media_id: `${QYWX_AM_AY[4]}`,
- author: `智能助手`,
- content_source_url: ``,
- content: `${html}`,
- digest: `${strsummary}`,
- },],
- },
- };
- }
- if (!QYWX_AM_AY[4]) {
- //如不提供第四个参数,则默认进行文本消息类型推送
- options = {
- msgtype: 'text',
- text: {
- content: `${text}\n\n${desp}`,
- },
- };
- }
- options = {
- url: `https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=${accesstoken}`,
- json: {
- touser: `${ChangeUserId(desp)}`,
- agentid: `${QYWX_AM_AY[3]}`,
- safe: '0',
- ...options,
- },
- headers: {
- 'Content-Type': 'application/json',
- },
- };
-
- $.post(options, (err, resp, data) => {
- try {
- if (err) {
- console.log('成员ID:' + ChangeUserId(desp) + '企业微信应用消息发送通知消息失败!!\n');
- console.log(err);
- } else {
- data = JSON.parse(data);
- if (data.errcode === 0) {
- console.log('成员ID:' + ChangeUserId(desp) + '企业微信应用消息发送通知消息成功🎉。\n');
- } else {
- console.log(`${data.errmsg}\n`);
- }
- }
- } catch (e) {
- $.logErr(e, resp);
- }
- finally {
- resolve(data);
- }
- });
- });
- } else {
- resolve();
- }
- });
-}
-
-function iGotNotify(text, desp, params = {}) {
- return new Promise((resolve) => {
- if (IGOT_PUSH_KEY) {
- // 校验传入的IGOT_PUSH_KEY是否有效
- const IGOT_PUSH_KEY_REGX = new RegExp('^[a-zA-Z0-9]{24}$');
- if (!IGOT_PUSH_KEY_REGX.test(IGOT_PUSH_KEY)) {
- console.log('您所提供的IGOT_PUSH_KEY无效\n');
- resolve();
- return;
- }
- const options = {
- url: `https://push.hellyw.com/${IGOT_PUSH_KEY.toLowerCase()}`,
- body: `title=${text}&content=${desp}&${querystring.stringify(params)}`,
- headers: {
- 'Content-Type': 'application/x-www-form-urlencoded',
- },
- timeout,
- };
- $.post(options, (err, resp, data) => {
- try {
- if (err) {
- console.log('发送通知调用API失败!!\n');
- console.log(err);
- } else {
- if (typeof data === 'string')
- data = JSON.parse(data);
- if (data.ret === 0) {
- console.log('iGot发送通知消息成功🎉\n');
- } else {
- console.log(`iGot发送通知消息失败:${data.errMsg}\n`);
- }
- }
- } catch (e) {
- $.logErr(e, resp);
- }
- finally {
- resolve(data);
- }
- });
- } else {
- resolve();
- }
- });
-}
-
-function pushPlusNotify(text, desp) {
- return new Promise((resolve) => {
- if (PUSH_PLUS_TOKEN) {
-
- //desp = `${desp}`;
-
- desp = desp.replace(/[\n\r]/g, '
'); // 默认为html, 不支持plaintext
- const body = {
- token: `${PUSH_PLUS_TOKEN}`,
- title: `${text}`,
- content: `${desp}`,
- topic: `${PUSH_PLUS_USER}`,
- };
- const options = {
- url: `https://www.pushplus.plus/send`,
- body: JSON.stringify(body),
- headers: {
- 'Content-Type': ' application/json',
- },
- timeout,
- };
- $.post(options, (err, resp, data) => {
- try {
- if (err) {
- console.log(`push+发送${PUSH_PLUS_USER ? '一对多' : '一对一'}通知消息失败!!\n`);
- PushErrorTime += 1;
- console.log(err);
- } else {
- data = JSON.parse(data);
- if (data.code === 200) {
- console.log(`push+发送${PUSH_PLUS_USER ? '一对多' : '一对一'}通知消息完成。\n`);
- PushErrorTime = 0;
- } else {
- console.log(`push+发送${PUSH_PLUS_USER ? '一对多' : '一对一'}通知消息失败:${data.msg}\n`);
- PushErrorTime += 1;
- }
- }
- } catch (e) {
- $.logErr(e, resp);
- }
- finally {
- resolve(data);
- }
- });
- } else {
- resolve();
- }
- });
-}
-function wxpusherNotifyByOne(text, desp, strsummary = "") {
- return new Promise((resolve) => {
- if (WP_APP_TOKEN_ONE) {
- var WPURL = "";
- if (strsummary) {
- strsummary = text + "\n" + strsummary;
- } else {
- strsummary = text + "\n" + desp;
- }
-
- if (strsummary.length > 96) {
- strsummary = strsummary.substring(0, 95) + "...";
- }
- let uids = [];
- for (let i of WP_UIDS_ONE.split(";")) {
- if (i.length != 0)
- uids.push(i);
- };
- let topicIds = [];
-
- //desp = `${desp}`;
- desp = desp.replace(/[\n\r]/g, '
'); // 默认为html, 不支持plaintext
- desp = ``;
-
- const body = {
- appToken: `${WP_APP_TOKEN_ONE}`,
- content: `${desp}`,
- summary: `${strsummary}`,
- contentType: 2,
- topicIds: topicIds,
- uids: uids,
- url: `${WPURL}`,
- };
- const options = {
- url: `http://wxpusher.zjiecode.com/api/send/message`,
- body: JSON.stringify(body),
- headers: {
- "Content-Type": "application/json",
- },
- timeout,
- };
- $.post(options, (err, resp, data) => {
- try {
- if (err) {
- console.log("WxPusher 发送通知调用 API 失败!!\n");
- console.log(err);
- } else {
- data = JSON.parse(data);
- if (data.code === 1000) {
- console.log("WxPusher 发送通知消息成功!\n");
- }
- }
- } catch (e) {
- $.logErr(e, resp);
- }
- finally {
- resolve(data);
- }
- });
- } else {
- resolve();
- }
- });
-}
-
-function wxpusherNotify(text, desp) {
- return new Promise((resolve) => {
- if (WP_APP_TOKEN) {
- let uids = [];
- for (let i of WP_UIDS.split(";")) {
- if (i.length != 0)
- uids.push(i);
- };
- let topicIds = [];
- for (let i of WP_TOPICIDS.split(";")) {
- if (i.length != 0)
- topicIds.push(i);
- };
- desp = `${text}\n\n${desp}`;
- desp = desp.replace(/[\n\r]/g, '
'); // 默认为html, 不支持plaintext
- const body = {
- appToken: `${WP_APP_TOKEN}`,
- content: `${text}\n\n${desp}`,
- summary: `${text}`,
- contentType: 2,
- topicIds: topicIds,
- uids: uids,
- url: `${WP_URL}`,
- };
- const options = {
- url: `http://wxpusher.zjiecode.com/api/send/message`,
- body: JSON.stringify(body),
- headers: {
- "Content-Type": "application/json",
- },
- timeout,
- };
- $.post(options, (err, resp, data) => {
- try {
- if (err) {
- console.log("WxPusher 发送通知调用 API 失败!!\n");
- console.log(err);
- } else {
- data = JSON.parse(data);
- if (data.code === 1000) {
- console.log("WxPusher 发送通知消息成功!\n");
- }
- }
- } catch (e) {
- $.logErr(e, resp);
- }
- finally {
- resolve(data);
- }
- });
- } else {
- resolve();
- }
- });
-}
-
-function PushDeerNotify(text, desp) {
- return new Promise((resolve) => {
- if (PUSHDEER_KEY) {
- desp = encodeURI(desp);
- desp = desp.replace(/%0A/g, '%0A%0A');
- const options = {
- url: `https://api2.pushdeer.com/message/push`,
- body: `pushkey=${PUSHDEER_KEY}&text=${text}&desp=${desp}&type="markdown"`,
- headers: {
- 'Content-Type': 'application/x-www-form-urlencoded',
- },
- timeout: 5000,
- };
- $.post(options, (err, resp, data) => {
- try {
- if (err) {
- console.log('发送通知调用API失败!!\n');
- console.log(err);
- } else {
- data = JSON.parse(data);
- // 通过返回的result的长度来判断是否成功
- if (
- data.content.result.length !== undefined &&
- data.content.result.length > 0
- ) {
- console.log('PushDeer发送通知消息成功🎉\n');
- } else {
- console.log(
- `PushDeer发送通知消息异常\n${JSON.stringify(data)}`,
- );
- }
- }
- } catch (e) {
- $.logErr(e, resp);
- } finally {
- resolve(data);
- }
- });
- } else {
- resolve();
- }
- });
-}
-
-function GetDateTime(date) {
-
- var timeString = "";
-
- var timeString = date.getFullYear() + "-";
- if ((date.getMonth() + 1) < 10)
- timeString += "0" + (date.getMonth() + 1) + "-";
- else
- timeString += (date.getMonth() + 1) + "-";
-
- if ((date.getDate()) < 10)
- timeString += "0" + date.getDate() + " ";
- else
- timeString += date.getDate() + " ";
-
- if ((date.getHours()) < 10)
- timeString += "0" + date.getHours() + ":";
- else
- timeString += date.getHours() + ":";
-
- if ((date.getMinutes()) < 10)
- timeString += "0" + date.getMinutes() + ":";
- else
- timeString += date.getMinutes() + ":";
-
- if ((date.getSeconds()) < 10)
- timeString += "0" + date.getSeconds();
- else
- timeString += date.getSeconds();
-
- return timeString;
-}
-
-function GetnickName() {
- return new Promise(async resolve => {
- const options = {
- url: "https://me-api.jd.com/user_new/info/GetJDUserInfoUnion",
- headers: {
- Host: "me-api.jd.com",
- Accept: "*/*",
- Connection: "keep-alive",
- Cookie: cookie,
- "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36 Edg/106.0.1370.42",
- "Accept-Language": "zh-cn",
- "Referer": "https://home.m.jd.com/myJd/newhome.action?sceneval=2&ufc=&",
- "Accept-Encoding": "gzip, deflate, br"
- }
- }
- $.get(options, (err, resp, data) => {
- try {
- if (err) {
- $.logErr(err)
- } else {
- if (data) {
- data = JSON.parse(data);
- if (data['retcode'] === "1001") {
- return;
- }
- if (data['retcode'] === "0" && data.data && data.data.hasOwnProperty("userInfo")) {
- $.nickName = data.data.userInfo.baseInfo.nickname;
- }
-
- } else {
- $.log('京东服务器返回空数据');
- }
- }
- } catch (e) {
- $.logErr(e)
- }
- finally {
- resolve();
- }
- })
- })
-}
-
-function GetnickName2() {
- return new Promise(async (resolve) => {
- const options = {
- "url": `https://wq.jd.com/user/info/QueryJDUserInfo?sceneval=2`,
- "headers": {
- "Accept": "application/json,text/plain, */*",
- "Content-Type": "application/x-www-form-urlencoded",
- "Accept-Encoding": "gzip, deflate, br",
- "Accept-Language": "zh-cn",
- "Connection": "keep-alive",
- "Cookie": cookie,
- "Referer": "https://wqs.jd.com/my/jingdou/my.shtml?sceneval=2",
- "User-Agent": $.isNode() ? (process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : (require('./USER_AGENTS').USER_AGENT)) : ($.getdata('JDUA') ? $.getdata('JDUA') : "jdapp;iPhone;9.4.4;14.3;network/4g;Mozilla/5.0 (iPhone; CPU iPhone OS 14_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1")
- }
- };
- $.post(options, (err, resp, data) => {
- try {
- if (err) {
- $.logErr(err);
- } else {
- if (data) {
- data = JSON.parse(data);
- if (data['retcode'] === 13) {
- $.isLogin = false; //cookie过期
- return
- }
- if (data['retcode'] === 0) {
- $.nickName = (data['base'] && data['base'].nickname) || "";
- }
- } else {
- $.log('京东服务器返回空数据');
- }
- }
- } catch (e) {
- $.logErr(e);
- }
- finally {
- resolve();
- }
- });
- });
-}
-const got = require('got');
-require('dotenv').config();
-const tokenFileList = ['/ql/data/db/keyv.sqlite', '/ql/data/config/auth.json', '/ql/config/auth.json'];
-let authFile = getLatestFile(tokenFileList);
-const api = got.extend({
- prefixUrl: 'http://127.0.0.1:5600',
- retry: { limit: 0 },
-});
-function getLatestFile(files) {
- let latestFile = null;
- let latestMtime = 0;
- for (const file of files) {
- try {
- const stats = fs.statSync(file);
- const mtime = stats.mtimeMs;
- if (mtime > latestMtime) {
- latestMtime = mtime;
- latestFile = file;
- }
- } catch (e) {
- }
- }
- return latestFile;
-}
-
-async function getToken() {
- const authConfig = await fs.readFileSync(authFile);
- // console.log(authConfig.toString().match(/"token":"(.*?)",/)[1])
- return authConfig.toString().match(/"token":"([^"]*)"(?!.*"token":)/)[1];
-}
-// getToken()
-
-async function getEnvs(){
- const token = await getToken();
- if(!token) {
- console.log('token为空,跳过获取环境变量');
- return [];
- }
- try {
- const body = await api({
- url: 'api/envs',
- searchParams: {
- searchValue: 'JD_COOKIE',
- t: Date.now(),
- },
- headers: {
- Accept: 'application/json',
- authorization: `Bearer ${token}`,
- },
- }).json();
- console.log(`获取环境变量成功!`);
- return body.data || [];
- } catch (err) {
- console.log(`获取环境变量失败: ${err.message}\n`);
- return [];
- }
-}
-
-
-async function getEnvsCount(){
- const data = await getEnvs();
- return data.length;
-};
-
-async function addEnv(cookie, remarks){
- const token = await getToken();
- const body = await api({
- method: 'post',
- url: 'api/envs',
- params: { t: Date.now() },
- json: [{
- name: 'JD_COOKIE',
- value: cookie,
- remarks,
- }],
- headers: {
- Accept: 'application/json',
- authorization: `Bearer ${token}`,
- 'Content-Type': 'application/json;charset=UTF-8',
- },
- }).json();
- return body;
-}
-
-async function updateEnv(cookie, eid, remarks){
- const token = await getToken();
- const body = await api({
- method: 'put',
- url: 'api/envs',
- params: { t: Date.now() },
- json: {
- name: 'JD_COOKIE',
- value: cookie,
- _id: eid,
- remarks,
- },
- headers: {
- Accept: 'application/json',
- authorization: `Bearer ${token}`,
- 'Content-Type': 'application/json;charset=UTF-8',
- },
- }).json();
- return body;
-};
-
-async function updateEnv11(cookie, eid, remarks){
- const token = await getToken();
- const body = await api({
- method: 'put',
- url: 'api/envs',
- params: { t: Date.now() },
- json: {
- name: 'JD_COOKIE',
- value: cookie,
- id: eid,
- remarks,
- },
- headers: {
- Accept: 'application/json',
- authorization: `Bearer ${token}`,
- 'Content-Type': 'application/json;charset=UTF-8',
- },
- }).json();
- return body;
-};
-
-async function DisableCk(eid){
- const token = await getToken();
- const body = await api({
- method: 'put',
- url: 'api/envs/disable',
- params: { t: Date.now() },
- body: JSON.stringify([eid]),
- headers: {
- Accept: 'application/json',
- authorization: `Bearer ${token}`,
- 'Content-Type': 'application/json;charset=UTF-8',
- },
- }).json();
- return body;
-};
-
-async function EnableCk(eid){
- const token = await getToken();
- const body = await api({
- method: 'put',
- url: 'api/envs/enable',
- params: { t: Date.now() },
- body: JSON.stringify([eid]),
- headers: {
- Accept: 'application/json',
- authorization: `Bearer ${token}`,
- 'Content-Type': 'application/json;charset=UTF-8',
- },
- }).json();
- return body;
-};
-
-async function getstatus(eid){
- const envs = await getEnvs();
- var tempid = 0;
- for (let i = 0; i < envs.length; i++) {
- tempid = 0;
- if (envs[i]._id) {
- tempid = envs[i]._id;
- }
- if (envs[i].id) {
- tempid = envs[i].id;
- }
- if (tempid == eid) {
- return envs[i].status;
- }
- }
- return 99;
-};
-
-async function getEnvById(eid){
- const envs = await getEnvs();
- var tempid = 0;
- for (let i = 0; i < envs.length; i++) {
- tempid = 0;
- if (envs[i]._id) {
- tempid = envs[i]._id;
- }
- if (envs[i].id) {
- tempid = envs[i].id;
- }
- if (tempid == eid) {
- return envs[i].value;
- }
- }
- return "";
-};
-
-async function getEnvByPtPin(Ptpin){
- console.log('正在获取失效账号的环境变量...');
- const envs = await getEnvs();
- for (let i = 0; i < envs.length; i++) {
- var tempptpin = decodeURIComponent(envs[i].value.match(/pt_pin=([^; ]+)(?=;?)/) && envs[i].value.match(/pt_pin=([^; ]+)(?=;?)/)[1]);
- if(tempptpin==Ptpin){
- return envs[i];
- }
- }
- return "";
-};
-
-async function delEnv(eid){
- const token = await getToken();
- const body = await api({
- method: 'delete',
- url: 'api/envs',
- params: { t: Date.now() },
- body: JSON.stringify([eid]),
- headers: {
- Accept: 'application/json',
- authorization: `Bearer ${token}`,
- 'Content-Type': 'application/json;charset=UTF-8',
- },
- }).json();
- return body;
-};
-module.exports = {
- sendNotify,
- sendNotifybyWxPucher,
- BARK_PUSH,
-};
-
-// prettier-ignore
-function Env(t, s) {
- return new (class {
- constructor(t, s) {
- (this.name = t),
- (this.data = null),
- (this.dataFile = 'box.dat'),
- (this.logs = []),
- (this.logSeparator = '\n'),
- (this.startTime = new Date().getTime()),
- Object.assign(this, s),
- this.log('', `\ud83d\udd14${this.name}, \u5f00\u59cb!`);
- }
- isNode() {
- return 'undefined' != typeof module && !!module.exports;
- }
- isQuanX() {
- return 'undefined' != typeof $task;
- }
- isSurge() {
- return 'undefined' != typeof $httpClient && 'undefined' == typeof $loon;
- }
- isLoon() {
- return 'undefined' != typeof $loon;
- }
- getScript(t) {
- return new Promise((s) => {
- $.get({
- url: t
- }, (t, e, i) => s(i));
- });
- }
- runScript(t, s) {
- return new Promise((e) => {
- let i = this.getdata('@chavy_boxjs_userCfgs.httpapi');
- i = i ? i.replace(/\n/g, '').trim() : i;
- let o = this.getdata('@chavy_boxjs_userCfgs.httpapi_timeout');
- (o = o ? 1 * o : 20),
- (o = s && s.timeout ? s.timeout : o);
- const [h, a] = i.split('@'),
- r = {
- url: `http://${a}/v1/scripting/evaluate`,
- body: {
- script_text: t,
- mock_type: 'cron',
- timeout: o
- },
- headers: {
- 'X-Key': h,
- Accept: '*/*'
- },
- };
- $.post(r, (t, s, i) => e(i));
- }).catch((t) => this.logErr(t));
- }
- loaddata() {
- if (!this.isNode())
- return {}; {
- (this.fs = this.fs ? this.fs : require('fs')),
- (this.path = this.path ? this.path : require('path'));
- const t = this.path.resolve(this.dataFile),
- s = this.path.resolve(process.cwd(), this.dataFile),
- e = this.fs.existsSync(t),
- i = !e && this.fs.existsSync(s);
- if (!e && !i)
- return {}; {
- const i = e ? t : s;
- try {
- return JSON.parse(this.fs.readFileSync(i));
- } catch (t) {
- return {};
- }
- }
- }
- }
- writedata() {
- if (this.isNode()) {
- (this.fs = this.fs ? this.fs : require('fs')),
- (this.path = this.path ? this.path : require('path'));
- const t = this.path.resolve(this.dataFile),
- s = this.path.resolve(process.cwd(), this.dataFile),
- e = this.fs.existsSync(t),
- i = !e && this.fs.existsSync(s),
- o = JSON.stringify(this.data);
- e ? this.fs.writeFileSync(t, o) : i ? this.fs.writeFileSync(s, o) : this.fs.writeFileSync(t, o);
- }
- }
- lodash_get(t, s, e) {
- const i = s.replace(/\[(\d+)\]/g, '.$1').split('.');
- let o = t;
- for (const t of i)
- if (((o = Object(o)[t]), void 0 === o))
- return e;
- return o;
- }
- lodash_set(t, s, e) {
- return Object(t) !== t ? t : (Array.isArray(s) || (s = s.toString().match(/[^.[\]]+/g) || []), (s.slice(0, -1).reduce((t, e, i) => (Object(t[e]) === t[e] ? t[e] : (t[e] = Math.abs(s[i + 1]) >> 0 == +s[i + 1] ? [] : {})), t)[s[s.length - 1]] = e), t);
- }
- getdata(t) {
- let s = this.getval(t);
- if (/^@/.test(t)) {
- const [, e, i] = /^@(.*?)\.(.*?)$/.exec(t),
- o = e ? this.getval(e) : '';
- if (o)
- try {
- const t = JSON.parse(o);
- s = t ? this.lodash_get(t, i, '') : s;
- } catch (t) {
- s = '';
- }
- }
- return s;
- }
- setdata(t, s) {
- let e = !1;
- if (/^@/.test(s)) {
- const [, i, o] = /^@(.*?)\.(.*?)$/.exec(s),
- h = this.getval(i),
- a = i ? ('null' === h ? null : h || '{}') : '{}';
- try {
- const s = JSON.parse(a);
- this.lodash_set(s, o, t),
- (e = this.setval(JSON.stringify(s), i));
- } catch (s) {
- const h = {};
- this.lodash_set(h, o, t),
- (e = this.setval(JSON.stringify(h), i));
- }
- } else
- e = $.setval(t, s);
- return e;
- }
- getval(t) {
- return this.isSurge() || this.isLoon() ? $persistentStore.read(t) : this.isQuanX() ? $prefs.valueForKey(t) : this.isNode() ? ((this.data = this.loaddata()), this.data[t]) : (this.data && this.data[t]) || null;
- }
- setval(t, s) {
- return this.isSurge() || this.isLoon() ? $persistentStore.write(t, s) : this.isQuanX() ? $prefs.setValueForKey(t, s) : this.isNode() ? ((this.data = this.loaddata()), (this.data[s] = t), this.writedata(), !0) : (this.data && this.data[s]) || null;
- }
- initGotEnv(t) {
- (this.got = this.got ? this.got : require('got')),
- (this.cktough = this.cktough ? this.cktough : require('tough-cookie')),
- (this.ckjar = this.ckjar ? this.ckjar : new this.cktough.CookieJar()),
- t && ((t.headers = t.headers ? t.headers : {}), void 0 === t.headers.Cookie && void 0 === t.cookieJar && (t.cookieJar = this.ckjar));
- }
- get(t, s = () => { }) {
- t.headers && (delete t.headers['Content-Type'], delete t.headers['Content-Length']),
- this.isSurge() || this.isLoon() ? $httpClient.get(t, (t, e, i) => {
- !t && e && ((e.body = i), (e.statusCode = e.status)),
- s(t, e, i);
- }) : this.isQuanX() ? $task.fetch(t).then((t) => {
- const {
- statusCode: e,
- statusCode: i,
- headers: o,
- body: h
- } = t;
- s(null, {
- status: e,
- statusCode: i,
- headers: o,
- body: h
- }, h);
- }, (t) => s(t)) : this.isNode() && (this.initGotEnv(t), this.got(t).on('redirect', (t, s) => {
- try {
- const e = t.headers['set-cookie'].map(this.cktough.Cookie.parse).toString();
- this.ckjar.setCookieSync(e, null),
- (s.cookieJar = this.ckjar);
- } catch (t) {
- this.logErr(t);
- }
- }).then((t) => {
- const {
- statusCode: e,
- statusCode: i,
- headers: o,
- body: h
- } = t;
- s(null, {
- status: e,
- statusCode: i,
- headers: o,
- body: h
- }, h);
- }, (t) => s(t)));
- }
- post(t, s = () => { }) {
- if ((t.body && t.headers && !t.headers['Content-Type'] && (t.headers['Content-Type'] = 'application/x-www-form-urlencoded'), delete t.headers['Content-Length'], this.isSurge() || this.isLoon()))
- $httpClient.post(t, (t, e, i) => {
- !t && e && ((e.body = i), (e.statusCode = e.status)),
- s(t, e, i);
- });
- else if (this.isQuanX())
- (t.method = 'POST'), $task.fetch(t).then((t) => {
- const {
- statusCode: e,
- statusCode: i,
- headers: o,
- body: h
- } = t;
- s(null, {
- status: e,
- statusCode: i,
- headers: o,
- body: h
- }, h);
- }, (t) => s(t));
- else if (this.isNode()) {
- this.initGotEnv(t);
- const {
- url: e,
- ...i
- } = t;
- this.got.post(e, i).then((t) => {
- const {
- statusCode: e,
- statusCode: i,
- headers: o,
- body: h
- } = t;
- s(null, {
- status: e,
- statusCode: i,
- headers: o,
- body: h
- }, h);
- }, (t) => s(t));
- }
- }
- time(t) {
- let s = {
- 'M+': new Date().getMonth() + 1,
- 'd+': new Date().getDate(),
- 'H+': new Date().getHours(),
- 'm+': new Date().getMinutes(),
- 's+': new Date().getSeconds(),
- 'q+': Math.floor((new Date().getMonth() + 3) / 3),
- S: new Date().getMilliseconds(),
- };
- /(y+)/.test(t) && (t = t.replace(RegExp.$1, (new Date().getFullYear() + '').substr(4 - RegExp.$1.length)));
- for (let e in s)
- new RegExp('(' + e + ')').test(t) && (t = t.replace(RegExp.$1, 1 == RegExp.$1.length ? s[e] : ('00' + s[e]).substr(('' + s[e]).length)));
- return t;
- }
- msg(s = t, e = '', i = '', o) {
- const h = (t) => !t || (!this.isLoon() && this.isSurge()) ? t : 'string' == typeof t ? this.isLoon() ? t : this.isQuanX() ? {
- 'open-url': t
- }
- : void 0 : 'object' == typeof t && (t['open-url'] || t['media-url']) ? this.isLoon() ? t['open-url'] : this.isQuanX() ? t : void 0 : void 0;
- $.isMute || (this.isSurge() || this.isLoon() ? $notification.post(s, e, i, h(o)) : this.isQuanX() && $notify(s, e, i, h(o))),
- this.logs.push('', '==============\ud83d\udce3\u7cfb\u7edf\u901a\u77e5\ud83d\udce3=============='),
- this.logs.push(s),
- e && this.logs.push(e),
- i && this.logs.push(i);
- }
- log(...t) {
- t.length > 0 ? (this.logs = [...this.logs, ...t]) : console.log(this.logs.join(this.logSeparator));
- }
- logErr(t, s) {
- const e = !this.isSurge() && !this.isQuanX() && !this.isLoon();
- e ? $.log('', `\u2757\ufe0f${this.name}, \u9519\u8bef!`, t.stack) : $.log('', `\u2757\ufe0f${this.name}, \u9519\u8bef!`, t);
- }
- wait(t) {
- return new Promise((s) => setTimeout(s, t));
- }
- done(t = {}) {
- const s = new Date().getTime(),
- e = (s - this.startTime) / 1e3;
- this.log('', `\ud83d\udd14${this.name}, \u7ed3\u675f! \ud83d\udd5b ${e} \u79d2`),
- this.log(),
- (this.isSurge() || this.isQuanX() || this.isLoon()) && $done(t);
- }
- })(t, s);
-}