Files
bettergi-scripts-list/repo/js/ActivitySwitchNotice/utils/notice.js
云端客 a3de5b65d6 [0.0.4迭代]活动期限/周本通知器 (#2604)
* feat(notice): 添加WebSocket独立通知功能并重构通知系统

- 实现WebSocket通知功能,支持私聊和群聊模式
- 添加通知类型配置选项,支持BGI通知、独立通知或两者同时使用
- 新增WebSocket相关配置项包括代理URL、连接地址和认证令牌
- 重构通知发送逻辑,支持多种通知类型的消息格式
- 添加@用户功能和多种消息类型支持
- 更新manifest.json添加网络请求权限配置
- 优化代码结构,使用异步初始化加载工具模块

* feat(ActivitySwitchNotice): 添加独立通知功能支持WebSocket推送

- 新增独立通知配置功能,支持通过WebSocket发送通知
- 新增ws.js模块实现WebSocket通知功能
- 新增noticeType配置选项用于选择通知模式
- 新增ws_proxy_url、ws_url、ws_token配置选项
- 新增action、send_id、at_list配置选项用于发送设置
- 更新README文档添加独立通知配置说明和使用要求
- 修复OCR识别函数名称从OcrRemainingTime改为OcrKey

* fix(ActivitySwitchNotice): 修复设置选项数组格式

- 修复了通知模式选项数组中缺少逗号的问题
- 确保JSON格式正确性以避免解析错误

* refactor(notice): 重构通知工具类并修复配置引用问题

- 将 noticeUtil.send 方法重命名为 sendText 以明确功能
- 修复配置对象引用问题,将 config 重命名为 configNotice 避免冲突
- 为 sendNotice 函数添加默认参数和调试日志
- 更新条件判断逻辑,使用 map.size 检查空值
- 修复 ws 模块中的配置对象引用,将 config 重命名为 configWs
- 重构 ws 模块初始化逻辑,确保配置正确加载
- 修复变量命名冲突,将 token 参数重命名为 wsToken
- 更新模块初始化顺序,调整 activity 工具的加载位置

* docs(ActivitySwitchNotice): 更新文档说明独立通知配置和WsProxy部署

- 更新独立通知功能说明,添加WsProxy依赖提示
- 简化settings.json文件路径引用
- 移除多余的配置示例分隔符
- 添加WsProxy部署指南和Docker镜像使用说明
- 整理文档结构,优化内容排版

* docs(ActivitySwitchNotice): 更新 README 文档完善功能说明和配置选项

- 添加了独立通知功能的详细配置说明
- 更新了设置表格格式和内容描述
- 增加了 WsProxy 部署指南和 Docker 配置示例
- 完善了核心模块和配置选项文档
- 修正了文档格式和链接引用问题

* docs(ActivitySwitchNotice): 更新 README 文档中的链接和函数名

- 修复 settings.json 链接格式
- 将 send 函数名更正为 sendText

* chore(ActivitySwitchNotice): 更新版本号

- 将版本号从 0.0.3 更新到 0.4
- 保持其他配置项不变

* docs(ActivitySwitchNotice): 更新版本历史文档

- 将版本 0.0.4 的发布状态更新为具体发布日期 2026-01-01
- 保持独立通知配置功能说明
- 保留 WebSocket 通知功能描述
- 维护版本历史记录的准确性
2026-01-01 20:20:44 +08:00

91 lines
3.0 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
const NoticeType = Object.freeze({
bgi: 'bgi',//BGI通知
independence: 'independence',//独立通知
fromValue(value) {
return Object.keys(this).find(key => this[key] === value);
}
})
const NoticeMap = new Map([
['BGI通知', [{type: NoticeType.bgi}]],
['独立通知', [{type: NoticeType.independence}]],
['独立通知和BGI通知', [{type: NoticeType.independence}, {type: NoticeType.bgi}]],
])
const configNotice = {
noticeList: NoticeMap.get(settings.noticeType),
}
/**
* 发送通知的异步函数
* @param {Map} map - 包含通知内容键值对的Map对象
* @param {string} title - 通知的标题
* @param {boolean} noNotice - 是否不发送通知的标志
*/
async function sendNotice(map = new Map(), title, noNotice = false) {
log.debug(`sendNotice: map.size=${map.size}, noNotice=${noNotice}`);
// 如果设置了不发送通知且map为空则记录日志并返回
if ((map.size <= 0) || noNotice) {
log.debug(`if sendNotice: map.size=${map.size}, noNotice=${noNotice}`);
log.info(`[sendNotice]无通知内容`)
return
}
// 按剩余小时升序排序(即将结束的在前)
const sortedEntries = Array.from(map.entries())
.sort((a, b) => a[1].hours - b[1].hours);
let noticeText = title ? title + "\n======\n" : "\n"
for (const [name, info] of sortedEntries) {
let common = info.common
common = common ? `(${common})` : ''
noticeText += `> ${common} ${name} ${info.text} (还剩 ${info.hours} 小时) ${info.desc}\n----\n`;
}
log.debug(`sendNotice: noticeText:{noticeText}`,noticeText);
// 发送通知
for (let noticeElement of configNotice.noticeList) {
switch (noticeElement.type) {
case NoticeType.independence:
await wsUtil.sendText(noticeText)
break
case NoticeType.bgi:
notification.send(noticeText)
break
}
}
log.debug(`sendNotice: --end`);
return
}
/**
* 异步发送通知的函数
* @param {string} noticeText - 通知内容文本
* @param {string} title - 通知标题
* @param {boolean} noNotice - 是否不发送通知的标志
*/
async function sendText(noticeText, title, noNotice) {
// 检查是否有通知内容且设置了不发送通知的标志
if ((!noticeText) || noNotice) {
log.info(`sendText 无通知内容`) // 记录日志信息
return // 直接返回,不执行后续操作
}
// 构建通知文本,如果有标题则先添加标题
let text = title ? title + "\n======\n" : "\n"
// 添加通知内容
text += noticeText
// 发送通知
for (let noticeElement of configNotice.noticeList) {
switch (noticeElement.type) {
case NoticeType.independence:
await wsUtil.sendText(text)
break
case NoticeType.bgi:
notification.send(text)
break
}
}
return
}
this.noticeUtil = {
sendNotice,
sendText,
}