From bc8235b20929fd74602496d5f43a731ce03e018f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=89=8B=E7=93=9C=E4=B8=80=E5=8D=81=E9=9B=AA?= Date: Sat, 24 Aug 2024 21:54:11 +0800 Subject: [PATCH 1/3] =?UTF-8?q?fix:=20=E7=A7=BB=E9=99=A4=E6=97=A0=E7=94=A8?= =?UTF-8?q?=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/core/entities/notify.ts | 3 +-- src/onebot/index.ts | 1 - 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/src/core/entities/notify.ts b/src/core/entities/notify.ts index 48a488bf..4743a8fd 100644 --- a/src/core/entities/notify.ts +++ b/src/core/entities/notify.ts @@ -41,8 +41,7 @@ export enum GroupInviteType { BYDISCUSSMEMBER } export interface GroupNotify { - time: number; // 自己添加的字段,时间戳,毫秒, 用于判断收到短时间内收到重复的notify - seq: string; // 唯一标识符,转成数字再除以1000应该就是时间戳? + seq: string; // 通知序列号 type: GroupNotifyMsgType; status: GroupNotifyMsgStatus; group: { groupCode: string; groupName: string }; diff --git a/src/onebot/index.ts b/src/onebot/index.ts index 531e4483..5740bb59 100644 --- a/src/onebot/index.ts +++ b/src/onebot/index.ts @@ -327,7 +327,6 @@ export class NapCatOneBot11Adapter { GroupNotifyMsgType.CANCEL_ADMIN_NOTIFY_ADMIN, ].includes(notifies[0]?.type)) { for (const notify of notifies) { - notify.time = Date.now(); const notifyTime = parseInt(notify.seq) / 1000 / 1000; // log(`群通知时间${notifyTime}`, `启动时间${this.bootTime}`); if (notifyTime < this.bootTime) { From 881d88f4ad1f65edf235db428d60bfaf30597182 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=89=8B=E7=93=9C=E4=B8=80=E5=8D=81=E9=9B=AA?= Date: Sat, 24 Aug 2024 22:12:14 +0800 Subject: [PATCH 2/3] feat: quitGroupV2 --- src/core/apis/group.ts | 51 +++++++++++--------- src/core/services/NodeIKernelGroupService.ts | 2 + 2 files changed, 31 insertions(+), 22 deletions(-) diff --git a/src/core/apis/group.ts b/src/core/apis/group.ts index abe05b67..ad103098 100644 --- a/src/core/apis/group.ts +++ b/src/core/apis/group.ts @@ -42,12 +42,12 @@ export class NTQQGroupApi { type ListenerType = NodeIKernelGroupListener['onGroupListUpdate']; const [_retData, _updateType, groupList] = await this.core.eventWrapper.CallNormalEvent<(force: boolean) => Promise, ListenerType> ( - 'NodeIKernelGroupService/getGroupList', - 'NodeIKernelGroupListener/onGroupListUpdate', - 1, - 5000, - () => true, - forced, + 'NodeIKernelGroupService/getGroupList', + 'NodeIKernelGroupListener/onGroupListUpdate', + 1, + 5000, + () => true, + forced, ); return groupList; } @@ -219,7 +219,14 @@ export class NTQQGroupApi { // GetMsgByShoretID(ShoretID); -> MsgService.getMsgs(Peer,MsgId,1,false); -> 组出参数 return this.context.session.getGroupService().addGroupEssence(param); } - + async quitGroupV2(GroupCode: string, needDeleteLocalMsg: boolean) { + let param = { + groupCode: GroupCode, + needDeleteLocalMsg: needDeleteLocalMsg + }; + //应该是直接返回不需要Listener的 未经测试 需测试再发布 + return this.context.session.getGroupService().quitGroupV2(param); + } async removeGroupEssence(GroupCode: string, msgId: string) { // 代码没测过 // 需要 ob11msgid->msgId + (peer) -> msgSeq + msgRandom @@ -240,14 +247,14 @@ export class NTQQGroupApi { async getSingleScreenNotifies(num: number) { const [_retData, _doubt, _seq, notifies] = await this.core.eventWrapper.CallNormalEvent<(arg1: boolean, arg2: string, arg3: number) => Promise, (doubt: boolean, seq: string, notifies: GroupNotify[]) => void> ( - 'NodeIKernelGroupService/getSingleScreenNotifies', - 'NodeIKernelGroupListener/onGroupSingleScreenNotifies', - 1, - 5000, - () => true, - false, - '', - num, + 'NodeIKernelGroupService/getSingleScreenNotifies', + 'NodeIKernelGroupListener/onGroupSingleScreenNotifies', + 1, + 5000, + () => true, + false, + '', + num, ); return notifies; } @@ -259,12 +266,12 @@ export class NTQQGroupApi { //return napCatCore.session.getGroupService().getMemberInfo(GroupCode, [uid], forced); const Listener = this.core.eventWrapper.RegisterListen<(params: any) => void> ( - 'NodeIKernelGroupListener/onMemberInfoChange', - 1, - forced ? 5000 : 250, - (params) => { - return params === GroupCode; - }, + 'NodeIKernelGroupListener/onMemberInfoChange', + 1, + forced ? 5000 : 250, + (params) => { + return params === GroupCode; + }, ); const EventFunc = this.core.eventWrapper.createEventFunction('NodeIKernelGroupService/getMemberInfo'); const retData = await EventFunc!(GroupCode, [uid], forced); @@ -333,7 +340,7 @@ export class NTQQGroupApi { 'NodeIKernelGroupService/getGroupRecommendContactArkJson', 5000, GroupCode, - ); + ); return ret.arkJson; } diff --git a/src/core/services/NodeIKernelGroupService.ts b/src/core/services/NodeIKernelGroupService.ts index 7ffaaaf3..a5d4bed5 100644 --- a/src/core/services/NodeIKernelGroupService.ts +++ b/src/core/services/NodeIKernelGroupService.ts @@ -11,6 +11,8 @@ import { GeneralCallResult } from '@/core/services/common'; //高版本的接口不应该随意使用 使用应该严格进行pr审核 同时部分ipc中未出现的接口不要过于依赖 应该做好数据兜底 export interface NodeIKernelGroupService { + quitGroupV2(param: { groupCode: string; needDeleteLocalMsg: boolean; }): Promise; + getMemberCommonInfo(Req: { groupCode: string, startUin: string, From a89cdef436f0847f9f4babecd07f836241e3fec1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=89=8B=E7=93=9C=E4=B8=80=E5=8D=81=E9=9B=AA?= Date: Sat, 24 Aug 2024 22:23:44 +0800 Subject: [PATCH 3/3] chore: kickMemberV2Inner --- src/core/apis/group.ts | 5 +++++ src/core/entities/group.ts | 14 +++++++++++++- src/core/services/NodeIKernelGroupService.ts | 4 +++- 3 files changed, 21 insertions(+), 2 deletions(-) diff --git a/src/core/apis/group.ts b/src/core/apis/group.ts index ad103098..1266ed37 100644 --- a/src/core/apis/group.ts +++ b/src/core/apis/group.ts @@ -7,6 +7,8 @@ import { GroupNotify, GroupRequestOperateTypes, InstanceContext, + KickMemberInfo, + kickMemberV2Req, MemberExtSourceType, NapCatCore, NodeIKernelGroupListener, @@ -219,6 +221,9 @@ export class NTQQGroupApi { // GetMsgByShoretID(ShoretID); -> MsgService.getMsgs(Peer,MsgId,1,false); -> 组出参数 return this.context.session.getGroupService().addGroupEssence(param); } + async kickMemberV2Inner(param: kickMemberV2Req) { + return this.context.session.getGroupService().kickMemberV2(param); + } async quitGroupV2(GroupCode: string, needDeleteLocalMsg: boolean) { let param = { groupCode: GroupCode, diff --git a/src/core/entities/group.ts b/src/core/entities/group.ts index b926e1fb..980fe2c7 100644 --- a/src/core/entities/group.ts +++ b/src/core/entities/group.ts @@ -1,5 +1,17 @@ import { QQLevel, Sex, User } from './user'; - +export interface KickMemberInfo { + optFlag: number, + optOperate: number, + optMemberUid: string, + optBytesMsg: string, +} +export interface kickMemberV2Req{ + groupCode: string, + kickFlag: number, + kickList: Array, + kickListUids: Array, + kickMsg: string +} export enum GroupListUpdateType { REFRESHALL, GETALL, diff --git a/src/core/services/NodeIKernelGroupService.ts b/src/core/services/NodeIKernelGroupService.ts index a5d4bed5..b1e519f5 100644 --- a/src/core/services/NodeIKernelGroupService.ts +++ b/src/core/services/NodeIKernelGroupService.ts @@ -5,14 +5,16 @@ import { GroupMemberRole, GroupNotifyMsgType, GroupRequestOperateTypes, + kickMemberV2Req, } from '@/core/entities'; import { GeneralCallResult } from '@/core/services/common'; //高版本的接口不应该随意使用 使用应该严格进行pr审核 同时部分ipc中未出现的接口不要过于依赖 应该做好数据兜底 export interface NodeIKernelGroupService { + kickMemberV2(param: kickMemberV2Req): Promise; quitGroupV2(param: { groupCode: string; needDeleteLocalMsg: boolean; }): Promise; - + getMemberCommonInfo(Req: { groupCode: string, startUin: string,