From 277e418cf30dc5d029b3bbd850734ccf0e6a4988 Mon Sep 17 00:00:00 2001 From: idranme Date: Mon, 23 Sep 2024 22:10:12 +0800 Subject: [PATCH] refactor --- src/ntqqapi/api/friend.ts | 3 +- src/ntqqapi/api/group.ts | 22 +++++------ src/ntqqapi/api/user.ts | 39 ++++++++----------- .../services/NodeIKernelBuddyService.ts | 6 +-- src/ntqqapi/services/NodeIKernelMsgService.ts | 30 +------------- .../services/NodeIKernelProfileService.ts | 13 ------- src/ntqqapi/types/msg.ts | 23 +++++++++++ src/ntqqapi/types/user.ts | 18 +++++++++ .../action/group/SetGroupAddRequest.ts | 15 ++++--- src/onebot11/action/group/SetGroupAdmin.ts | 26 +++++++------ src/onebot11/action/group/SetGroupBan.ts | 23 ++++++----- src/onebot11/action/group/SetGroupCard.ts | 21 ++++++---- src/onebot11/action/group/SetGroupKick.ts | 21 ++++++---- src/onebot11/action/group/SetGroupLeave.ts | 19 +++++---- src/onebot11/action/group/SetGroupName.ts | 8 +++- src/onebot11/action/group/SetGroupWholeBan.ts | 11 ++++-- 16 files changed, 157 insertions(+), 141 deletions(-) diff --git a/src/ntqqapi/api/friend.ts b/src/ntqqapi/api/friend.ts index dbbb361..d9bb92e 100644 --- a/src/ntqqapi/api/friend.ts +++ b/src/ntqqapi/api/friend.ts @@ -1,8 +1,7 @@ -import { Friend, FriendV2, SimpleInfo, CategoryFriend } from '../types' +import { Friend, FriendV2, SimpleInfo, CategoryFriend, BuddyListReqType } from '../types' import { ReceiveCmdS } from '../hook' import { invoke, NTMethod, NTClass } from '../ntcall' import { getSession } from '@/ntqqapi/wrapper' -import { BuddyListReqType } from '../services' import { Dict, pick } from 'cosmokit' import { Service, Context } from 'cordis' diff --git a/src/ntqqapi/api/group.ts b/src/ntqqapi/api/group.ts index 9c2bea2..d11fbef 100644 --- a/src/ntqqapi/api/group.ts +++ b/src/ntqqapi/api/group.ts @@ -65,32 +65,30 @@ export class NTQQGroupApi extends Service { return result.result.infos } - async getGroupMember(groupCode: string | number, memberUinOrUid: string | number) { - const groupCodeStr = groupCode.toString() - const memberUinOrUidStr = memberUinOrUid.toString() - if (!this.groupMembers.has(groupCodeStr)) { + async getGroupMember(groupCode: string, memberUinOrUid: string) { + if (!this.groupMembers.has(groupCode)) { try { // 更新群成员列表 - this.groupMembers.set(groupCodeStr, await this.getGroupMembers(groupCodeStr)) + this.groupMembers.set(groupCode, await this.getGroupMembers(groupCode)) } catch (e) { - return null + return } } - let members = this.groupMembers.get(groupCodeStr)! + let members = this.groupMembers.get(groupCode)! const getMember = () => { let member: GroupMember | undefined = undefined - if (isNumeric(memberUinOrUidStr)) { - member = Array.from(members.values()).find(member => member.uin === memberUinOrUidStr) + if (isNumeric(memberUinOrUid)) { + member = Array.from(members.values()).find(member => member.uin === memberUinOrUid) } else { - member = members.get(memberUinOrUidStr) + member = members.get(memberUinOrUid) } return member } let member = getMember() if (!member) { - this.groupMembers.set(groupCodeStr, await this.getGroupMembers(groupCodeStr)) - members = this.groupMembers.get(groupCodeStr)! + this.groupMembers.set(groupCode, await this.getGroupMembers(groupCode)) + members = this.groupMembers.get(groupCode)! member = getMember() } return member diff --git a/src/ntqqapi/api/user.ts b/src/ntqqapi/api/user.ts index 690b385..ccea3ca 100644 --- a/src/ntqqapi/api/user.ts +++ b/src/ntqqapi/api/user.ts @@ -1,9 +1,8 @@ +import { User, UserDetailInfoByUin, UserDetailInfoByUinV2, UserDetailInfoListenerArg, UserDetailSource, ProfileBizType } from '../types' import { invoke } from '../ntcall' -import { User, UserDetailInfoByUin, UserDetailInfoByUinV2, UserDetailInfoListenerArg } from '../types' import { getBuildVersion } from '@/common/utils' import { getSession } from '@/ntqqapi/wrapper' import { RequestUtil } from '@/common/utils/request' -import { UserDetailSource, ProfileBizType } from '../services' import { Time } from 'cosmokit' import { Service, Context } from 'cordis' import { selfInfo } from '@/common/globalVars' @@ -157,30 +156,24 @@ export class NTQQUserApi extends Service { return uid } - async getUidByUinV2(uin: string) { - const session = getSession() - if (session) { - let uid = (await session.getGroupService().getUidByUins([uin])).uids.get(uin) - if (uid) return uid - uid = (await session.getProfileService().getUidByUin('FriendsServiceImpl', [uin])).get(uin) - if (uid) return uid - uid = (await session.getUixConvertService().getUid([uin])).uidInfo.get(uin) - if (uid) return uid - } else { - let uid = (await invoke('nodeIKernelGroupService/getUidByUins', [{ uin: [uin] }])).uids.get(uin) - if (uid) return uid - uid = (await invoke('nodeIKernelProfileService/getUidByUin', [{ callFrom: 'FriendsServiceImpl', uin: [uin] }])).get(uin) - if (uid) return uid - uid = (await invoke('nodeIKernelUixConvertService/getUid', [{ uins: [uin] }])).uidInfo.get(uin) - if (uid) return uid + async getUidByUinV2(uin: string, groupCode?: string) { + let uid = (await invoke('nodeIKernelGroupService/getUidByUins', [{ uin: [uin] }])).uids.get(uin) + if (uid) return uid + uid = (await invoke('nodeIKernelProfileService/getUidByUin', [{ callFrom: 'FriendsServiceImpl', uin: [uin] }])).get(uin) + if (uid) return uid + uid = (await invoke('nodeIKernelUixConvertService/getUid', [{ uins: [uin] }])).uidInfo.get(uin) + if (uid) return uid + const unveifyUid = (await this.getUserDetailInfoByUinV2(uin)).detail.uid + if (!unveifyUid.includes('*')) return unveifyUid + if (groupCode) { + const member = await this.ctx.ntGroupApi.getGroupMember(groupCode, uin) + return member?.uid } - const unveifyUid = (await this.getUserDetailInfoByUinV2(uin)).detail.uid //从QQ Native 特殊转换 - if (unveifyUid.indexOf('*') == -1) return unveifyUid } - async getUidByUin(uin: string) { + async getUidByUin(uin: string, groupCode?: string) { if (getBuildVersion() >= 26702) { - return this.getUidByUinV2(uin) + return this.getUidByUinV2(uin, groupCode) } return this.getUidByUinV1(uin) } @@ -249,7 +242,7 @@ export class NTQQUserApi extends Service { if (session) { return await session.getTicketService().forceFetchClientKey('') } else { - return await invoke('nodeIKernelTicketService/forceFetchClientKey', [{ domain: '' }, null]) + return await invoke('nodeIKernelTicketService/forceFetchClientKey', [{ url: '' }, null]) } } diff --git a/src/ntqqapi/services/NodeIKernelBuddyService.ts b/src/ntqqapi/services/NodeIKernelBuddyService.ts index af04ffc..2bbf5ed 100644 --- a/src/ntqqapi/services/NodeIKernelBuddyService.ts +++ b/src/ntqqapi/services/NodeIKernelBuddyService.ts @@ -1,10 +1,6 @@ +import { BuddyListReqType } from '@/ntqqapi/types' import { GeneralCallResult } from './common' -export enum BuddyListReqType { - KNOMAL, - KLETTER -} - export interface NodeIKernelBuddyService { getBuddyListV2(callFrom: string, reqType: BuddyListReqType): Promise): Promise + sendMsg(msgId: string, peer: Peer, msgElements: MessageElement[], map: Map): Promise recallMsg(peer: Peer, msgIds: string[]): Promise diff --git a/src/ntqqapi/services/NodeIKernelProfileService.ts b/src/ntqqapi/services/NodeIKernelProfileService.ts index 5ccec1c..0ea55a1 100644 --- a/src/ntqqapi/services/NodeIKernelProfileService.ts +++ b/src/ntqqapi/services/NodeIKernelProfileService.ts @@ -1,19 +1,6 @@ import { SimpleInfo } from '../types' import { GeneralCallResult } from './common' -export enum UserDetailSource { - KDB, - KSERVER -} - -export enum ProfileBizType { - KALL, - KBASEEXTEND, - KVAS, - KQZONE, - KOTHER -} - export interface NodeIKernelProfileService { getUidByUin(callfrom: string, uin: Array): Promise> diff --git a/src/ntqqapi/types/msg.ts b/src/ntqqapi/types/msg.ts index 81390ab..0f7bd8d 100644 --- a/src/ntqqapi/types/msg.ts +++ b/src/ntqqapi/types/msg.ts @@ -1,4 +1,5 @@ import { GroupMemberRole } from './group' +import { GeneralCallResult } from '../services' export interface GetFileListParam { sortType: number @@ -565,3 +566,25 @@ export interface OnGroupFileInfoUpdateParams { nextIndex: number reqId: number } + +export interface QueryMsgsParams { + chatInfo: Peer + filterMsgType: [] + filterSendersUid: string[] + filterMsgFromTime: string + filterMsgToTime: string + pageLimit: number + isReverseOrder: boolean + isIncludeCurrent: boolean +} + +export interface TmpChatInfoApi extends GeneralCallResult { + tmpChatInfo?: { + chatType: number + fromNick: string + groupCode: string + peerUid: string + sessionType: number + sig: string + } +} diff --git a/src/ntqqapi/types/user.ts b/src/ntqqapi/types/user.ts index 2ba6212..09054d7 100644 --- a/src/ntqqapi/types/user.ts +++ b/src/ntqqapi/types/user.ts @@ -344,3 +344,21 @@ export interface UserDetailInfoByUin { vipNameColorId: string } } + +export enum BuddyListReqType { + KNOMAL, + KLETTER +} + +export enum UserDetailSource { + KDB, + KSERVER +} + +export enum ProfileBizType { + KALL, + KBASEEXTEND, + KVAS, + KQZONE, + KOTHER +} diff --git a/src/onebot11/action/group/SetGroupAddRequest.ts b/src/onebot11/action/group/SetGroupAddRequest.ts index 5364a72..076b1e2 100644 --- a/src/onebot11/action/group/SetGroupAddRequest.ts +++ b/src/onebot11/action/group/SetGroupAddRequest.ts @@ -1,22 +1,25 @@ -import { BaseAction } from '../BaseAction' +import { BaseAction, Schema } from '../BaseAction' import { GroupRequestOperateTypes } from '@/ntqqapi/types' import { ActionName } from '../types' interface Payload { flag: string - approve?: boolean | string + approve: boolean reason?: string } export default class SetGroupAddRequest extends BaseAction { actionName = ActionName.SetGroupAddRequest + payloadSchema = Schema.object({ + flag: Schema.string().required(), + approve: Schema.boolean().default(true), + reason: Schema.string() + }) protected async _handle(payload: Payload): Promise { - const flag = payload.flag.toString() - const approve = payload.approve?.toString() !== 'false' await this.ctx.ntGroupApi.handleGroupRequest( - flag, - approve ? GroupRequestOperateTypes.approve : GroupRequestOperateTypes.reject, + payload.flag, + payload.approve ? GroupRequestOperateTypes.approve : GroupRequestOperateTypes.reject, payload.reason ) return null diff --git a/src/onebot11/action/group/SetGroupAdmin.ts b/src/onebot11/action/group/SetGroupAdmin.ts index 30596d4..74fd71b 100644 --- a/src/onebot11/action/group/SetGroupAdmin.ts +++ b/src/onebot11/action/group/SetGroupAdmin.ts @@ -1,26 +1,30 @@ -import { BaseAction } from '../BaseAction' +import { BaseAction, Schema } from '../BaseAction' import { GroupMemberRole } from '@/ntqqapi/types' import { ActionName } from '../types' interface Payload { - group_id: number - user_id: number + group_id: number | string + user_id: number | string enable: boolean } export default class SetGroupAdmin extends BaseAction { actionName = ActionName.SetGroupAdmin + payloadSchema = Schema.object({ + group_id: Schema.union([Number, String]).required(), + user_id: Schema.union([Number, String]).required(), + enable: Schema.boolean().default(true) + }) protected async _handle(payload: Payload): Promise { - const member = await this.ctx.ntGroupApi.getGroupMember(payload.group_id, payload.user_id) - const enable = payload.enable.toString() === 'true' - if (!member) { - throw `群成员${payload.user_id}不存在` - } + const groupCode = payload.group_id.toString() + const uin = payload.user_id.toString() + const uid = await this.ctx.ntUserApi.getUidByUin(uin, groupCode) + if (!uid) throw new Error('无法获取用户信息') await this.ctx.ntGroupApi.setMemberRole( - payload.group_id.toString(), - member.uid, - enable ? GroupMemberRole.admin : GroupMemberRole.normal, + groupCode, + uid, + payload.enable ? GroupMemberRole.admin : GroupMemberRole.normal ) return null } diff --git a/src/onebot11/action/group/SetGroupBan.ts b/src/onebot11/action/group/SetGroupBan.ts index e8e4cf7..c286eaf 100644 --- a/src/onebot11/action/group/SetGroupBan.ts +++ b/src/onebot11/action/group/SetGroupBan.ts @@ -1,22 +1,27 @@ -import { BaseAction } from '../BaseAction' +import { BaseAction, Schema } from '../BaseAction' import { ActionName } from '../types' interface Payload { - group_id: number - user_id: number + group_id: number | string + user_id: number | string duration: number } export default class SetGroupBan extends BaseAction { actionName = ActionName.SetGroupBan + payloadSchema = Schema.object({ + group_id: Schema.union([Number, String]).required(), + user_id: Schema.union([Number, String]).required(), + duration: Schema.number().default(30 * 60) + }) protected async _handle(payload: Payload): Promise { - const member = await this.ctx.ntGroupApi.getGroupMember(payload.group_id, payload.user_id) - if (!member) { - throw `群成员${payload.user_id}不存在` - } - await this.ctx.ntGroupApi.banMember(payload.group_id.toString(), [ - { uid: member.uid, timeStamp: parseInt(payload.duration.toString()) }, + const groupCode = payload.group_id.toString() + const uin = payload.user_id.toString() + const uid = await this.ctx.ntUserApi.getUidByUin(uin, groupCode) + if (!uid) throw new Error('无法获取用户信息') + await this.ctx.ntGroupApi.banMember(groupCode, [ + { uid, timeStamp: payload.duration }, ]) return null } diff --git a/src/onebot11/action/group/SetGroupCard.ts b/src/onebot11/action/group/SetGroupCard.ts index 980c443..ed952dc 100644 --- a/src/onebot11/action/group/SetGroupCard.ts +++ b/src/onebot11/action/group/SetGroupCard.ts @@ -1,21 +1,26 @@ -import { BaseAction } from '../BaseAction' +import { BaseAction, Schema } from '../BaseAction' import { ActionName } from '../types' interface Payload { - group_id: number - user_id: number + group_id: number | string + user_id: number | string card: string } export default class SetGroupCard extends BaseAction { actionName = ActionName.SetGroupCard + payloadSchema = Schema.object({ + group_id: Schema.union([Number, String]).required(), + user_id: Schema.union([Number, String]).required(), + card: Schema.string().default('') + }) protected async _handle(payload: Payload): Promise { - const member = await this.ctx.ntGroupApi.getGroupMember(payload.group_id, payload.user_id) - if (!member) { - throw `群成员${payload.user_id}不存在` - } - await this.ctx.ntGroupApi.setMemberCard(payload.group_id.toString(), member.uid, payload.card || '') + const groupCode = payload.group_id.toString() + const uin = payload.user_id.toString() + const uid = await this.ctx.ntUserApi.getUidByUin(uin, groupCode) + if (!uid) throw new Error('无法获取用户信息') + await this.ctx.ntGroupApi.setMemberCard(groupCode, uid, payload.card) return null } } diff --git a/src/onebot11/action/group/SetGroupKick.ts b/src/onebot11/action/group/SetGroupKick.ts index 421ed6c..5f8fe69 100644 --- a/src/onebot11/action/group/SetGroupKick.ts +++ b/src/onebot11/action/group/SetGroupKick.ts @@ -1,21 +1,26 @@ -import { BaseAction } from '../BaseAction' +import { BaseAction, Schema } from '../BaseAction' import { ActionName } from '../types' interface Payload { - group_id: number - user_id: number + group_id: number | string + user_id: number | string reject_add_request: boolean } export default class SetGroupKick extends BaseAction { actionName = ActionName.SetGroupKick + payloadSchema = Schema.object({ + group_id: Schema.union([Number, String]).required(), + user_id: Schema.union([Number, String]).required(), + reject_add_request: Schema.boolean().default(false) + }) protected async _handle(payload: Payload): Promise { - const member = await this.ctx.ntGroupApi.getGroupMember(payload.group_id, payload.user_id) - if (!member) { - throw `群成员${payload.user_id}不存在` - } - await this.ctx.ntGroupApi.kickMember(payload.group_id.toString(), [member.uid], !!payload.reject_add_request) + const groupCode = payload.group_id.toString() + const uin = payload.user_id.toString() + const uid = await this.ctx.ntUserApi.getUidByUin(uin, groupCode) + if (!uid) throw new Error('无法获取用户信息') + await this.ctx.ntGroupApi.kickMember(groupCode, [uid], payload.reject_add_request) return null } } diff --git a/src/onebot11/action/group/SetGroupLeave.ts b/src/onebot11/action/group/SetGroupLeave.ts index bd1d977..8ccf9df 100644 --- a/src/onebot11/action/group/SetGroupLeave.ts +++ b/src/onebot11/action/group/SetGroupLeave.ts @@ -1,20 +1,19 @@ -import { BaseAction } from '../BaseAction' +import { BaseAction, Schema } from '../BaseAction' import { ActionName } from '../types' interface Payload { - group_id: number - is_dismiss: boolean + group_id: number | string + is_dismiss?: boolean } -export default class SetGroupLeave extends BaseAction { +export default class SetGroupLeave extends BaseAction { actionName = ActionName.SetGroupLeave + payloadSchema = Schema.object({ + group_id: Schema.union([Number, String]).required() + }) protected async _handle(payload: Payload) { - try { - await this.ctx.ntGroupApi.quitGroup(payload.group_id.toString()) - } catch (e) { - this.ctx.logger.error('退群失败', e) - throw e - } + await this.ctx.ntGroupApi.quitGroup(payload.group_id.toString()) + return null } } diff --git a/src/onebot11/action/group/SetGroupName.ts b/src/onebot11/action/group/SetGroupName.ts index ea460de..cdbb08c 100644 --- a/src/onebot11/action/group/SetGroupName.ts +++ b/src/onebot11/action/group/SetGroupName.ts @@ -1,13 +1,17 @@ -import { BaseAction } from '../BaseAction' +import { BaseAction, Schema } from '../BaseAction' import { ActionName } from '../types' interface Payload { - group_id: number + group_id: number | string group_name: string } export default class SetGroupName extends BaseAction { actionName = ActionName.SetGroupName + payloadSchema = Schema.object({ + group_id: Schema.union([Number, String]).required(), + group_name: Schema.string().required() + }) protected async _handle(payload: Payload): Promise { await this.ctx.ntGroupApi.setGroupName(payload.group_id.toString(), payload.group_name) diff --git a/src/onebot11/action/group/SetGroupWholeBan.ts b/src/onebot11/action/group/SetGroupWholeBan.ts index 52fbd80..792e429 100644 --- a/src/onebot11/action/group/SetGroupWholeBan.ts +++ b/src/onebot11/action/group/SetGroupWholeBan.ts @@ -1,17 +1,20 @@ -import { BaseAction } from '../BaseAction' +import { BaseAction, Schema } from '../BaseAction' import { ActionName } from '../types' interface Payload { - group_id: number + group_id: number | string enable: boolean } export default class SetGroupWholeBan extends BaseAction { actionName = ActionName.SetGroupWholeBan + payloadSchema = Schema.object({ + group_id: Schema.union([Number, String]).required(), + enable: Schema.boolean().default(true) + }) protected async _handle(payload: Payload): Promise { - const enable = payload.enable.toString() === 'true' - await this.ctx.ntGroupApi.banGroup(payload.group_id.toString(), enable) + await this.ctx.ntGroupApi.banGroup(payload.group_id.toString(), payload.enable) return null } }