mirror of
https://github.com/whyour/qinglong.git
synced 2025-09-12 05:52:47 +08:00
Update notify.js
自定义通知测试通知正常发送电报机器人正常发送但正常执行就是不响应 不知道有没有其他深意防止我调用自定义请求出问题于是写了调试(注释掉了) 调试信息 - webhookNotify: 传入的标题 (text): xxx 签到结果 传入的内容 (desp): ℹ️ xxx 今日已签到,无需重复签到 相信十年后的八月,我们还会相遇。 ----未闻花名 Webhook URL: https://tz.wd123456789095r.workers.dev/webhook?tk=qlmb123456a Webhook BODY: type: 青龙面板 title: $ content: Webhook HEADERS: Webhook METHOD: POST Webhook CONTENT TYPE: application/json Webhook URL及内容标题无效,跳过推送 于是 解析并替换 BODY 中的占位符: $title / $text => 消息标题 text $content / $desp => 消息内容 desp $ => 向下兼容的写法,替换为 text 稍微兼容了一下其他的不知道有没有问题 建议稍微检查一下其他通知形式有没有类似问题
This commit is contained in:
parent
55c92dc320
commit
ca796503c5
115
sample/notify.js
115
sample/notify.js
|
@ -1209,80 +1209,79 @@ function webhookNotify(text, desp) {
|
||||||
WEBHOOK_CONTENT_TYPE,
|
WEBHOOK_CONTENT_TYPE,
|
||||||
WEBHOOK_METHOD,
|
WEBHOOK_METHOD,
|
||||||
} = push_config;
|
} = push_config;
|
||||||
if (
|
|
||||||
!WEBHOOK_METHOD ||
|
/**
|
||||||
!WEBHOOK_URL ||
|
* // ====== 调试信息输出(方便定位问题)======
|
||||||
(!WEBHOOK_URL.includes('$title') && !WEBHOOK_BODY.includes('$title'))
|
* console.log('===== 调试开始 - webhookNotify =====');
|
||||||
) {
|
* console.log('标题 (text):', text);
|
||||||
resolve();
|
* console.log('内容 (desp):', desp);
|
||||||
return;
|
* console.log('Webhook URL:', WEBHOOK_URL);
|
||||||
|
* console.log('Webhook BODY 模板:', WEBHOOK_BODY);
|
||||||
|
* console.log('Webhook HEADERS:', WEBHOOK_HEADERS);
|
||||||
|
* console.log('Webhook METHOD:', WEBHOOK_METHOD);
|
||||||
|
* console.log('Webhook CONTENT TYPE:', WEBHOOK_CONTENT_TYPE);
|
||||||
|
* console.log('===== 调试结束 =====================');
|
||||||
|
*/
|
||||||
|
if (!WEBHOOK_METHOD || !WEBHOOK_URL) {
|
||||||
|
console.warn('Webhook 参数不足(URL 或 METHOD 缺失),跳过推送。');
|
||||||
|
return resolve();
|
||||||
}
|
}
|
||||||
|
|
||||||
const headers = parseHeaders(WEBHOOK_HEADERS);
|
const headers = parseHeaders(WEBHOOK_HEADERS);
|
||||||
const body = parseBody(WEBHOOK_BODY, WEBHOOK_CONTENT_TYPE, (v) =>
|
|
||||||
v
|
/**
|
||||||
?.replaceAll('$title', text?.replaceAll('\n', '\\n'))
|
* 解析并替换 BODY 中的占位符:
|
||||||
?.replaceAll('$content', desp?.replaceAll('\n', '\\n')),
|
* - $title / $text => 消息标题 text
|
||||||
|
* - $content / $desp => 消息内容 desp
|
||||||
|
* - 单个 $ => 向下兼容的写法,替换为 text
|
||||||
|
*/
|
||||||
|
let bodyObj = parseBody(WEBHOOK_BODY, WEBHOOK_CONTENT_TYPE, (v) =>
|
||||||
|
v.replaceAll('$title', text || '')
|
||||||
|
.replaceAll('$text', text || '')
|
||||||
|
.replaceAll('$', text || '')
|
||||||
|
.replaceAll('$content', desp || '')
|
||||||
|
.replaceAll('$desp', desp || '')
|
||||||
);
|
);
|
||||||
const bodyParam = formatBodyFun(WEBHOOK_CONTENT_TYPE, body);
|
|
||||||
|
if (typeof bodyObj === 'object') {
|
||||||
|
if (!bodyObj.title) bodyObj.title = text || '';
|
||||||
|
if (!bodyObj.content) bodyObj.content = desp || '';
|
||||||
|
}
|
||||||
|
|
||||||
|
const bodyParam = formatBodyFun(WEBHOOK_CONTENT_TYPE, bodyObj);
|
||||||
|
|
||||||
|
const formatUrl = WEBHOOK_URL
|
||||||
|
.replaceAll('$title', encodeURIComponent(text || ''))
|
||||||
|
.replaceAll('$content', encodeURIComponent(desp || ''));
|
||||||
|
|
||||||
const options = {
|
const options = {
|
||||||
method: WEBHOOK_METHOD,
|
method: WEBHOOK_METHOD,
|
||||||
headers,
|
headers,
|
||||||
allowGetBody: true,
|
allowGetBody: true,
|
||||||
...bodyParam,
|
...bodyParam,
|
||||||
timeout,
|
timeout,
|
||||||
retry: 1,
|
retry: 1,
|
||||||
};
|
};
|
||||||
|
|
||||||
const formatUrl = WEBHOOK_URL.replaceAll(
|
console.log('Webhook 请求信息:', { formatUrl, options });
|
||||||
'$title',
|
|
||||||
encodeURIComponent(text),
|
httpClient.request(formatUrl, options)
|
||||||
).replaceAll('$content', encodeURIComponent(desp));
|
.then(async (resp) => {
|
||||||
httpClient.request(formatUrl, options).then(async (resp) => {
|
const respBody = await resp.body.text();
|
||||||
const body = await resp.body.text();
|
|
||||||
try {
|
|
||||||
if (resp.statusCode !== 200) {
|
if (resp.statusCode !== 200) {
|
||||||
console.log(`自定义发送通知消息失败😞 ${body}\n`);
|
console.error(`Webhook 推送失败 😞 响应: ${respBody}`);
|
||||||
} else {
|
} else {
|
||||||
console.log(`自定义发送通知消息成功🎉 ${body}\n`);
|
console.log(`Webhook 推送成功 🎉 响应: ${respBody}`);
|
||||||
}
|
}
|
||||||
} catch (e) {
|
resolve(respBody);
|
||||||
$.logErr(e, resp);
|
})
|
||||||
} finally {
|
.catch((err) => {
|
||||||
resolve(body);
|
console.error('Webhook HTTP 请求失败:', err);
|
||||||
}
|
resolve();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
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, NTFY_TOKEN, NTFY_USERNAME, NTFY_PASSWORD, NTFY_ACTIONS } = push_config;
|
|
||||||
if (NTFY_TOPIC) {
|
|
||||||
const options = {
|
|
||||||
url: `${NTFY_URL || 'https://ntfy.sh'}/${NTFY_TOPIC}`,
|
|
||||||
body: `${desp}`,
|
|
||||||
headers: {
|
|
||||||
Title: `${encodeRFC2047(text)}`,
|
|
||||||
Priority: NTFY_PRIORITY || '3',
|
|
||||||
Icon: 'https://qn.whyour.cn/logo.png',
|
|
||||||
},
|
|
||||||
timeout,
|
|
||||||
};
|
|
||||||
if (NTFY_TOKEN) {
|
|
||||||
options.headers['Authorization'] = `Bearer ${NTFY_TOKEN}`;
|
|
||||||
} else if (NTFY_USERNAME && NTFY_PASSWORD) {
|
|
||||||
options.headers['Authorization'] = `Basic ${Buffer.from(`${NTFY_USERNAME}:${NTFY_PASSWORD}`).toString('base64')}`;
|
|
||||||
}
|
|
||||||
if (NTFY_ACTIONS) {
|
|
||||||
options.headers['Actions'] = encodeRFC2047(NTFY_ACTIONS);
|
|
||||||
}
|
|
||||||
|
|
||||||
$.post(options, (err, resp, data) => {
|
$.post(options, (err, resp, data) => {
|
||||||
try {
|
try {
|
||||||
if (err) {
|
if (err) {
|
||||||
|
|
Loading…
Reference in New Issue
Block a user