kaoqin-services
Version:
考勤系统服务库
1 lines • 3.82 kB
JavaScript
;const axios=require("axios"),BaseNotificationService=require("./base-notification"),{TimeUtils}=require("kaoqin-utils");class NtfyService extends BaseNotificationService{constructor(a){super(),this.configManager=a,this.axios=axios.create({headers:{"Content-Type":"application/json"},proxy:!1}),this.serverUrl=this.configManager.get("NTFY.serverUrl"),this.topic=this.configManager.get("NTFY.topic"),this.auth=this.configManager.get("NTFY.auth"),this.enabled=this.configManager.get("NTFY.enabled"),this.priority=this.configManager.get("NTFY.priority",3)}async sendNotification(a,b,c={}){const d=process.argv.includes("--test-date")||process.argv.includes("--test-holiday")||process.argv.includes("--test-ntfy");if(d&&!process.argv.includes("--send-ntfy"))return console.log("\u6D4B\u8BD5\u6A21\u5F0F\u4E2D\u672A\u6307\u5B9A--send-ntfy\u53C2\u6570\uFF0C\u8DF3\u8FC7Ntfy\u901A\u77E5\u53D1\u9001"),null;if(!this.enabled&&!this.configManager.get("NTFY.forceSend")&&!d)return console.log("Ntfy\u901A\u77E5\u670D\u52A1\u672A\u542F\u7528\uFF0C\u8DF3\u8FC7\u53D1\u9001"),null;this.configManager.get("NTFY.forceSend")&&console.log("Ntfy\u901A\u77E5\u5F3A\u5236\u53D1\u9001\u6A21\u5F0F\u5DF2\u542F\u7528\uFF0C\u5C06\u5FFD\u7565enabled\u8BBE\u7F6E");try{const d=encodeURIComponent(a),e=`${this.serverUrl}/${this.topic}?title=${d}`,f=this.auth?{username:this.auth.username,password:this.auth.password}:null,g={"Content-Type":"text/plain;charset=UTF-8"};c.priority&&(g.Priority=c.priority),c.tags&&0<c.tags.length&&(g.Tags=c.tags.join(",")),c.clickUrl&&(g.Click=c.clickUrl);const h=await this.axios.put(e,b,{headers:g,auth:f});return console.log("Ntfy\u901A\u77E5\u53D1\u9001\u6210\u529F:",{title:a,message:b.substring(0,50)+(50<b.length?"...":""),topic:this.topic}),h.data}catch(a){throw console.error("\u53D1\u9001Ntfy\u901A\u77E5\u5931\u8D25:",a.message),a}}escapeHeaderValue(a){return a?a.replace(/[^\x00-\x7F]/g,a=>encodeURIComponent(a)):a}async sendKaoqinNotification(a,b,c,d,e={}){const f=`📆 ${this.configManager.get("USERNAME")} ${a} - 打卡提醒`;let g="";g+=b.includes("\u5C1A\u672A")?`⚠️ ${b}\n\n`:b.includes("\u8F9B\u82E6\u4E86")?`✅ ${b}\n\n`:`ℹ️ ${b}\n\n`,g+=c.includes("\u5C1A\u672A\u6253\u5361")?`🕗 上班打卡: ${c}\n`:`✅ 上班打卡: ${c}\n`,g+=d.includes("\u5C1A\u672A\u6253\u5361")?`🕔 下班打卡: ${d}`:`✅ 下班打卡: ${d}`;const h={...e,tags:["clock","calendar","time"],priority:b.includes("\u5C1A\u672A")?"5":"3"};return await this.sendNotification(f,g,h)}async sendDetailedRecords(a,b,c={}){if(!b||0===b.length)return null;const d=`📊 ${this.configManager.get("USERNAME")} ${a} - 打卡详细记录`;let e=`共 ${b.length} 条打卡记录:\n\n`;b.forEach((a,c)=>{const d=a.dx_29_dxlxmc||"\u672A\u77E5\u7C7B\u578B",f=TimeUtils.formatTimestamp(a.dx_29_dksj)||"\u672A\u77E5\u65F6\u95F4",g=a.dx_29_dxztmc||"\u672A\u77E5\u72B6\u6001",h=a.dx_29_dkwz||"\u672A\u77E5\u4F4D\u7F6E";let i="\uD83D\uDD53";d.includes("\u4E0A\u73ED")?i="\uD83C\uDFE2":d.includes("\u4E0B\u73ED")&&(i="\uD83C\uDFE0"),e+=`${i} ${d} (${c+1}/${b.length})\n`,e+=` ⏰ 时间: ${f}\n`,e+=` 🔖 状态: ${g}\n`,e+=` 📍 位置: ${h}\n`,c<b.length-1&&(e+=`\n---------------\n\n`)});const f={...c,tags:["memo","list","info"],priority:"2"};return await this.sendNotification(d,e,f)}async sendErrorNotification(a,b,c={}){const d=`⚠️ ${this.configManager.get("USERNAME")} ${a}`,e=`❌ 出现错误:\n\n${b}\n\n⏰ 时间: ${TimeUtils.getTodayString("YYYY-MM-DD HH:mm:ss")}`,f={...c,tags:["warning","skull","error"],priority:"5"};return await this.sendNotification(d,e,f)}async sendHolidayGreeting(a,b,c,d={}){const e=`🎉 ${this.configManager.get("USERNAME")} ${a} ${b}问候`,f={...d,tags:["holiday","greeting"],priority:"3"};return await this.sendNotification(e,c,f)}}module.exports=NtfyService;