diff --git a/package.json b/package.json index 5f92ed6a..a6516ef3 100644 --- a/package.json +++ b/package.json @@ -1,66 +1,66 @@ -{ - "name": "napcat", - "private": true, - "type": "module", - "version": "1.4.0", - "scripts": { - "watch:dev": "vite --mode development", - "watch:prod": "vite --mode production", - "build:dev": "vite build --mode development", - "build:prod": "vite build --mode production", - "build": "npm run build:dev", - "build:core": "cd ./src/core && npm run build && cd ../.. && node ./script/copy-core.cjs", - "build:webui": "cd ./src/webui && vite build", - "watch": "npm run watch:dev", - "debug-win": "powershell dist/napcat.ps1", - "lint": "eslint --fix src/**/*.{js,ts}", - "release": "npm run build:prod", - "depend": "cd dist && npm install --omit=dev" - }, - "devDependencies": { - "@log4js-node/log4js-api": "^1.0.2", - "@rollup/plugin-node-resolve": "^15.2.3", - "@rollup/plugin-typescript": "^11.1.6", - "@types/cors": "^2.8.17", - "@types/express": "^4.17.21", - "@types/figlet": "^1.5.8", - "@types/fluent-ffmpeg": "^2.1.24", - "@types/node": "^20.11.30", - "@types/qrcode-terminal": "^0.12.2", - "@types/uuid": "^9.0.8", - "@types/ws": "^8.5.10", - "@typescript-eslint/eslint-plugin": "^7.4.0", - "@typescript-eslint/parser": "^7.4.0", - "eslint": "^8.57.0", - "eslint-import-resolver-typescript": "^3.6.1", - "eslint-plugin-import": "^2.29.1", - "i": "^0.3.7", - "javascript-obfuscator": "^4.1.0", - "rollup": "^4.13.2", - "rollup-plugin-dts": "^6.1.0", - "rollup-plugin-obfuscator": "^1.1.0", - "typescript": "^5.3.3", - "vite": "^5.2.6", - "vite-plugin-cp": "^4.0.8", - "vite-plugin-dts": "^3.8.2", - "vite-tsconfig-paths": "^4.3.2", - "@protobuf-ts/plugin": "^2.9.4" - }, - "dependencies": { - "ajv": "^8.13.0", - "commander": "^12.0.0", - "cors": "^2.8.5", - "express": "^5.0.0-beta.2", - "fast-xml-parser": "^4.3.6", - "file-type": "^19.0.0", - "fluent-ffmpeg": "^2.1.2", - "image-size": "^1.1.1", - "json-schema-to-ts": "^3.1.0", - "log4js": "^6.9.1", - "qrcode-terminal": "^0.12.0", - "silk-wasm": "^3.3.4", - "sqlite3": "^5.1.7", - "uuid": "^9.0.1", - "ws": "^8.16.0" - } -} +{ + "name": "napcat", + "private": true, + "type": "module", + "version": "1.4.0", + "scripts": { + "watch:dev": "vite --mode development", + "watch:prod": "vite --mode production", + "build:dev": "vite build --mode development", + "build:prod": "vite build --mode production", + "build": "npm run build:dev", + "build:core": "cd ./src/core && npm run build && cd ../.. && node ./script/copy-core.cjs", + "build:webui": "cd ./src/webui && vite build", + "watch": "npm run watch:dev", + "debug-win": "powershell dist/napcat.ps1", + "lint": "eslint --fix src/**/*.{js,ts}", + "release": "npm run build:prod", + "depend": "cd dist && npm install --omit=dev" + }, + "devDependencies": { + "@log4js-node/log4js-api": "^1.0.2", + "@rollup/plugin-node-resolve": "^15.2.3", + "@rollup/plugin-typescript": "^11.1.6", + "@types/cors": "^2.8.17", + "@types/express": "^4.17.21", + "@types/figlet": "^1.5.8", + "@types/fluent-ffmpeg": "^2.1.24", + "@types/node": "^20.11.30", + "@types/qrcode-terminal": "^0.12.2", + "@types/uuid": "^9.0.8", + "@types/ws": "^8.5.10", + "@typescript-eslint/eslint-plugin": "^7.4.0", + "@typescript-eslint/parser": "^7.4.0", + "eslint": "^8.57.0", + "eslint-import-resolver-typescript": "^3.6.1", + "eslint-plugin-import": "^2.29.1", + "i": "^0.3.7", + "javascript-obfuscator": "^4.1.0", + "rollup": "^4.13.2", + "rollup-plugin-dts": "^6.1.0", + "rollup-plugin-obfuscator": "^1.1.0", + "typescript": "^5.3.3", + "vite": "^5.2.6", + "vite-plugin-cp": "^4.0.8", + "vite-plugin-dts": "^3.8.2", + "vite-tsconfig-paths": "^4.3.2", + "@protobuf-ts/plugin": "^2.9.4" + }, + "dependencies": { + "ajv": "^8.13.0", + "commander": "^12.0.0", + "cors": "^2.8.5", + "express": "^5.0.0-beta.2", + "fast-xml-parser": "^4.3.6", + "file-type": "^19.0.0", + "fluent-ffmpeg": "^2.1.2", + "image-size": "^1.1.1", + "json-schema-to-ts": "^3.1.0", + "log4js": "^6.9.1", + "qrcode-terminal": "^0.12.0", + "silk-wasm": "^3.3.4", + "sqlite3": "^5.1.7", + "uuid": "^9.0.1", + "ws": "^8.16.0" + } +} diff --git a/src/common/utils/helper.ts b/src/common/utils/helper.ts index 3d7cb267..5fcd1728 100644 --- a/src/common/utils/helper.ts +++ b/src/common/utils/helper.ts @@ -138,6 +138,10 @@ export function migrateConfig(oldConfig: any) { enable: oldConfig.enableWsReverse, urls: oldConfig.wsReverseUrls, }, + GroupLocalTime: { + Record: false, + RecordList: [] + }, debug: oldConfig.debug, heartInterval: oldConfig.heartInterval, messagePostFormat: oldConfig.messagePostFormat, @@ -145,8 +149,7 @@ export function migrateConfig(oldConfig: any) { musicSignUrl: oldConfig.musicSignUrl, reportSelfMessage: oldConfig.reportSelfMessage, token: oldConfig.token, - GroupLocalTimeRecord: false, - GroupLocalTimeRecordList: [] + }; return newConfig; } diff --git a/src/onebot11/action/group/GetGroupMemberList.ts b/src/onebot11/action/group/GetGroupMemberList.ts index 63e2d4cf..8e52914c 100644 --- a/src/onebot11/action/group/GetGroupMemberList.ts +++ b/src/onebot11/action/group/GetGroupMemberList.ts @@ -62,7 +62,7 @@ class GetGroupMemberList extends BaseAction { MemberMap.set(webGroupMembers[i]?.uin, MemberData); } } - } else if (ob11Config.GroupLocalTimeRecord && ob11Config.GroupLocalTimeRecordList[0] === -1 || ob11Config.GroupLocalTimeRecordList.includes(payload.group_id)) { + } else if (ob11Config.GroupLocalTime.Record && ob11Config.GroupLocalTime.RecordList[0] === '-1' || ob11Config.GroupLocalTime.RecordList.includes(payload.group_id.toString())) { const _sendAndJoinRember = await dbUtil.getLastSentTimeAndJoinTime(payload.group_id); _sendAndJoinRember.forEach((element) => { let MemberData = MemberMap.get(element.user_id); diff --git a/src/onebot11/config.ts b/src/onebot11/config.ts index 7c5c4498..50ece431 100644 --- a/src/onebot11/config.ts +++ b/src/onebot11/config.ts @@ -32,9 +32,10 @@ export interface OB11Config { musicSignUrl: string; reportSelfMessage: boolean; token: string; - GroupLocalTimeRecord: boolean; - GroupLocalTimeRecordList: Array; - + GroupLocalTime: { + Record: boolean, + RecordList: Array + }, read(): OB11Config; save(config: OB11Config): void; @@ -66,8 +67,10 @@ class Config extends ConfigBase implements OB11Config { musicSignUrl = ''; reportSelfMessage = false; token = ''; - GroupLocalTimeRecord = false; - GroupLocalTimeRecordList = [] as Array; + GroupLocalTime = { + Record: false, + RecordList: [] as Array + }; getConfigPath() { return path.join(this.getConfigDir(), `onebot11_${selfInfo.uin}.json`); diff --git a/src/onebot11/event/notice/OB11GroupIncreaseEvent.ts b/src/onebot11/event/notice/OB11GroupIncreaseEvent.ts index 99f891e8..7e02a375 100644 --- a/src/onebot11/event/notice/OB11GroupIncreaseEvent.ts +++ b/src/onebot11/event/notice/OB11GroupIncreaseEvent.ts @@ -14,8 +14,7 @@ export class OB11GroupIncreaseEvent extends OB11GroupNoticeEvent { this.user_id = userId; this.sub_type = subType; - if((ob11Config.GroupLocalTimeRecord[0] == -1 || ob11Config.GroupLocalTimeRecord.includes(groupId))) + if(ob11Config.GroupLocalTime.Record && (ob11Config.GroupLocalTime.RecordList[0] == '-1' || ob11Config.GroupLocalTime.RecordList.includes(groupId.toString()))) dbUtil.insertJoinTime(groupId, userId, Math.floor(Date.now() / 1000)) - } } diff --git a/src/onebot11/main.ts b/src/onebot11/main.ts index aabf797a..2a1fa194 100644 --- a/src/onebot11/main.ts +++ b/src/onebot11/main.ts @@ -287,7 +287,7 @@ export class NapCatOnebot11 { if (msg.post_type === 'message') { logMessage(msg as OB11Message).then().catch(logError); // 大概测试了一下,10000个以内 includes 和 find 性能差距不大 - if (msg.message_type == 'group' && msg.group_id && ob11Config.GroupLocalTimeRecord && (ob11Config.GroupLocalTimeRecordList[0] === -1 || ob11Config.GroupLocalTimeRecordList.find(gid=>gid == msg.group_id))) { + if (msg.message_type == 'group' && msg.group_id && ob11Config.GroupLocalTime.Record && (ob11Config.GroupLocalTime.RecordList[0] === '-1' || ob11Config.GroupLocalTime.RecordList.find(gid => gid == msg.group_id?.toString()))) { dbUtil.insertLastSentTime(msg.group_id, msg.user_id, msg.time); } } else if (msg.post_type === 'notice') { diff --git a/src/webui/ui/NapCat.ts b/src/webui/ui/NapCat.ts index 50c47411..d458179b 100644 --- a/src/webui/ui/NapCat.ts +++ b/src/webui/ui/NapCat.ts @@ -101,7 +101,7 @@ async function onSettingWindowCreated(view: Element) { 'control-display-id': 'config-ob11-reverseWs-urls', }) ), - `
+ `
反向 WebSocket 监听地址 @@ -137,22 +137,22 @@ async function onSettingWindowCreated(view: Element) { undefined, `
`, 'ob11.musicSignUrl' - ), + ), SettingItem( '启用本地进群时间与发言时间记录', undefined, - SettingSwitch('ob11.GroupLocalTimeRecord', ob11Config.reverseWs.enable, { - 'control-display-id': 'config-ob11-GroupLocalTimeRecordList', + SettingSwitch('ob11.GroupLocalTime.Record', ob11Config.reverseWs.enable, { + 'control-display-id': 'config-ob11-GroupLocalTime-RecordList', }) ), - `
+ `
- 反向 WebSocket 监听地址 + 群列表
- 添加 + 添加
-
+
`, SettingItem( '', @@ -261,7 +261,6 @@ async function onSettingWindowCreated(view: Element) { inputAttr: any = {} ) => { type = type.replace(/\./g, '-');//替换操作 - const hostContainerDom = doc.body.querySelector( `#config-ob11-${type}-list` ); @@ -293,6 +292,7 @@ async function onSettingWindowCreated(view: Element) { initReverseHost('http.postUrls', doc); initReverseHost('reverseWs.urls', doc); + initReverseHost('GroupLocalTime.RecordList', doc); doc .querySelector('#config-ob11-http-postUrls-add') @@ -309,7 +309,13 @@ async function onSettingWindowCreated(view: Element) { placeholder: '如:ws://127.0.0.1:5140/onebot', }) ); - + doc + .querySelector('#config-ob11-GroupLocalTime-RecordList-add') + ?.addEventListener('click', () => + addReverseHost('GroupLocalTime.RecordList', document, { + placeholder: '如:ws://127.0.0.1:5140/onebot', + }) + ); doc.querySelector('#config-ffmpeg-select')?.addEventListener('click', () => { //选择ffmpeg }); diff --git a/src/webui/ui/components/WebUiApiOB11Config.ts b/src/webui/ui/components/WebUiApiOB11Config.ts index 6144566b..1d9eee0f 100644 --- a/src/webui/ui/components/WebUiApiOB11Config.ts +++ b/src/webui/ui/components/WebUiApiOB11Config.ts @@ -18,7 +18,10 @@ export interface OB11Config { enable: boolean; urls: string[]; }; - + GroupLocalTime: { + Record: boolean, + RecordList: Array + }; debug: boolean; heartInterval: number; messagePostFormat: 'array' | 'string'; @@ -26,8 +29,7 @@ export interface OB11Config { musicSignUrl: ''; reportSelfMessage: boolean; token: ''; - GroupLocalTimeRecord: false; - GroupLocalTimeRecordList: []; + } class WebUiApiOB11ConfigWrapper { diff --git a/static/assets/renderer.js b/static/assets/renderer.js index d7915ce8..9267511d 100644 --- a/static/assets/renderer.js +++ b/static/assets/renderer.js @@ -274,6 +274,22 @@ async function onSettingWindowCreated(view) { `
`, "ob11.musicSignUrl" ), + SettingItem( + "启用本地进群时间与发言时间记录", + void 0, + SettingSwitch("ob11.GroupLocalTime.Record", ob11Config.reverseWs.enable, { + "control-display-id": "config-ob11-GroupLocalTime-RecordList" + }) + ), + `
+ +
+ 群列表 +
+ 添加 +
+
+
`, SettingItem( "", void 0, @@ -388,6 +404,7 @@ async function onSettingWindowCreated(view) { }; initReverseHost("http.postUrls", doc); initReverseHost("reverseWs.urls", doc); + initReverseHost("GroupLocalTime.RecordList", doc); doc.querySelector("#config-ob11-http-postUrls-add")?.addEventListener( "click", () => addReverseHost("http.postUrls", document, { @@ -400,6 +417,12 @@ async function onSettingWindowCreated(view) { placeholder: "如:ws://127.0.0.1:5140/onebot" }) ); + doc.querySelector("#config-ob11-GroupLocalTime-RecordList-add")?.addEventListener( + "click", + () => addReverseHost("GroupLocalTime.RecordList", document, { + placeholder: "如:ws://127.0.0.1:5140/onebot" + }) + ); doc.querySelector("#config-ffmpeg-select")?.addEventListener("click", () => { }); doc.querySelector("#config-open-log-path")?.addEventListener("click", () => {