From c7b9946d2f3f3c47f281b00f382974fbc2c4c68e 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: Wed, 23 Apr 2025 16:46:09 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20doubt=20friends=E6=94=AF=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/core/apis/friend.ts | 24 +++++++++++++++++++ src/core/services/NodeIKernelBuddyService.ts | 2 +- src/onebot/action/index.ts | 4 ++++ .../action/new/GetDoubtFriendsAddRequest.ts | 18 ++++++++++++++ .../action/new/SetDoubtFriendsAddRequest.ts | 21 ++++++++++++++++ src/onebot/action/router.ts | 4 ++++ 6 files changed, 72 insertions(+), 1 deletion(-) create mode 100644 src/onebot/action/new/GetDoubtFriendsAddRequest.ts create mode 100644 src/onebot/action/new/SetDoubtFriendsAddRequest.ts diff --git a/src/core/apis/friend.ts b/src/core/apis/friend.ts index 5e3e327c..a8254ec1 100644 --- a/src/core/apis/friend.ts +++ b/src/core/apis/friend.ts @@ -89,4 +89,28 @@ export class NTQQFriendApi { async handleDoubtFriendRequest(friendUid: string, str1: string = '', str2: string = '') { this.context.session.getBuddyService().approvalDoubtBuddyReq(friendUid, str1, str2); } + async getDoubtFriendRequest(count: number) { + let date = Date.now().toString(); + const [, ret] = await this.core.eventWrapper.callNormalEventV2( + 'NodeIKernelBuddyService/getDoubtBuddyReq', + 'NodeIKernelBuddyListener/onDoubtBuddyReqChange', + [date, count, ''], + () => true, + (data) => data.reqId === date + ); + let requests = Promise.all(ret.doubtList.map(async (item) => { + return { + flag: item.uid, //注意强制String 非isNumeric 不遵守则不符合设计 + uin: await this.core.apis.UserApi.getUinByUidV2(item.uid) ?? 0,// 信息字段 + nick: item.nick, // 信息字段 这个不是nickname 可能是来源的群内的昵称 + source: item.source, // 信息字段 + reason: item.reason, // 信息字段 + msg: item.msg, // 信息字段 + group_code: item.groupCode, // 信息字段 + time: item.reqTime, // 信息字段 + type: 'doubt' //保留字段 + }; + })) + return requests; + } } diff --git a/src/core/services/NodeIKernelBuddyService.ts b/src/core/services/NodeIKernelBuddyService.ts index 1b2cdff8..dd025c08 100644 --- a/src/core/services/NodeIKernelBuddyService.ts +++ b/src/core/services/NodeIKernelBuddyService.ts @@ -106,7 +106,7 @@ export interface NodeIKernelBuddyService { getAddMeSetting(): unknown; - getDoubtBuddyReq(reqId: string, num: number): Promise; + getDoubtBuddyReq(reqId: string, num: number,uk:string): Promise; getDoubtBuddyUnreadNum(): number; diff --git a/src/onebot/action/index.ts b/src/onebot/action/index.ts index bd12979d..37dc07f5 100644 --- a/src/onebot/action/index.ts +++ b/src/onebot/action/index.ts @@ -116,10 +116,14 @@ import { GetRkeyServer } from './packet/GetRkeyServer'; import { GetRkeyEx } from './packet/GetRkeyEx'; import { CleanCache } from './system/CleanCache'; import SetFriendRemark from './user/SetFriendRemark'; +import { SetDoubtFriendsAddRequest } from './new/SetDoubtFriendsAddRequest'; +import { GetDoubtFriendsAddRequest } from './new/GetDoubtFriendsAddRequest'; export function createActionMap(obContext: NapCatOneBot11Adapter, core: NapCatCore) { const actionHandlers = [ + new SetDoubtFriendsAddRequest(obContext, core), + new GetDoubtFriendsAddRequest(obContext, core), new SetFriendRemark(obContext, core), new GetRkeyEx(obContext, core), new GetRkeyServer(obContext, core), diff --git a/src/onebot/action/new/GetDoubtFriendsAddRequest.ts b/src/onebot/action/new/GetDoubtFriendsAddRequest.ts new file mode 100644 index 00000000..7b8ae921 --- /dev/null +++ b/src/onebot/action/new/GetDoubtFriendsAddRequest.ts @@ -0,0 +1,18 @@ +import { OneBotAction } from '@/onebot/action/OneBotAction'; +import { ActionName } from '@/onebot/action/router'; +import { Static, Type } from '@sinclair/typebox'; + +const SchemaData = Type.Object({ + count: Type.Number({ default: 50 }), +}); + +type Payload = Static; + +export class GetDoubtFriendsAddRequest extends OneBotAction { + override actionName = ActionName.GetDoubtFriendsAddRequest; + override payloadSchema = SchemaData; + + async _handle(payload: Payload) { + return await this.core.apis.FriendApi.getDoubtFriendRequest(payload.count); + } +} diff --git a/src/onebot/action/new/SetDoubtFriendsAddRequest.ts b/src/onebot/action/new/SetDoubtFriendsAddRequest.ts new file mode 100644 index 00000000..990d5607 --- /dev/null +++ b/src/onebot/action/new/SetDoubtFriendsAddRequest.ts @@ -0,0 +1,21 @@ +import { OneBotAction } from '@/onebot/action/OneBotAction'; +import { ActionName } from '@/onebot/action/router'; +import { Static, Type } from '@sinclair/typebox'; + +const SchemaData = Type.Object({ + flag: Type.String(), + //注意强制String 非isNumeric 不遵守则不符合设计 + approve: Type.Boolean({ default: true }), + //该字段没有语义 仅做保留 强制为True +}); + +type Payload = Static; + +export class SetDoubtFriendsAddRequest extends OneBotAction { + override actionName = ActionName.SetDoubtFriendsAddRequest; + override payloadSchema = SchemaData; + + async _handle(payload: Payload) { + return await this.core.apis.FriendApi.handleDoubtFriendRequest(payload.flag); + } +} diff --git a/src/onebot/action/router.ts b/src/onebot/action/router.ts index fe3acd21..6abfe642 100644 --- a/src/onebot/action/router.ts +++ b/src/onebot/action/router.ts @@ -10,6 +10,10 @@ export interface InvalidCheckResult { } export const ActionName = { + // new extends 完全差异OneBot类别 + GetDoubtFriendsAddRequest: 'get_doubt_friends_add_request', + SetDoubtFriendsAddRequest: 'set_doubt_friends_add_request', + // napcat GetRkeyEx: 'get_rkey', GetRkeyServer: 'get_rkey_server', SetGroupRemark: 'set_group_remark',