From 86814de37653b788ccbb76f5552042ada1f3a4e2 Mon Sep 17 00:00:00 2001
From: guyuexuan <2651919937@qq.com>
Date: Tue, 10 Dec 2024 02:05:45 +0800
Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=20wxPusher=20=E6=8E=A8?=
=?UTF-8?q?=E9=80=81=E6=96=B9=E5=BC=8F?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
sample/config.sample.sh | 11 ++++++-
sample/notify.js | 72 +++++++++++++++++++++++++++++++++++++++++
sample/notify.py | 57 ++++++++++++++++++++++++++++++++
3 files changed, 139 insertions(+), 1 deletion(-)
diff --git a/sample/config.sample.sh b/sample/config.sample.sh
index 2c9d186e..c0e16bad 100644
--- a/sample/config.sample.sh
+++ b/sample/config.sample.sh
@@ -220,8 +220,17 @@ export NTFY_URL=""
export NTFY_TOPIC=""
export NTFY_PRIORITY="3"
+## 21. wxPusher
+## 官方文档: https://wxpusher.zjiecode.com/docs/
+## 管理后台: https://wxpusher.zjiecode.com/admin/
+## wxPusher 的 appToken
+export WXPUSHER_APP_TOKEN=""
+## wxPusher 的 topicIds,多个用英文分号;分隔 topic_ids 与 uids 至少配置一个才行
+export WXPUSHER_TOPIC_IDS=""
+## wxPusher 的 用户ID,多个用英文分号;分隔 topic_ids 与 uids 至少配置一个才行
+export WXPUSHER_UIDS=""
-## 21. 自定义通知
+## 22. 自定义通知
## 自定义通知 接收回调的URL
export WEBHOOK_URL=""
## WEBHOOK_BODY 和 WEBHOOK_HEADERS 多个参数时,直接换行或者使用 $'\n' 连接多行字符串,比如 export dd="line 1"$'\n'"line 2"
diff --git a/sample/notify.js b/sample/notify.js
index 012610c9..1c8366a0 100644
--- a/sample/notify.js
+++ b/sample/notify.js
@@ -99,6 +99,12 @@ const push_config = {
NTFY_URL: '', // ntfy地址,如https://ntfy.sh,默认为https://ntfy.sh
NTFY_TOPIC: '', // ntfy的消息应用topic
NTFY_PRIORITY: '3', // 推送消息优先级,默认为3
+
+ // 官方文档: https://wxpusher.zjiecode.com/docs/
+ // 管理后台: https://wxpusher.zjiecode.com/admin/
+ WXPUSHER_APP_TOKEN: '', // wxpusher 的 appToken
+ WXPUSHER_TOPIC_IDS: '', // wxpusher 的 主题ID,多个用英文分号;分隔 topic_ids 与 uids 至少配置一个才行
+ WXPUSHER_UIDS: '', // wxpusher 的 用户ID,多个用英文分号;分隔 topic_ids 与 uids 至少配置一个才行
};
for (const key in push_config) {
@@ -1235,6 +1241,71 @@ function ntfyNotify(text, desp) {
});
}
+function wxPusherNotify(text, desp) {
+ return new Promise((resolve) => {
+ const { WXPUSHER_APP_TOKEN, WXPUSHER_TOPIC_IDS, WXPUSHER_UIDS } = push_config;
+ if (WXPUSHER_APP_TOKEN) {
+ // 处理topic_ids,将分号分隔的字符串转为数组
+ const topicIds = WXPUSHER_TOPIC_IDS ? WXPUSHER_TOPIC_IDS.split(';')
+ .map(id => id.trim())
+ .filter(id => id)
+ .map(id => parseInt(id)) : [];
+
+ // 处理uids,将分号分隔的字符串转为数组
+ const uids = WXPUSHER_UIDS ? WXPUSHER_UIDS.split(';')
+ .map(uid => uid.trim())
+ .filter(uid => uid) : [];
+
+ // topic_ids uids 至少有一个
+ if (!topicIds.length && !uids.length) {
+ console.log("wxpusher 服务的 WXPUSHER_TOPIC_IDS 和 WXPUSHER_UIDS 至少设置一个!!\n取消推送");
+ return resolve();
+ }
+
+ const body = {
+ appToken: WXPUSHER_APP_TOKEN,
+ content: `
${text}
${desp}
`,
+ summary: text,
+ contentType: 2,
+ topicIds: topicIds,
+ uids: uids,
+ verifyPayType: 0
+ };
+
+ const options = {
+ url: 'https://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发送通知消息失败!\n', err);
+ } else {
+ data = JSON.parse(data);
+ if (data.code === 1000) {
+ console.log('wxpusher发送通知消息完成!');
+ } else {
+ console.log(`wxpusher发送通知消息异常:${data.msg}`);
+ }
+ }
+ } catch (e) {
+ $.logErr(e, resp);
+ } finally {
+ resolve(data);
+ }
+ });
+ } else {
+ console.log('wxpusher 服务的 WXPUSHER_APP_TOKEN 未设置!!\n取消推送');
+ resolve();
+ }
+ });
+}
+
function parseString(input, valueFormatFn) {
const regex = /(\w+):\s*((?:(?!\n\w+:).)*)/g;
@@ -1365,6 +1436,7 @@ async function sendNotify(text, desp, params = {}) {
webhookNotify(text, desp), // 自定义通知
qmsgNotify(text, desp), // 自定义通知
ntfyNotify(text, desp), // Ntfy
+ wxPusherNotify(text, desp), // wxpusher
]);
}
diff --git a/sample/notify.py b/sample/notify.py
index a6cfaa1a..38d9c0b9 100644
--- a/sample/notify.py
+++ b/sample/notify.py
@@ -121,6 +121,10 @@ push_config = {
'NTFY_URL': '', # ntfy地址,如https://ntfy.sh
'NTFY_TOPIC': '', # ntfy的消息应用topic
'NTFY_PRIORITY':'3', # 推送消息优先级,默认为3
+
+ 'WXPUSHER_APP_TOKEN': '', # wxpusher 的 appToken 官方文档: https://wxpusher.zjiecode.com/docs/ 管理后台: https://wxpusher.zjiecode.com/admin/
+ 'WXPUSHER_TOPIC_IDS': '', # wxpusher 的 主题ID,多个用英文分号;分隔 topic_ids 与 uids 至少配置一个才行
+ 'WXPUSHER_UIDS': '', # wxpusher 的 用户ID,多个用英文分号;分隔 topic_ids 与 uids 至少配置一个才行
}
# fmt: on
@@ -821,6 +825,57 @@ def ntfy(title: str, content: str) -> None:
else:
print("Ntfy 推送失败!错误信息:", response.text)
+
+def wxpusher_bot(title: str, content: str) -> None:
+ """
+ 通过 wxpusher 推送消息。
+ 支持的环境变量:
+ - WXPUSHER_APP_TOKEN: appToken
+ - WXPUSHER_TOPIC_IDS: 主题ID, 多个用英文分号;分隔
+ - WXPUSHER_UIDS: 用户ID, 多个用英文分号;分隔
+ """
+ if not push_config.get("WXPUSHER_APP_TOKEN"):
+ print("wxpusher 服务的 WXPUSHER_APP_TOKEN 未设置!!\n取消推送")
+ return
+
+
+ url = "https://wxpusher.zjiecode.com/api/send/message"
+
+ # 处理topic_ids和uids,将分号分隔的字符串转为数组
+ topic_ids = []
+ if push_config.get("WXPUSHER_TOPIC_IDS"):
+ topic_ids = [int(id.strip()) for id in push_config.get("WXPUSHER_TOPIC_IDS").split(";") if id.strip()]
+
+ uids = []
+ if push_config.get("WXPUSHER_UIDS"):
+ uids = [uid.strip() for uid in push_config.get("WXPUSHER_UIDS").split(";") if uid.strip()]
+
+ # topic_ids uids 至少有一个
+ if not topic_ids and not uids:
+ print("wxpusher 服务的 WXPUSHER_TOPIC_IDS 和 WXPUSHER_UIDS 至少设置一个!!\n取消推送")
+ return
+
+ print("wxpusher 服务启动")
+
+ data = {
+ "appToken": push_config.get("WXPUSHER_APP_TOKEN"),
+ "content": f"{title}
{content}
",
+ "summary": title,
+ "contentType": 2,
+ "topicIds": topic_ids,
+ "uids": uids,
+ "verifyPayType": 0
+ }
+
+ headers = {"Content-Type": "application/json"}
+ response = requests.post(url=url, json=data, headers=headers).json()
+
+ if response.get("code") == 1000:
+ print("wxpusher 推送成功!")
+ else:
+ print(f"wxpusher 推送失败!错误信息:{response.get('msg')}")
+
+
def parse_headers(headers):
if not headers:
return {}
@@ -983,6 +1038,8 @@ def add_notify_function():
notify_function.append(custom_notify)
if push_config.get("NTFY_TOPIC"):
notify_function.append(ntfy)
+ if push_config.get("WXPUSHER_APP_TOKEN") and (push_config.get("WXPUSHER_TOPIC_IDS") or push_config.get("WXPUSHER_UIDS")):
+ notify_function.append(wxpusher_bot)
if not notify_function:
print(f"无推送渠道,请检查通知变量是否正确")
return notify_function