Skip to content

Commit

Permalink
改进ntfy通知,将中文标题进行编码后发送 (#2541)
Browse files Browse the repository at this point in the history
* 1.改进ntfy通知,将中文标题进行编码后发送,可以直接展示中文标题;2.改进notify.py和notify.js中ntfy的推送;
---------

Co-authored-by: qiaoyun680 <qiaoyun680>
  • Loading branch information
qiaoyun680 authored Oct 23, 2024
1 parent ecc5588 commit 56bc2f0
Show file tree
Hide file tree
Showing 3 changed files with 35 additions and 13 deletions.
10 changes: 8 additions & 2 deletions back/services/notify.ts
Original file line number Diff line number Diff line change
Expand Up @@ -666,12 +666,18 @@ export default class NotificationService {

private async ntfy() {
const { ntfyUrl, ntfyTopic, ntfyPriority } = this.params;
// 编码函数
const encodeRfc2047 = (text: string, charset: string = 'UTF-8'): string => {
const encodedText = Buffer.from(text).toString('base64');
return `=?${charset}?B?${encodedText}?=`;
};
try {
const encodedTitle = encodeRfc2047(this.title);
const res: any = await got
.post(`${ntfyUrl || 'https://ntfy.sh'}/${ntfyTopic}`, {
...this.gotOption,
body: `${this.title}\n${this.content}`,
headers: { 'Title': 'qinglong', 'Priority': `${ntfyPriority || '3'}` },
body: `${this.content}`,
headers: { 'Title': encodedTitle, 'Priority': `${ntfyPriority || '3'}` },
});
if (res.statusCode === 200) {
return true;
Expand Down
14 changes: 10 additions & 4 deletions sample/notify.js
Original file line number Diff line number Diff line change
Expand Up @@ -1195,14 +1195,19 @@ function webhookNotify(text, desp) {
}

function ntfyNotify(text, desp) {
function encodeRFC2047(text) {
const encodedBase64 = Buffer.from(text).toString('base64');
return `=?utf-8?B?${encodedBase64}?=`;
}

return new Promise((resolve) => {
const { NTFY_URL, NTFY_TOPIC, NTFY_PRIORITY } = push_config;
if (NTFY_TOPIC) {
const options = {
url: NTFY_URL || `https://ntfy.sh`,
body: `${desp}\n${text}`,
url: `${NTFY_URL || 'https://ntfy.sh'}/${NTFY_TOPIC}`,
body: `${desp}`,
headers: {
'Title': 'qinglong',
'Title': `${encodeRFC2047(text)}`,
'Priority': NTFY_PRIORITY || '3'
},
timeout,
Expand All @@ -1212,7 +1217,7 @@ function ntfyNotify(text, desp) {
if (err) {
console.log('Ntfy 通知调用API失败😞\n', err);
} else {
if (data.success) {
if (data.id) {
console.log('Ntfy 发送通知消息成功🎉\n');
} else {
console.log(`Ntfy 发送通知消息异常 ${JSON.stringify(data)}`);
Expand All @@ -1230,6 +1235,7 @@ function ntfyNotify(text, desp) {
});
}


function parseString(input, valueFormatFn) {
const regex = /(\w+):\s*((?:(?!\n\w+:).)*)/g;
const matches = {};
Expand Down
24 changes: 17 additions & 7 deletions sample/notify.py
Original file line number Diff line number Diff line change
Expand Up @@ -116,7 +116,7 @@ def print(text, *args, **kw):
'WEBHOOK_BODY': '', # 自定义通知 请求体
'WEBHOOK_HEADERS': '', # 自定义通知 请求头
'WEBHOOK_METHOD': '', # 自定义通知 请求方法
'WEBHOOK_CONTENT_TYPE': '' # 自定义通知 content-type
'WEBHOOK_CONTENT_TYPE': '', # 自定义通知 content-type

'NTFY_URL': '', # ntfy地址,如https://ntfy.sh
'NTFY_TOPIC': '', # ntfy的消息应用topic
Expand Down Expand Up @@ -789,6 +789,12 @@ def ntfy(title: str, content: str) -> None:
"""
通过 Ntfy 推送消息
"""
def encode_rfc2047(text: str) -> str:
"""将文本编码为符合 RFC 2047 标准的格式"""
encoded_bytes = base64.b64encode(text.encode('utf-8'))
encoded_str = encoded_bytes.decode('utf-8')
return f'=?utf-8?B?{encoded_str}?='

if not push_config.get("NTFY_TOPIC"):
print("ntfy 服务的 NTFY_TOPIC 未设置!!\n取消推送")
return
Expand All @@ -798,18 +804,22 @@ def ntfy(title: str, content: str) -> None:
print("ntfy 服务的NTFY_PRIORITY 未设置!!默认设置为3")
else:
priority = push_config.get("NTFY_PRIORITY")
data = (title + "\n" +content).encode(encoding='utf-8')

# 使用 RFC 2047 编码 title
encoded_title = encode_rfc2047(title)

data = content.encode(encoding='utf-8')
headers = {
"Title": "qinglong",
"Title": encoded_title, # 使用编码后的 title
"Priority": priority
}

url = push_config.get("NTFY_URL") + "/" + push_config.get("NTFY_TOPIC")
response = requests.post(url, data=data, headers=headers)

if response["code"] == 200:
if response.status_code == 200: # 使用 response.status_code 进行检查
print("Ntfy 推送成功!")
else:
print("Ntfy 推送失败!错误信息:", response)
print("Ntfy 推送失败!错误信息:", response.text)

def parse_headers(headers):
if not headers:
Expand Down Expand Up @@ -1014,4 +1024,4 @@ def main():


if __name__ == "__main__":
main()
main()

0 comments on commit 56bc2f0

Please sign in to comment.