diff --git a/manifest.json b/manifest.json index 17a615ec..a395c727 100644 --- a/manifest.json +++ b/manifest.json @@ -4,7 +4,7 @@ "name": "NapCatQQ", "slug": "NapCat.Framework", "description": "高性能的 OneBot 11 协议实现", - "version": "2.4.7", + "version": "2.4.8", "icon": "./logo.png", "authors": [ { diff --git a/package.json b/package.json index 79f51cf3..65b9bfba 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "napcat", "private": true, "type": "module", - "version": "2.4.7", + "version": "2.4.8", "scripts": { "build:framework": "vite build --mode framework", "build:shell": "vite build --mode shell", diff --git a/src/common/version.ts b/src/common/version.ts index 10b0c396..ec01a8e5 100644 --- a/src/common/version.ts +++ b/src/common/version.ts @@ -1 +1 @@ -export const napCatVersion = '2.4.7'; +export const napCatVersion = '2.4.8'; diff --git a/src/core/apis/group.ts b/src/core/apis/group.ts index 1d1d2e9d..a2c93705 100644 --- a/src/core/apis/group.ts +++ b/src/core/apis/group.ts @@ -262,6 +262,23 @@ export class NTQQGroupApi { } return member; } + async searchGroup(groupCode: string) { + const [, ret] = await this.core.eventWrapper.callNormalEventV2( + 'NodeIKernelSearchService/searchGroup', + 'NodeIKernelSearchListener/onSearchGroupResult', + [{ + keyWords: groupCode, + groupNum: 25, + exactSearch: false, + penetrate: '' + }], + (ret) => ret.result === 0, + (params) => !!params.groupInfos.find(g => g.groupCode === groupCode), + 1, + 5000 + ); + return ret.groupInfos.find(g => g.groupCode === groupCode); + } async getGroupMemberEx(GroupCode: string, uid: string, forced = false, retry = 2) { const data = await solveAsyncProblem((eventWrapper: NTEventWrapper, GroupCode: string, uid: string, forced = false) => { return eventWrapper.callNormalEventV2( diff --git a/src/core/listeners/NodeIKernelSearchListener.ts b/src/core/listeners/NodeIKernelSearchListener.ts new file mode 100644 index 00000000..19e35d1e --- /dev/null +++ b/src/core/listeners/NodeIKernelSearchListener.ts @@ -0,0 +1,97 @@ +import { ChatType } from '@/core'; +export interface SearchGroupInfo { + groupCode: string; + ownerUid: string; + groupFlag: number; + groupFlagExt: number; + maxMemberNum: number; + memberNum: number; + groupOption: number; + classExt: number; + groupName: string; + fingerMemo: string; + groupQuestion: string; + certType: number; + shutUpAllTimestamp: number; + shutUpMeTimestamp: number; + groupTypeFlag: number; + privilegeFlag: number; + groupSecLevel: number; + groupFlagExt3: number; + isConfGroup: number; + isModifyConfGroupFace: number; + isModifyConfGroupName: number; + noFigerOpenFlag: number; + noCodeFingerOpenFlag: number; + groupFlagExt4: number; + groupMemo: string; + cmdUinMsgSeq: number; + cmdUinJoinTime: number; + cmdUinUinFlag: number; + cmdUinMsgMask: number; + groupSecLevelInfo: number; + cmdUinPrivilege: number; + cmdUinFlagEx2: number; + appealDeadline: number; + remarkName: string; + isTop: boolean; + richFingerMemo: string; + groupAnswer: string; + joinGroupAuth: string; + isAllowModifyConfGroupName: number; +} + +export interface GroupInfo { + groupCode: string; + searchGroupInfo: SearchGroupInfo; + privilege: number; +} + +export interface GroupSearchResult { + keyWord: string; + errorCode: number; + groupInfos: GroupInfo[]; + penetrate: string; + isEnd: boolean; + nextPos: number; +} +export interface NodeIKernelSearchListener { + + onSearchGroupResult(params: GroupSearchResult): void; + + onSearchFileKeywordsResult(params: { + searchId: string, + hasMore: boolean, + resultItems: { + chatType: ChatType, + buddyChatInfo: any[], + discussChatInfo: any[], + groupChatInfo: { + groupCode: string, + isConf: boolean, + hasModifyConfGroupFace: boolean, + hasModifyConfGroupName: boolean, + groupName: string, + remark: string + }[], + dataLineChatInfo: any[], + tmpChatInfo: any[], + msgId: string, + msgSeq: string, + msgTime: string, + senderUid: string, + senderNick: string, + senderRemark: string, + senderCard: string, + elemId: string, + elemType: number, + fileSize: string, + filePath: string, + fileName: string, + hits: { + start: number, + end: number + }[] + }[] + }): void; +} diff --git a/src/core/listeners/NodeIKernelSearchListener_Polyfill.ts b/src/core/listeners/NodeIKernelSearchListener_Polyfill.ts deleted file mode 100644 index 1e9bcdf1..00000000 --- a/src/core/listeners/NodeIKernelSearchListener_Polyfill.ts +++ /dev/null @@ -1,39 +0,0 @@ -import { ChatType } from '@/core'; - -export interface NodeIKernelSearchListener_Polyfill { - onSearchFileKeywordsResult(params: { - searchId: string, - hasMore: boolean, - resultItems: { - chatType: ChatType, - buddyChatInfo: any[], - discussChatInfo: any[], - groupChatInfo: { - groupCode: string, - isConf: boolean, - hasModifyConfGroupFace: boolean, - hasModifyConfGroupName: boolean, - groupName: string, - remark: string - }[], - dataLineChatInfo: any[], - tmpChatInfo: any[], - msgId: string, - msgSeq: string, - msgTime: string, - senderUid: string, - senderNick: string, - senderRemark: string, - senderCard: string, - elemId: string, - elemType: number, - fileSize: string, - filePath: string, - fileName: string, - hits: { - start: number, - end: number - }[] - }[] - }): void; -} diff --git a/src/core/listeners/index.ts b/src/core/listeners/index.ts index e485f87c..a1eb0a7c 100644 --- a/src/core/listeners/index.ts +++ b/src/core/listeners/index.ts @@ -9,7 +9,7 @@ export * from './NodeIKernelProfileListener'; export * from './NodeIKernelTicketListener'; export * from './NodeIKernelStorageCleanListener'; export * from './NodeIKernelFileAssistantListener'; -export * from './NodeIKernelSearchListener_Polyfill'; +export * from './NodeIKernelSearchListener'; import type { NodeIKernelBuddyListener, @@ -19,11 +19,11 @@ import type { NodeIKernelMsgListener, NodeIKernelProfileListener, NodeIKernelRobotListener, - NodeIKernelSearchListener_Polyfill, NodeIKernelSessionListener, NodeIKernelStorageCleanListener, NodeIKernelTicketListener, } from '.'; +import { NodeIKernelSearchListener } from './NodeIKernelSearchListener'; export type ListenerNamingMapping = { NodeIKernelSessionListener: NodeIKernelSessionListener; @@ -36,5 +36,5 @@ export type ListenerNamingMapping = { NodeIKernelTicketListener: NodeIKernelTicketListener; NodeIKernelStorageCleanListener: NodeIKernelStorageCleanListener; NodeIKernelFileAssistantListener: NodeIKernelFileAssistantListener; - NodeIKernelSearchListener: NodeIKernelSearchListener_Polyfill; + NodeIKernelSearchListener: NodeIKernelSearchListener; }; diff --git a/src/core/services/NodeIKernelSearchService.ts b/src/core/services/NodeIKernelSearchService.ts index bb81f8e4..9617a0ef 100644 --- a/src/core/services/NodeIKernelSearchService.ts +++ b/src/core/services/NodeIKernelSearchService.ts @@ -1,4 +1,5 @@ import { ChatType } from '../entities'; +import { GeneralCallResult } from './common'; export interface NodeIKernelSearchService { @@ -8,7 +9,12 @@ export interface NodeIKernelSearchService { searchStranger(unknown: string, searchStranger: unknown, searchParams: unknown): Promise; - searchGroup(...args: any[]): unknown;// needs 1 arguments + searchGroup(param: { + keyWords: string, + groupNum: number, + exactSearch: boolean, + penetrate: string + }): Promise;// needs 1 arguments searchLocalInfo(keywords: string, unknown: number/*4*/): unknown; diff --git a/src/onebot/action/group/GetGroupInfo.ts b/src/onebot/action/group/GetGroupInfo.ts index 99e81e22..c08e2fa2 100644 --- a/src/onebot/action/group/GetGroupInfo.ts +++ b/src/onebot/action/group/GetGroupInfo.ts @@ -20,7 +20,17 @@ class GetGroupInfo extends BaseAction { async _handle(payload: Payload) { const group = (await this.core.apis.GroupApi.getGroups()).find(e => e.groupCode == payload.group_id.toString()); - if (!group) throw `群${payload.group_id}不存在`; + if (!group) { + const data = await this.core.apis.GroupApi.searchGroup(payload.group_id.toString()); + if (!data) throw new Error('Group not found'); + return { + ...data.searchGroupInfo, + group_id: +payload.group_id, + group_name: data.searchGroupInfo.groupName, + member_count: data.searchGroupInfo.memberNum, + max_member_count: data.searchGroupInfo.maxMemberNum, + } + } return OB11Entities.group(group); } } diff --git a/src/webui/ui/NapCat.ts b/src/webui/ui/NapCat.ts index 165149fa..93350f8b 100644 --- a/src/webui/ui/NapCat.ts +++ b/src/webui/ui/NapCat.ts @@ -30,7 +30,7 @@ async function onSettingWindowCreated(view: Element) { SettingItem( 'Napcat', undefined, - SettingButton('V2.4.7', 'napcat-update-button', 'secondary'), + SettingButton('V2.4.8', 'napcat-update-button', 'secondary'), ), ]), SettingList([ diff --git a/static/assets/renderer.js b/static/assets/renderer.js index a0c529ea..6fd0496a 100644 --- a/static/assets/renderer.js +++ b/static/assets/renderer.js @@ -164,7 +164,7 @@ async function onSettingWindowCreated(view) { SettingItem( 'Napcat', void 0, - SettingButton("V2.4.7", "napcat-update-button", "secondary") + SettingButton("V2.4.8", "napcat-update-button", "secondary") ) ]), SettingList([