fix(notify): 环境变量只给模板 id 时保留内置的字段映射
站长在 Gitea 里设了 WECHAT_MINI_SUBSCRIBE_TEMPLATES。若值里只写 id 不写 fields, 原来会把该模板的字段映射整个替换掉 → buildTemplateData 退回默认映射 (thing1/time2/thing3)→ 发给微信直接 47003。 现在按键合并:给了 fields 就用,没给就沿用内置的(SONG_REJECTED: thing6←songTitle, thing4←reason)。坏 JSON / 裸字符串 / 空对象一律忽略,仍用内置模板。 已验证(8 项断言):内置默认、只给 id(保住映射)、id+fields(完全覆盖)、三种坏值。
This commit is contained in:
@@ -61,7 +61,19 @@ export function getSubscribeTemplates(): Record<string, TemplateConf> {
|
|||||||
if (parsed && typeof parsed === 'object') {
|
if (parsed && typeof parsed === 'object') {
|
||||||
Object.keys(parsed).forEach((k) => {
|
Object.keys(parsed).forEach((k) => {
|
||||||
const conf = parsed[k]
|
const conf = parsed[k]
|
||||||
if (conf && conf.id) merged[k] = conf
|
if (!conf || !conf.id) return
|
||||||
|
const base = merged[k]
|
||||||
|
/*
|
||||||
|
* 环境变量**按键覆盖内置模板**,但只覆盖它给到的部分:
|
||||||
|
* · 给了 id 但没给 fields → 沿用内置的字段映射(否则会退化成
|
||||||
|
* thing1/time2/thing3 的默认映射,发给微信直接 47003);
|
||||||
|
* · 给了 fields → 用它。
|
||||||
|
* 这样"只想换个模板 ID"时不用把 fields 一起抄一遍。
|
||||||
|
*/
|
||||||
|
merged[k] = {
|
||||||
|
id: conf.id,
|
||||||
|
fields: conf.fields && typeof conf.fields === 'object' ? conf.fields : base && base.fields
|
||||||
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
|
|||||||
Reference in New Issue
Block a user