一个插件就是一个匿名函数,第一个参数为接收到的msg消息对象,包含4个属性,分别为`title`、`content`、`date`和`type`,都是String类型。
第二个参数next为下一个插件的引用。
在函数体内,对msg消息进行加工处理,处理完后,请调用next函数,如果不执行`next();`语句,后面的插件将不会执行。也可以先执行`next();`语句即执行后面插件后,再对msg消息做处理。
所有的插件以著名的洋葱模型运行。
智能主题(自动给消息增加主题样式)
/**
* @name 智能主题
* @description 根据消息标题文字,自动添加相应主题
* @param {Object} msg - 消息体
* @param {String} msg.title - 消息标题
* @param {String} msg.content - 消息内容
* @param {String} msg.date - 消息时间
* @param {String} msg.type - 消息类型
* @param {Function} next - 下一个插件
*/
function(msg, next) {
if(!~['', 'text', 'markdown'].indexOf(msg.type)) {
return next();
}
const reg = /^\[[iswf]\]/;
if(!reg.test(msg.title)) {
const keys = {
f: ['失败', '错误', '异常', '失效', '过期', '不存在'],
w: ['告警', '警告', '通知', '提示', '提醒'],
s: ['成功', '完成'],
i: ['消息', '信息']
};
let is_match = false;
Object.entries(keys).forEach(([k, list]) => {
list.forEach(value => {
if(!is_match && msg.title.includes(value)) {
msg.title = '[' + k + ']' + msg.title;
is_match = true;
}
});
});
}
next();
}