mirror of
https://github.com/Cp0204/quark-auto-save.git
synced 2026-01-19 19:49:36 +08:00
Compare commits
No commits in common. "283b1b26ff4dc80aa3606808957ba77fc0921795" and "2bdf315f4b72ecfac328e69ab21c057883a7179d" have entirely different histories.
283b1b26ff
...
2bdf315f4b
198
notify.py
198
notify.py
@ -72,13 +72,8 @@ push_config = {
|
|||||||
'CHAT_URL': '', # synology chat url
|
'CHAT_URL': '', # synology chat url
|
||||||
'CHAT_TOKEN': '', # synology chat token
|
'CHAT_TOKEN': '', # synology chat token
|
||||||
|
|
||||||
'PUSH_PLUS_TOKEN': '', # pushplus 推送的用户令牌
|
'PUSH_PLUS_TOKEN': '', # push+ 微信推送的用户令牌
|
||||||
'PUSH_PLUS_USER': '', # pushplus 推送的群组编码
|
'PUSH_PLUS_USER': '', # push+ 微信推送的群组编码
|
||||||
'PUSH_PLUS_TEMPLATE': 'html', # pushplus 发送模板,支持html,txt,json,markdown,cloudMonitor,jenkins,route,pay
|
|
||||||
'PUSH_PLUS_CHANNEL': 'wechat', # pushplus 发送渠道,支持wechat,webhook,cp,mail,sms
|
|
||||||
'PUSH_PLUS_WEBHOOK': '', # pushplus webhook编码,可在pushplus公众号上扩展配置出更多渠道
|
|
||||||
'PUSH_PLUS_CALLBACKURL': '', # pushplus 发送结果回调地址,会把推送最终结果通知到这个地址上
|
|
||||||
'PUSH_PLUS_TO': '', # pushplus 好友令牌,微信公众号渠道填写好友令牌,企业微信渠道填写企业微信用户id
|
|
||||||
|
|
||||||
'WE_PLUS_BOT_TOKEN': '', # 微加机器人的用户令牌
|
'WE_PLUS_BOT_TOKEN': '', # 微加机器人的用户令牌
|
||||||
'WE_PLUS_BOT_RECEIVER': '', # 微加机器人的消息接收者
|
'WE_PLUS_BOT_RECEIVER': '', # 微加机器人的消息接收者
|
||||||
@ -128,15 +123,6 @@ push_config = {
|
|||||||
'NTFY_URL': '', # ntfy地址,如https://ntfy.sh
|
'NTFY_URL': '', # ntfy地址,如https://ntfy.sh
|
||||||
'NTFY_TOPIC': '', # ntfy的消息应用topic
|
'NTFY_TOPIC': '', # ntfy的消息应用topic
|
||||||
'NTFY_PRIORITY':'3', # 推送消息优先级,默认为3
|
'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 至少配置一个才行
|
|
||||||
|
|
||||||
'DODO_BOTTOKEN': '', # DoDo机器人的token DoDo开发平台https://doker.imdodo.com/
|
|
||||||
'DODO_BOTID': '', # DoDo机器人的id
|
|
||||||
'DODO_LANDSOURCEID': '', # DoDo机器人所在的群ID
|
|
||||||
'DODO_SOURCEID': '', # DoDo机器人推送目标用户的ID
|
|
||||||
}
|
}
|
||||||
# fmt: on
|
# fmt: on
|
||||||
|
|
||||||
@ -151,6 +137,7 @@ def bark(title: str, content: str) -> None:
|
|||||||
使用 bark 推送消息。
|
使用 bark 推送消息。
|
||||||
"""
|
"""
|
||||||
if not push_config.get("BARK_PUSH"):
|
if not push_config.get("BARK_PUSH"):
|
||||||
|
print("bark 服务的 BARK_PUSH 未设置!!\n取消推送")
|
||||||
return
|
return
|
||||||
print("bark 服务启动")
|
print("bark 服务启动")
|
||||||
|
|
||||||
@ -203,6 +190,7 @@ def dingding_bot(title: str, content: str) -> None:
|
|||||||
使用 钉钉机器人 推送消息。
|
使用 钉钉机器人 推送消息。
|
||||||
"""
|
"""
|
||||||
if not push_config.get("DD_BOT_SECRET") or not push_config.get("DD_BOT_TOKEN"):
|
if not push_config.get("DD_BOT_SECRET") or not push_config.get("DD_BOT_TOKEN"):
|
||||||
|
print("钉钉机器人 服务的 DD_BOT_SECRET 或者 DD_BOT_TOKEN 未设置!!\n取消推送")
|
||||||
return
|
return
|
||||||
print("钉钉机器人 服务启动")
|
print("钉钉机器人 服务启动")
|
||||||
|
|
||||||
@ -232,6 +220,7 @@ def feishu_bot(title: str, content: str) -> None:
|
|||||||
使用 飞书机器人 推送消息。
|
使用 飞书机器人 推送消息。
|
||||||
"""
|
"""
|
||||||
if not push_config.get("FSKEY"):
|
if not push_config.get("FSKEY"):
|
||||||
|
print("飞书 服务的 FSKEY 未设置!!\n取消推送")
|
||||||
return
|
return
|
||||||
print("飞书 服务启动")
|
print("飞书 服务启动")
|
||||||
|
|
||||||
@ -250,6 +239,7 @@ def go_cqhttp(title: str, content: str) -> None:
|
|||||||
使用 go_cqhttp 推送消息。
|
使用 go_cqhttp 推送消息。
|
||||||
"""
|
"""
|
||||||
if not push_config.get("GOBOT_URL") or not push_config.get("GOBOT_QQ"):
|
if not push_config.get("GOBOT_URL") or not push_config.get("GOBOT_QQ"):
|
||||||
|
print("go-cqhttp 服务的 GOBOT_URL 或 GOBOT_QQ 未设置!!\n取消推送")
|
||||||
return
|
return
|
||||||
print("go-cqhttp 服务启动")
|
print("go-cqhttp 服务启动")
|
||||||
|
|
||||||
@ -267,6 +257,7 @@ def gotify(title: str, content: str) -> None:
|
|||||||
使用 gotify 推送消息。
|
使用 gotify 推送消息。
|
||||||
"""
|
"""
|
||||||
if not push_config.get("GOTIFY_URL") or not push_config.get("GOTIFY_TOKEN"):
|
if not push_config.get("GOTIFY_URL") or not push_config.get("GOTIFY_TOKEN"):
|
||||||
|
print("gotify 服务的 GOTIFY_URL 或 GOTIFY_TOKEN 未设置!!\n取消推送")
|
||||||
return
|
return
|
||||||
print("gotify 服务启动")
|
print("gotify 服务启动")
|
||||||
|
|
||||||
@ -289,6 +280,7 @@ def iGot(title: str, content: str) -> None:
|
|||||||
使用 iGot 推送消息。
|
使用 iGot 推送消息。
|
||||||
"""
|
"""
|
||||||
if not push_config.get("IGOT_PUSH_KEY"):
|
if not push_config.get("IGOT_PUSH_KEY"):
|
||||||
|
print("iGot 服务的 IGOT_PUSH_KEY 未设置!!\n取消推送")
|
||||||
return
|
return
|
||||||
print("iGot 服务启动")
|
print("iGot 服务启动")
|
||||||
|
|
||||||
@ -308,12 +300,13 @@ def serverJ(title: str, content: str) -> None:
|
|||||||
通过 serverJ 推送消息。
|
通过 serverJ 推送消息。
|
||||||
"""
|
"""
|
||||||
if not push_config.get("PUSH_KEY"):
|
if not push_config.get("PUSH_KEY"):
|
||||||
|
print("serverJ 服务的 PUSH_KEY 未设置!!\n取消推送")
|
||||||
return
|
return
|
||||||
print("serverJ 服务启动")
|
print("serverJ 服务启动")
|
||||||
|
|
||||||
data = {"text": title, "desp": content.replace("\n", "\n\n")}
|
data = {"text": title, "desp": content.replace("\n", "\n\n")}
|
||||||
|
|
||||||
match = re.match(r"sctp(\d+)t", push_config.get("PUSH_KEY"))
|
match = re.match(r'sctp(\d+)t', push_config.get("PUSH_KEY"))
|
||||||
if match:
|
if match:
|
||||||
num = match.group(1)
|
num = match.group(1)
|
||||||
url = f'https://{num}.push.ft07.com/send/{push_config.get("PUSH_KEY")}.send'
|
url = f'https://{num}.push.ft07.com/send/{push_config.get("PUSH_KEY")}.send'
|
||||||
@ -333,6 +326,7 @@ def pushdeer(title: str, content: str) -> None:
|
|||||||
通过PushDeer 推送消息
|
通过PushDeer 推送消息
|
||||||
"""
|
"""
|
||||||
if not push_config.get("DEER_KEY"):
|
if not push_config.get("DEER_KEY"):
|
||||||
|
print("PushDeer 服务的 DEER_KEY 未设置!!\n取消推送")
|
||||||
return
|
return
|
||||||
print("PushDeer 服务启动")
|
print("PushDeer 服务启动")
|
||||||
data = {
|
data = {
|
||||||
@ -358,6 +352,7 @@ def chat(title: str, content: str) -> None:
|
|||||||
通过Chat 推送消息
|
通过Chat 推送消息
|
||||||
"""
|
"""
|
||||||
if not push_config.get("CHAT_URL") or not push_config.get("CHAT_TOKEN"):
|
if not push_config.get("CHAT_URL") or not push_config.get("CHAT_TOKEN"):
|
||||||
|
print("chat 服务的 CHAT_URL或CHAT_TOKEN 未设置!!\n取消推送")
|
||||||
return
|
return
|
||||||
print("chat 服务启动")
|
print("chat 服务启动")
|
||||||
data = "payload=" + json.dumps({"text": title + "\n" + content})
|
data = "payload=" + json.dumps({"text": title + "\n" + content})
|
||||||
@ -372,36 +367,26 @@ def chat(title: str, content: str) -> None:
|
|||||||
|
|
||||||
def pushplus_bot(title: str, content: str) -> None:
|
def pushplus_bot(title: str, content: str) -> None:
|
||||||
"""
|
"""
|
||||||
通过 pushplus 推送消息。
|
通过 push+ 推送消息。
|
||||||
"""
|
"""
|
||||||
if not push_config.get("PUSH_PLUS_TOKEN"):
|
if not push_config.get("PUSH_PLUS_TOKEN"):
|
||||||
|
print("PUSHPLUS 服务的 PUSH_PLUS_TOKEN 未设置!!\n取消推送")
|
||||||
return
|
return
|
||||||
print("PUSHPLUS 服务启动")
|
print("PUSHPLUS 服务启动")
|
||||||
|
|
||||||
url = "https://www.pushplus.plus/send"
|
url = "http://www.pushplus.plus/send"
|
||||||
data = {
|
data = {
|
||||||
"token": push_config.get("PUSH_PLUS_TOKEN"),
|
"token": push_config.get("PUSH_PLUS_TOKEN"),
|
||||||
"title": title,
|
"title": title,
|
||||||
"content": content,
|
"content": content,
|
||||||
"topic": push_config.get("PUSH_PLUS_USER"),
|
"topic": push_config.get("PUSH_PLUS_USER"),
|
||||||
"template": push_config.get("PUSH_PLUS_TEMPLATE"),
|
|
||||||
"channel": push_config.get("PUSH_PLUS_CHANNEL"),
|
|
||||||
"webhook": push_config.get("PUSH_PLUS_WEBHOOK"),
|
|
||||||
"callbackUrl": push_config.get("PUSH_PLUS_CALLBACKURL"),
|
|
||||||
"to": push_config.get("PUSH_PLUS_TO"),
|
|
||||||
}
|
}
|
||||||
body = json.dumps(data).encode(encoding="utf-8")
|
body = json.dumps(data).encode(encoding="utf-8")
|
||||||
headers = {"Content-Type": "application/json"}
|
headers = {"Content-Type": "application/json"}
|
||||||
response = requests.post(url=url, data=body, headers=headers).json()
|
response = requests.post(url=url, data=body, headers=headers).json()
|
||||||
|
|
||||||
code = response["code"]
|
if response["code"] == 200:
|
||||||
if code == 200:
|
print("PUSHPLUS 推送成功!")
|
||||||
print("PUSHPLUS 推送请求成功,可根据流水号查询推送结果:" + response["data"])
|
|
||||||
print(
|
|
||||||
"注意:请求成功并不代表推送成功,如未收到消息,请到pushplus官网使用流水号查询推送最终结果"
|
|
||||||
)
|
|
||||||
elif code == 900 or code == 903 or code == 905 or code == 999:
|
|
||||||
print(response["msg"])
|
|
||||||
|
|
||||||
else:
|
else:
|
||||||
url_old = "http://pushplus.hxtrip.com/send"
|
url_old = "http://pushplus.hxtrip.com/send"
|
||||||
@ -420,6 +405,7 @@ def weplus_bot(title: str, content: str) -> None:
|
|||||||
通过 微加机器人 推送消息。
|
通过 微加机器人 推送消息。
|
||||||
"""
|
"""
|
||||||
if not push_config.get("WE_PLUS_BOT_TOKEN"):
|
if not push_config.get("WE_PLUS_BOT_TOKEN"):
|
||||||
|
print("微加机器人 服务的 WE_PLUS_BOT_TOKEN 未设置!!\n取消推送")
|
||||||
return
|
return
|
||||||
print("微加机器人 服务启动")
|
print("微加机器人 服务启动")
|
||||||
|
|
||||||
@ -451,6 +437,7 @@ def qmsg_bot(title: str, content: str) -> None:
|
|||||||
使用 qmsg 推送消息。
|
使用 qmsg 推送消息。
|
||||||
"""
|
"""
|
||||||
if not push_config.get("QMSG_KEY") or not push_config.get("QMSG_TYPE"):
|
if not push_config.get("QMSG_KEY") or not push_config.get("QMSG_TYPE"):
|
||||||
|
print("qmsg 的 QMSG_KEY 或者 QMSG_TYPE 未设置!!\n取消推送")
|
||||||
return
|
return
|
||||||
print("qmsg 服务启动")
|
print("qmsg 服务启动")
|
||||||
|
|
||||||
@ -469,10 +456,11 @@ def wecom_app(title: str, content: str) -> None:
|
|||||||
通过 企业微信 APP 推送消息。
|
通过 企业微信 APP 推送消息。
|
||||||
"""
|
"""
|
||||||
if not push_config.get("QYWX_AM"):
|
if not push_config.get("QYWX_AM"):
|
||||||
|
print("QYWX_AM 未设置!!\n取消推送")
|
||||||
return
|
return
|
||||||
QYWX_AM_AY = re.split(",", push_config.get("QYWX_AM"))
|
QYWX_AM_AY = re.split(",", push_config.get("QYWX_AM"))
|
||||||
if 4 < len(QYWX_AM_AY) > 5:
|
if 4 < len(QYWX_AM_AY) > 5:
|
||||||
print("QYWX_AM 设置错误!!")
|
print("QYWX_AM 设置错误!!\n取消推送")
|
||||||
return
|
return
|
||||||
print("企业微信 APP 服务启动")
|
print("企业微信 APP 服务启动")
|
||||||
|
|
||||||
@ -565,6 +553,7 @@ def wecom_bot(title: str, content: str) -> None:
|
|||||||
通过 企业微信机器人 推送消息。
|
通过 企业微信机器人 推送消息。
|
||||||
"""
|
"""
|
||||||
if not push_config.get("QYWX_KEY"):
|
if not push_config.get("QYWX_KEY"):
|
||||||
|
print("企业微信机器人 服务的 QYWX_KEY 未设置!!\n取消推送")
|
||||||
return
|
return
|
||||||
print("企业微信机器人服务启动")
|
print("企业微信机器人服务启动")
|
||||||
|
|
||||||
@ -590,6 +579,7 @@ def telegram_bot(title: str, content: str) -> None:
|
|||||||
使用 telegram 机器人 推送消息。
|
使用 telegram 机器人 推送消息。
|
||||||
"""
|
"""
|
||||||
if not push_config.get("TG_BOT_TOKEN") or not push_config.get("TG_USER_ID"):
|
if not push_config.get("TG_BOT_TOKEN") or not push_config.get("TG_USER_ID"):
|
||||||
|
print("tg 服务的 bot_token 或者 user_id 未设置!!\n取消推送")
|
||||||
return
|
return
|
||||||
print("tg 服务启动")
|
print("tg 服务启动")
|
||||||
|
|
||||||
@ -638,6 +628,9 @@ def aibotk(title: str, content: str) -> None:
|
|||||||
or not push_config.get("AIBOTK_TYPE")
|
or not push_config.get("AIBOTK_TYPE")
|
||||||
or not push_config.get("AIBOTK_NAME")
|
or not push_config.get("AIBOTK_NAME")
|
||||||
):
|
):
|
||||||
|
print(
|
||||||
|
"智能微秘书 的 AIBOTK_KEY 或者 AIBOTK_TYPE 或者 AIBOTK_NAME 未设置!!\n取消推送"
|
||||||
|
)
|
||||||
return
|
return
|
||||||
print("智能微秘书 服务启动")
|
print("智能微秘书 服务启动")
|
||||||
|
|
||||||
@ -676,6 +669,9 @@ def smtp(title: str, content: str) -> None:
|
|||||||
or not push_config.get("SMTP_PASSWORD")
|
or not push_config.get("SMTP_PASSWORD")
|
||||||
or not push_config.get("SMTP_NAME")
|
or not push_config.get("SMTP_NAME")
|
||||||
):
|
):
|
||||||
|
print(
|
||||||
|
"SMTP 邮件 的 SMTP_SERVER 或者 SMTP_SSL 或者 SMTP_EMAIL 或者 SMTP_PASSWORD 或者 SMTP_NAME 未设置!!\n取消推送"
|
||||||
|
)
|
||||||
return
|
return
|
||||||
print("SMTP 邮件 服务启动")
|
print("SMTP 邮件 服务启动")
|
||||||
|
|
||||||
@ -730,6 +726,7 @@ def pushme(title: str, content: str) -> None:
|
|||||||
使用 PushMe 推送消息。
|
使用 PushMe 推送消息。
|
||||||
"""
|
"""
|
||||||
if not push_config.get("PUSHME_KEY"):
|
if not push_config.get("PUSHME_KEY"):
|
||||||
|
print("PushMe 服务的 PUSHME_KEY 未设置!!\n取消推送")
|
||||||
return
|
return
|
||||||
print("PushMe 服务启动")
|
print("PushMe 服务启动")
|
||||||
|
|
||||||
@ -762,6 +759,7 @@ def chronocat(title: str, content: str) -> None:
|
|||||||
or not push_config.get("CHRONOCAT_QQ")
|
or not push_config.get("CHRONOCAT_QQ")
|
||||||
or not push_config.get("CHRONOCAT_TOKEN")
|
or not push_config.get("CHRONOCAT_TOKEN")
|
||||||
):
|
):
|
||||||
|
print("CHRONOCAT 服务的 CHRONOCAT_URL 或 CHRONOCAT_QQ 未设置!!\n取消推送")
|
||||||
return
|
return
|
||||||
|
|
||||||
print("CHRONOCAT 服务启动")
|
print("CHRONOCAT 服务启动")
|
||||||
@ -805,17 +803,17 @@ def ntfy(title: str, content: str) -> None:
|
|||||||
"""
|
"""
|
||||||
通过 Ntfy 推送消息
|
通过 Ntfy 推送消息
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def encode_rfc2047(text: str) -> str:
|
def encode_rfc2047(text: str) -> str:
|
||||||
"""将文本编码为符合 RFC 2047 标准的格式"""
|
"""将文本编码为符合 RFC 2047 标准的格式"""
|
||||||
encoded_bytes = base64.b64encode(text.encode("utf-8"))
|
encoded_bytes = base64.b64encode(text.encode('utf-8'))
|
||||||
encoded_str = encoded_bytes.decode("utf-8")
|
encoded_str = encoded_bytes.decode('utf-8')
|
||||||
return f"=?utf-8?B?{encoded_str}?="
|
return f'=?utf-8?B?{encoded_str}?='
|
||||||
|
|
||||||
if not push_config.get("NTFY_TOPIC"):
|
if not push_config.get("NTFY_TOPIC"):
|
||||||
|
print("ntfy 服务的 NTFY_TOPIC 未设置!!\n取消推送")
|
||||||
return
|
return
|
||||||
print("ntfy 服务启动")
|
print("ntfy 服务启动")
|
||||||
priority = "3"
|
priority = '3'
|
||||||
if not push_config.get("NTFY_PRIORITY"):
|
if not push_config.get("NTFY_PRIORITY"):
|
||||||
print("ntfy 服务的NTFY_PRIORITY 未设置!!默认设置为3")
|
print("ntfy 服务的NTFY_PRIORITY 未设置!!默认设置为3")
|
||||||
else:
|
else:
|
||||||
@ -824,8 +822,11 @@ def ntfy(title: str, content: str) -> None:
|
|||||||
# 使用 RFC 2047 编码 title
|
# 使用 RFC 2047 编码 title
|
||||||
encoded_title = encode_rfc2047(title)
|
encoded_title = encode_rfc2047(title)
|
||||||
|
|
||||||
data = content.encode(encoding="utf-8")
|
data = content.encode(encoding='utf-8')
|
||||||
headers = {"Title": encoded_title, "Priority": priority} # 使用编码后的 title
|
headers = {
|
||||||
|
"Title": encoded_title, # 使用编码后的 title
|
||||||
|
"Priority": priority
|
||||||
|
}
|
||||||
|
|
||||||
url = push_config.get("NTFY_URL") + "/" + push_config.get("NTFY_TOPIC")
|
url = push_config.get("NTFY_URL") + "/" + push_config.get("NTFY_TOPIC")
|
||||||
response = requests.post(url, data=data, headers=headers)
|
response = requests.post(url, data=data, headers=headers)
|
||||||
@ -834,111 +835,6 @@ def ntfy(title: str, content: str) -> None:
|
|||||||
else:
|
else:
|
||||||
print("Ntfy 推送失败!错误信息:", response.text)
|
print("Ntfy 推送失败!错误信息:", response.text)
|
||||||
|
|
||||||
def dodo_bot(title: str, content: str) -> None:
|
|
||||||
"""
|
|
||||||
通过 DoDo机器人 推送消息
|
|
||||||
"""
|
|
||||||
required_keys = [
|
|
||||||
'DoDo_BOTTOKEN',
|
|
||||||
'DoDo_BOTID',
|
|
||||||
'DoDo_LANDSOURCEID',
|
|
||||||
'DoDo_SOURCEID'
|
|
||||||
]
|
|
||||||
if not all(push_config.get(key) for key in required_keys):
|
|
||||||
missing = [key for key in required_keys if not push_config.get(key)]
|
|
||||||
print(f"DoDo 服务配置不完整,缺少以下参数: {', '.join(missing)}\n取消推送")
|
|
||||||
return
|
|
||||||
print("DoDo 服务启动")
|
|
||||||
url="https://botopen.imdodo.com/api/v2/personal/message/send"
|
|
||||||
|
|
||||||
botID=push_config.get('DoDo_BOTID')
|
|
||||||
botToken=push_config.get('DoDo_BOTTOKEN')
|
|
||||||
islandSourceId=push_config.get('DoDo_LANDSOURCEID')
|
|
||||||
dodoSourceId=push_config.get('DoDo_SOURCEID')
|
|
||||||
|
|
||||||
headers = {
|
|
||||||
'Authorization': f'Bot {botID}.{botToken}',
|
|
||||||
'Content-Type': 'application/json',
|
|
||||||
'Host': 'botopen.imdodo.com'
|
|
||||||
}
|
|
||||||
payload = json.dumps({
|
|
||||||
"islandSourceId": islandSourceId,
|
|
||||||
"dodoSourceId": dodoSourceId,
|
|
||||||
"messageType": 1,
|
|
||||||
"messageBody": {
|
|
||||||
"content": f"{title}\n\n{content}"
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
try:
|
|
||||||
response = requests.post(url, headers=headers, data=payload)
|
|
||||||
if response.status_code == 200:
|
|
||||||
response = response.json()
|
|
||||||
if response.get("status") == 0 and response.get("message") == "success":
|
|
||||||
print(f'DoDo 推送成功!')
|
|
||||||
else:
|
|
||||||
print(f'DoDo 推送失败!错误信息:\n{response}')
|
|
||||||
else:
|
|
||||||
print("DoDo 推送失败!错误信息:", response.text)
|
|
||||||
except Exception as e:
|
|
||||||
print(f"DoDo 推送请求异常: {str(e)}")
|
|
||||||
|
|
||||||
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"):
|
|
||||||
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 至少设置一个!!")
|
|
||||||
return
|
|
||||||
|
|
||||||
print("wxpusher 服务启动")
|
|
||||||
|
|
||||||
data = {
|
|
||||||
"appToken": push_config.get("WXPUSHER_APP_TOKEN"),
|
|
||||||
"content": f"<h1>{title}</h1><br/><div style='white-space: pre-wrap;'>{content}</div>",
|
|
||||||
"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):
|
def parse_headers(headers):
|
||||||
if not headers:
|
if not headers:
|
||||||
return {}
|
return {}
|
||||||
@ -995,6 +891,7 @@ def custom_notify(title: str, content: str) -> None:
|
|||||||
通过 自定义通知 推送消息。
|
通过 自定义通知 推送消息。
|
||||||
"""
|
"""
|
||||||
if not push_config.get("WEBHOOK_URL") or not push_config.get("WEBHOOK_METHOD"):
|
if not push_config.get("WEBHOOK_URL") or not push_config.get("WEBHOOK_METHOD"):
|
||||||
|
print("自定义通知的 WEBHOOK_URL 或 WEBHOOK_METHOD 未设置!!\n取消推送")
|
||||||
return
|
return
|
||||||
|
|
||||||
print("自定义通知服务启动")
|
print("自定义通知服务启动")
|
||||||
@ -1096,21 +993,10 @@ def add_notify_function():
|
|||||||
and push_config.get("CHRONOCAT_TOKEN")
|
and push_config.get("CHRONOCAT_TOKEN")
|
||||||
):
|
):
|
||||||
notify_function.append(chronocat)
|
notify_function.append(chronocat)
|
||||||
if (
|
|
||||||
push_config.get("DODO_BOTTOKEN")
|
|
||||||
and push_config.get("DODO_BOTID")
|
|
||||||
and push_config.get("DODO_LANDSOURCEID")
|
|
||||||
and push_config.get("DODO_SOURCEID")
|
|
||||||
):
|
|
||||||
notify_function.append(dodo_bot)
|
|
||||||
if push_config.get("WEBHOOK_URL") and push_config.get("WEBHOOK_METHOD"):
|
if push_config.get("WEBHOOK_URL") and push_config.get("WEBHOOK_METHOD"):
|
||||||
notify_function.append(custom_notify)
|
notify_function.append(custom_notify)
|
||||||
if push_config.get("NTFY_TOPIC"):
|
if push_config.get("NTFY_TOPIC"):
|
||||||
notify_function.append(ntfy)
|
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:
|
if not notify_function:
|
||||||
print(f"无推送渠道,请检查通知变量是否正确")
|
print(f"无推送渠道,请检查通知变量是否正确")
|
||||||
return notify_function
|
return notify_function
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user