diff --git a/sample/config.sample.sh b/sample/config.sample.sh index 55211363..fa955e63 100644 --- a/sample/config.sample.sh +++ b/sample/config.sample.sh @@ -173,4 +173,13 @@ export SMTP_NAME="" ## PUSHME_KEY (必填)填写PushMe APP上获取的push_key export PUSHME_KEY="" +## 13. CHRONOCAT +## CHRONOCAT_URL 推送 http://127.0.0.1:16530 +## CHRONOCAT_TOKEN 填写在CHRONOCAT文件生成的访问密钥 +## CHRONOCAT_QQ 个人:user_id=个人QQ 群则填入group_id=QQ群 多个用英文;隔开同时支持个人和群 如:user_id=xxx;group_id=xxxx;group_id=xxxxx +## CHRONOCAT相关API https://chronocat.vercel.app/install/docker/official/ +export CHRONOCAT_URL="" +export CHRONOCAT_QQ="" # +export CHRONOCAT_TOKEN="" + ## 其他需要的变量,脚本中需要的变量使用 export 变量名= 声明即可 diff --git a/sample/notify.js b/sample/notify.js index 19a8ff5e..d2e083f1 100644 --- a/sample/notify.js +++ b/sample/notify.js @@ -150,6 +150,15 @@ let SMTP_NAME = ''; //此处填你的PushMe KEY. let PUSHME_KEY = ''; +// =======================================CHRONOCAT通知设置区域=========================================== +// CHRONOCAT_URL Red协议连接地址 例: http://127.0.0.1:16530 +// CHRONOCAT_TOKEN 填写在CHRONOCAT文件生成的访问密钥 +// CHRONOCAT_QQ 个人:user_id=个人QQ 群则填入group_id=QQ群 多个用英文;隔开同时支持个人和群 +// CHRONOCAT相关API https://chronocat.vercel.app/install/docker/official/ +let CHRONOCAT_URL = ''; // CHRONOCAT Red协议连接地址 +let CHRONOCAT_TOKEN = ''; //CHRONOCAT 生成的访问密钥 +let CHRONOCAT_QQ = ''; // 个人:user_id=个人QQ 群则填入group_id=QQ群 多个用英文;隔开同时支持个人和群 如:user_id=xxx;group_id=xxxx;group_id=xxxxx + //==========================云端环境变量的判断与接收========================= if (process.env.GOTIFY_URL) { GOTIFY_URL = process.env.GOTIFY_URL; @@ -306,6 +315,16 @@ if (process.env.SMTP_NAME) { if (process.env.PUSHME_KEY) { PUSHME_KEY = process.env.PUSHME_KEY; } + +if (process.env.CHRONOCAT_URL) { + CHRONOCAT_URL = process.env.CHRONOCAT_URL; +} +if (process.env.CHRONOCAT_QQ) { + CHRONOCAT_QQ = process.env.CHRONOCAT_QQ; +} +if (process.env.CHRONOCAT_TOKEN) { + CHRONOCAT_TOKEN = process.env.CHRONOCAT_TOKEN; +} //==========================云端环境变量的判断与接收========================= /** @@ -355,6 +374,7 @@ async function sendNotify( fsBotNotify(text, desp), //飞书机器人 smtpNotify(text, desp), //SMTP 邮件 PushMeNotify(text, desp, params), //PushMe + ChronocatNotify(text, desp) // Chronocat ]); } @@ -1171,6 +1191,81 @@ function PushMeNotify(text, desp, params = {}) { }); } +function ChronocatNotify(title, desp) { + // 检查 CHRONOCAT 的配置是否完整 + if (!CHRONOCAT_TOKEN || !CHRONOCAT_QQ || !CHRONOCAT_URL) { + console.log("CHRONOCAT 服务的 CHRONOCAT_URL 或 CHRONOCAT_QQ 未设置!!\n取消推送"); + return; + } + + console.log("CHRONOCAT 服务启动"); + + // 提取 user_id 和 group_id + const user_ids = CHRONOCAT_QQ.match(/user_id=(\d+)/g).map(match => match.split("=")[1]); + const group_ids = CHRONOCAT_QQ.match(/group_id=(\d+)/g).map(match => match.split("=")[1]); + + // 设置请求的 URL 和 Headers + const url = `${CHRONOCAT_URL}/api/message/send`; + const headers = { + 'Content-Type': 'application/json', + 'Authorization': `Bearer ${CHRONOCAT_TOKEN}` + }; + + // 发送消息 + for (const [chat_type, ids] of [[1, user_ids], [2, group_ids]]) { + if (!ids) { + continue; + } + for (const chat_id of ids) { + const data = { + "peer": { + "chatType": chat_type, + "peerUin": chat_id + }, + "elements": [ + { + "elementType": 1, + "textElement": { + "content": `${title}\n\n${desp}` + } + } + ] + }; + const options = { + url: url, + json:JSON.stringify(data), + headers, + timeout, + }; + $.post(options, (err, resp, data) => { + try { + if (err) { + console.log('Chronocat发送QQ通知消息失败!!\n'); + console.log(err); + } else { + data = JSON.parse(data); + if (chat_type === 1) { + console.log(`QQ个人消息:${ids}推送成功!`); + } else { + console.log(`QQ群消息:${ids}推送成功!`); + } + // if (data.code === 0) { + // console.log('智能微秘书发送通知消息成功🎉。\n'); + // } else { + // console.log(`${data.error}\n`); + // } + } + } catch (e) { + $.logErr(e, resp); + } finally { + resolve(data); + } + }); + } + } +} + + module.exports = { sendNotify, BARK_PUSH, diff --git a/sample/notify.py b/sample/notify.py index 1d43b609..3b573912 100644 --- a/sample/notify.py +++ b/sample/notify.py @@ -102,6 +102,9 @@ push_config = { 'SMTP_NAME': '', # SMTP 收发件人姓名,可随意填写 'PUSHME_KEY': '', # PushMe 酱的 PUSHME_KEY + 'CHRONOCAT_QQ': '', # qq号 + 'CHRONOCAT_TOKEN': '', # CHRONOCAT 的token + 'CHRONOCAT_URL': '' # CHRONOCAT的url地址 } notify_function = [] # fmt: on @@ -664,6 +667,61 @@ def pushme(title: str, content: str) -> None: else: print(f"PushMe 推送失败!{response.status_code} {response.text}") +def chronocat(title: str, content: str) -> None: + """ + 使用 CHRONOCAT 推送消息。 + """ + # 检查 CHRONOCAT 的配置是否完整 + if not push_config.get("CHRONOCAT_URL") or not push_config.get("CHRONOCAT_QQ") or not push_config.get( + "CHRONOCAT_TOKEN"): + print("CHRONOCAT 服务的 CHRONOCAT_URL 或 CHRONOCAT_QQ 未设置!!\n取消推送") + return + + print("CHRONOCAT 服务启动") + + # 提取 user_id 和 group_id + user_ids = re.findall(r"user_id=(\d+)", push_config.get("CHRONOCAT_QQ")) + group_ids = re.findall(r"group_id=(\d+)", push_config.get("CHRONOCAT_QQ")) + + # 设置请求的 URL 和 Headers + url = f'{push_config.get("CHRONOCAT_URL")}/api/message/send' + headers = { + 'Content-Type': 'application/json', + 'Authorization': f'Bearer {push_config.get("CHRONOCAT_TOKEN")}' + } + + # 发送消息 + for chat_type, ids in [(1, user_ids), (2, group_ids)]: + if not ids: + continue + for chat_id in ids: + data = { + "peer": { + "chatType": chat_type, + "peerUin": chat_id + }, + "elements": [ + { + "elementType": 1, + "textElement": { + "content": f'{title}\n\n{content}' + } + } + ] + } + response = requests.post(url, headers=headers, data=json.dumps(data)) + if response.status_code == 200: + if chat_type == 1: + print(f'QQ个人消息:{ids}推送成功!') + else: + print(f'QQ群消息:{ids}推送成功!') + else: + if chat_type == 1: + print(f'QQ个人消息:{ids}推送失败!') + else: + print(f'QQ群消息:{ids}推送失败!') + + def one() -> str: """