mirror of
https://github.com/babalae/bettergi-scripts-list.git
synced 2026-03-22 04:29:49 +08:00
* 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 通知功能描述 - 维护版本历史记录的准确性
91 lines
3.0 KiB
JavaScript
91 lines
3.0 KiB
JavaScript
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,
|
||
} |