diff --git a/manifest.json b/manifest.json index 5acb7ae..1ab5ddb 100644 --- a/manifest.json +++ b/manifest.json @@ -4,7 +4,7 @@ "name": "LLOneBot", "slug": "LLOneBot", "description": "实现 OneBot 11 协议,用于 QQ 机器人开发", - "version": "3.33.2", + "version": "3.33.3", "icon": "./icon.webp", "authors": [ { diff --git a/package.json b/package.json index 6795284..36ad3e2 100644 --- a/package.json +++ b/package.json @@ -41,8 +41,8 @@ "electron-vite": "^2.3.0", "protobufjs-cli": "^1.1.3", "typescript": "^5.6.2", - "vite": "^5.4.6", + "vite": "^5.4.7", "vite-plugin-cp": "^4.0.8" }, - "packageManager": "yarn@4.4.1" + "packageManager": "yarn@4.5.0" } diff --git a/src/common/utils/file.ts b/src/common/utils/file.ts index 8c995e1..8dfc40b 100644 --- a/src/common/utils/file.ts +++ b/src/common/utils/file.ts @@ -6,14 +6,6 @@ import { randomUUID, createHash } from 'node:crypto' import { fileURLToPath } from 'node:url' import { fileTypeFromFile } from 'file-type' -export function isGIF(path: string) { - const buffer = Buffer.alloc(4) - const fd = fs.openSync(path, 'r') - fs.readSync(fd, buffer, 0, 4, 0) - fs.closeSync(fd) - return buffer.toString() === 'GIF8' -} - // 定义一个异步函数来检查文件是否存在 export function checkFileReceived(path: string, timeout: number = 3000): Promise { return new Promise((resolve, reject) => { diff --git a/src/common/utils/misc.ts b/src/common/utils/misc.ts index 7e0d63f..5be0c73 100644 --- a/src/common/utils/misc.ts +++ b/src/common/utils/misc.ts @@ -12,8 +12,9 @@ export function calcQQLevel(level: QQLevel) { /** QQ Build Version */ export function getBuildVersion(): number { - const version: string = globalThis.LiteLoader.versions.qqnt - return +version.split('-')[1] + //const version: string = globalThis.LiteLoader.versions.qqnt + //return +version.split('-')[1] + return +globalThis.LiteLoader.package.qqnt.buildVersion } /** 在保证老对象已有的属性不变化的情况下将新对象的属性复制到老对象 */ diff --git a/src/ntqqapi/api/friend.ts b/src/ntqqapi/api/friend.ts index b05edce..dbbb361 100644 --- a/src/ntqqapi/api/friend.ts +++ b/src/ntqqapi/api/friend.ts @@ -62,67 +62,42 @@ export class NTQQFriendApi extends Service { } async getBuddyV2(refresh = false): Promise { - const session = getSession() - if (session) { - const uids: string[] = [] - const buddyService = session.getBuddyService() - const buddyListV2 = await buddyService.getBuddyListV2('0', BuddyListReqType.KNOMAL) - uids.push(...buddyListV2.data.flatMap(item => item.buddyUids)) - const data = await session.getProfileService().getCoreAndBaseInfo('nodeStore', uids) - return Array.from(data.values()) - } else { - const data = await invoke<{ - buddyCategory: CategoryFriend[] - userSimpleInfos: Record - }>( - 'getBuddyList', - [refresh], - { - className: NTClass.NODE_STORE_API, - cbCmd: ReceiveCmdS.FRIENDS, - afterFirstCmd: false, - } - ) - const uids = data.buddyCategory.flatMap(item => item.buddyUids) - return Object.values(data.userSimpleInfos).filter(v => uids.includes(v.uid!)) - } + const data = await invoke<{ + buddyCategory: CategoryFriend[] + userSimpleInfos: Record + }>( + 'getBuddyList', + [refresh], + { + className: NTClass.NODE_STORE_API, + cbCmd: ReceiveCmdS.FRIENDS, + afterFirstCmd: false, + } + ) + const uids = data.buddyCategory.flatMap(item => item.buddyUids) + return Object.values(data.userSimpleInfos).filter(v => uids.includes(v.uid!)) } /** uid => uin */ async getBuddyIdMap(refresh = false): Promise> { const retMap: Map = new Map() - const session = getSession() - if (session) { - const uids: string[] = [] - const buddyService = session.getBuddyService() - const buddyListV2 = await buddyService.getBuddyListV2('0', BuddyListReqType.KNOMAL) - uids.push(...buddyListV2.data.flatMap(item => item.buddyUids)) - const data = await session.getProfileService().getCoreAndBaseInfo('nodeStore', uids) - for (const [, item] of data) { - if (retMap.size > 5000) { - break - } - retMap.set(item.uid!, item.uin!) + const data = await invoke<{ + buddyCategory: CategoryFriend[] + userSimpleInfos: Record + }>( + 'getBuddyList', + [refresh], + { + className: NTClass.NODE_STORE_API, + cbCmd: ReceiveCmdS.FRIENDS, + afterFirstCmd: false, } - } else { - const data = await invoke<{ - buddyCategory: CategoryFriend[] - userSimpleInfos: Record - }>( - 'getBuddyList', - [refresh], - { - className: NTClass.NODE_STORE_API, - cbCmd: ReceiveCmdS.FRIENDS, - afterFirstCmd: false, - } - ) - for (const item of Object.values(data.userSimpleInfos)) { - if (retMap.size > 5000) { - break - } - retMap.set(item.uid!, item.uin!) + ) + for (const item of Object.values(data.userSimpleInfos)) { + if (retMap.size > 5000) { + break } + retMap.set(item.uid!, item.uin!) } return retMap } diff --git a/src/ntqqapi/api/group.ts b/src/ntqqapi/api/group.ts index 3ab7703..9c2bea2 100644 --- a/src/ntqqapi/api/group.ts +++ b/src/ntqqapi/api/group.ts @@ -111,7 +111,6 @@ export class NTQQGroupApi extends Service { 'nodeIKernelGroupService/getSingleScreenNotifies', [{ doubt: false, startSeq: '', number: num }, null], { - cbCmd: ReceiveCmdS.GROUP_NOTIFY, afterFirstCmd: false, } @@ -220,17 +219,7 @@ export class NTQQGroupApi extends Service { } async getGroupRemainAtTimes(groupCode: string) { - return await invoke< - GeneralCallResult & { - atInfo: { - canAtAll: boolean - RemainAtAllCountForUin: number - RemainAtAllCountForGroup: number - atTimesMsg: string - canNotAtAllMsg: '' - } - } - >(NTMethod.GROUP_AT_ALL_REMAIN_COUNT, [{ groupCode }, null]) + return await invoke(NTMethod.GROUP_AT_ALL_REMAIN_COUNT, [{ groupCode }, null]) } async removeGroupEssence(groupCode: string, msgId: string) { @@ -335,4 +324,13 @@ export class NTQQGroupApi extends Service { } }, null]) } + + async getGroupHonorList(groupCode: string) { + // 还缺点东西 + return await invoke('nodeIKernelGroupService/getGroupHonorList', [{ + req: { + groupCode: [+groupCode] + } + }, null]) + } } diff --git a/src/ntqqapi/api/msg.ts b/src/ntqqapi/api/msg.ts index 2953723..80e4d38 100644 --- a/src/ntqqapi/api/msg.ts +++ b/src/ntqqapi/api/msg.ts @@ -1,6 +1,6 @@ import { invoke, NTMethod } from '../ntcall' import { GeneralCallResult } from '../services' -import { RawMessage, SendMessageElement, Peer, ChatType2 } from '../types' +import { RawMessage, SendMessageElement, Peer, ChatType } from '../types' import { getSession } from '@/ntqqapi/wrapper' import { Service, Context } from 'cordis' import { selfInfo } from '@/common/globalVars' @@ -11,16 +11,6 @@ declare module 'cordis' { } } -function generateMsgId() { - const timestamp = Math.floor(Date.now() / 1000) - const random = Math.floor(Math.random() * Math.pow(2, 32)) - const buffer = Buffer.alloc(8) - buffer.writeUInt32BE(timestamp, 0) - buffer.writeUInt32BE(random, 4) - const msgId = BigInt('0x' + buffer.toString('hex')).toString() - return msgId -} - export class NTQQMsgApi extends Service { static inject = ['ntUserApi'] @@ -28,7 +18,7 @@ export class NTQQMsgApi extends Service { super(ctx, 'ntMsgApi', true) } - async getTempChatInfo(chatType: ChatType2, peerUid: string) { + async getTempChatInfo(chatType: ChatType, peerUid: string) { const session = getSession() if (session) { return session.getMsgService().getTempChatInfo(chatType, peerUid) @@ -60,7 +50,7 @@ export class NTQQMsgApi extends Service { } async activateChat(peer: Peer) { - return await invoke(NTMethod.ACTIVE_CHAT_PREVIEW, [{ peer, cnt: 20 }, null]) + return await invoke(NTMethod.ACTIVE_CHAT_PREVIEW, [{ peer, cnt: 1 }, null]) } async activateChatAndGetHistory(peer: Peer) { @@ -102,7 +92,7 @@ export class NTQQMsgApi extends Service { } async sendMsg(peer: Peer, msgElements: SendMessageElement[], timeout = 10000) { - const msgId = generateMsgId() + const msgId = await this.generateMsgUniqueId(peer.chatType) peer.guildId = msgId const data = await invoke<{ msgList: RawMessage[] }>( 'nodeIKernelMsgService/sendMsg', @@ -275,4 +265,8 @@ export class NTQQMsgApi extends Service { forceRefresh: true }, null]) } + + async generateMsgUniqueId(chatType: number) { + return await invoke('nodeIKernelMsgService/generateMsgUniqueId', [{ chatType }]) + } } diff --git a/src/ntqqapi/api/webapi.ts b/src/ntqqapi/api/webapi.ts index d2e5fc7..c6296ed 100644 --- a/src/ntqqapi/api/webapi.ts +++ b/src/ntqqapi/api/webapi.ts @@ -17,39 +17,6 @@ export enum WebHonorType { EMOTION = 'emotion' } -export interface WebApiGroupMember { - uin: number - role: number - g: number - join_time: number - last_speak_time: number - lv: { - point: number - level: number - } - card: string - tags: string - flag: number - nick: string - qage: number - rm: number -} - -interface WebApiGroupMemberRet { - ec: number - errcode: number - em: string - cache: number - adm_num: number - levelname: unknown - mems: WebApiGroupMember[] - count: number - svr_time: number - max_count: number - search_count: number - extmode: number -} - export class NTQQWebApi extends Service { static inject = ['ntUserApi'] @@ -57,47 +24,6 @@ export class NTQQWebApi extends Service { super(ctx, 'ntWebApi', true) } - async getGroupMembers(groupCode: string): Promise { - const memberData: Array = new Array() - const cookieObject = await this.ctx.ntUserApi.getCookies('qun.qq.com') - const cookieStr = this.cookieToString(cookieObject) - const retList: Promise[] = [] - const params = new URLSearchParams({ - st: '0', - end: '40', - sort: '1', - gc: groupCode, - bkn: this.genBkn(cookieObject.skey) - }) - const fastRet = await RequestUtil.HttpGetJson(`https://qun.qq.com/cgi-bin/qun_mgr/search_group_members?${params}`, 'POST', '', { 'Cookie': cookieStr }) - if (!fastRet?.count || fastRet?.errcode !== 0 || !fastRet?.mems) { - return [] - } else { - for (const member of fastRet.mems) { - memberData.push(member) - } - } - const pageNum = Math.ceil(fastRet.count / 40) - //遍历批量请求 - for (let i = 2; i <= pageNum; i++) { - params.set('st', String((i - 1) * 40)) - params.set('end', String(i * 40)) - const ret = RequestUtil.HttpGetJson(`https://qun.qq.com/cgi-bin/qun_mgr/search_group_members?${params}`, 'POST', '', { 'Cookie': cookieStr }) - retList.push(ret) - } - //批量等待 - for (let i = 1; i <= pageNum; i++) { - const ret = await (retList[i]) - if (!ret?.count || ret?.errcode !== 0 || !ret?.mems) { - continue - } - for (const member of ret.mems) { - memberData.push(member) - } - } - return memberData - } - genBkn(sKey: string) { sKey = sKey || '' let hash = 5381 @@ -108,10 +34,9 @@ export class NTQQWebApi extends Service { return (hash & 0x7FFFFFFF).toString() } - //实现未缓存 考虑2h缓存 - async getGroupHonorInfo(groupCode: string, getType: WebHonorType) { - const getDataInternal = async (Internal_groupCode: string, Internal_type: number) => { - const url = 'https://qun.qq.com/interactive/honorlist?gc=' + Internal_groupCode + '&type=' + Internal_type.toString() + async getGroupHonorInfo(groupCode: string, getType: string) { + const getDataInternal = async (groupCode: string, type: number) => { + const url = 'https://qun.qq.com/interactive/honorlist?gc=' + groupCode + '&type=' + type let resJson try { const res = await RequestUtil.HttpGetText(url, 'GET', '', { 'Cookie': cookieStr }) @@ -119,7 +44,7 @@ export class NTQQWebApi extends Service { if (match) { resJson = JSON.parse(match[1].trim()) } - if (Internal_type === 1) { + if (type === 1) { return resJson?.talkativeList } else { return resJson?.actorList diff --git a/src/ntqqapi/core.ts b/src/ntqqapi/core.ts index f1fd090..5579161 100644 --- a/src/ntqqapi/core.ts +++ b/src/ntqqapi/core.ts @@ -1,4 +1,4 @@ -import fs from 'node:fs' +import { unlink } from 'node:fs/promises' import { Service, Context } from 'cordis' import { registerCallHook, registerReceiveHook, ReceiveCmdS } from './hook' import { Config as LLOBConfig } from '../common/types' @@ -13,7 +13,6 @@ import { GroupMember, CategoryFriend, SimpleInfo, - User, ChatType } from './types' import { selfInfo } from '../common/globalVars' @@ -53,29 +52,24 @@ class Core extends Service { private registerListener() { registerReceiveHook<{ - data: CategoryFriend[] + data?: CategoryFriend[] + userSimpleInfos?: Map //V2 + buddyCategory?: CategoryFriend[] //V2 }>(ReceiveCmdS.FRIENDS, (payload) => { - type V2data = { userSimpleInfos: Map } - let friendList: User[] = [] - if ('userSimpleInfos' in payload) { - friendList = Object.values((payload as unknown as V2data).userSimpleInfos).map((v: SimpleInfo) => { - return { - ...v.coreInfo, - } - }) - } else { - for (const fData of payload.data) { - friendList.push(...fData.buddyList) - } + let uids: string[] = [] + if (payload.buddyCategory) { + uids = payload.buddyCategory.flatMap(item => item.buddyUids) + } else if (payload.data) { + uids = payload.data.flatMap(item => item.buddyList.map(e => e.uid)) } - this.ctx.logger.info('好友列表变动', friendList.length) - for (const friend of friendList) { - this.ctx.ntMsgApi.activateChat({ peerUid: friend.uid, chatType: ChatType.friend }) + for (const uid of uids) { + this.ctx.ntMsgApi.activateChat({ peerUid: uid, chatType: ChatType.friend }) } + this.ctx.logger.info('好友列表变动', uids.length) }) // 自动清理新消息文件 - registerReceiveHook<{ msgList: Array }>([ReceiveCmdS.NEW_MSG, ReceiveCmdS.NEW_ACTIVE_MSG], (payload) => { + registerReceiveHook<{ msgList: RawMessage[] }>([ReceiveCmdS.NEW_MSG, ReceiveCmdS.NEW_ACTIVE_MSG], (payload) => { if (!this.config.autoDeleteFile) { return } @@ -94,9 +88,7 @@ class Core extends Service { } for (const path of pathList) { if (path) { - fs.unlink(path, () => { - this.ctx.logger.info('删除文件成功', path) - }) + unlink(path).then(() => this.ctx.logger.info('删除文件成功', path)) } } }, this.config.autoDeleteFileSecond! * 1000) diff --git a/src/ntqqapi/ntcall.ts b/src/ntqqapi/ntcall.ts index 687f208..1b25cad 100644 --- a/src/ntqqapi/ntcall.ts +++ b/src/ntqqapi/ntcall.ts @@ -13,8 +13,7 @@ import { NodeIKernelUixConvertService, NodeIKernelRichMediaService, NodeIKernelTicketService, - NodeIKernelTipOffService, - NodeIKernelSearchService, + NodeIKernelTipOffService } from './services' export enum NTClass { @@ -94,7 +93,6 @@ interface NTService { nodeIKernelRichMediaService: NodeIKernelRichMediaService nodeIKernelTicketService: NodeIKernelTicketService nodeIKernelTipOffService: NodeIKernelTipOffService - nodeIKernelSearchService: NodeIKernelSearchService } interface InvokeOptions { diff --git a/src/ntqqapi/services/NodeIKernelBuddyService.ts b/src/ntqqapi/services/NodeIKernelBuddyService.ts index 674a6dd..af04ffc 100644 --- a/src/ntqqapi/services/NodeIKernelBuddyService.ts +++ b/src/ntqqapi/services/NodeIKernelBuddyService.ts @@ -6,120 +6,26 @@ export enum BuddyListReqType { } export interface NodeIKernelBuddyService { - // 26702 以上 getBuddyListV2(callFrom: string, reqType: BuddyListReqType): Promise - }> + data: { + categoryId: number + categorySortId: number + categroyName: string + categroyMbCount: number + onlineCount: number + buddyUids: string[] + }[] }> - //26702 以上 - getBuddyListFromCache(callFrom: string): Promise//Uids - }>> - - addKernelBuddyListener(listener: unknown): number - - getAllBuddyCount(): number - - removeKernelBuddyListener(listener: unknown): void - - getBuddyList(nocache: boolean): Promise - - getBuddyNick(uid: number): string - - getBuddyRemark(uid: number): string - setBuddyRemark(uid: number, remark: string): void - getAvatarUrl(uid: number): string - isBuddy(uid: string): boolean - getCategoryNameWithUid(uid: number): string - - getTargetBuddySetting(uid: number): unknown - - getTargetBuddySettingByType(uid: number, type: number): unknown - - getBuddyReqUnreadCnt(): number - - getBuddyReq(): unknown - - delBuddyReq(uid: number): void - - clearBuddyReqUnreadCnt(): void - - reqToAddFriends(uid: number, msg: string): void - - setSpacePermission(uid: number, permission: number): void - approvalFriendRequest(arg: { friendUid: string reqTime: string accept: boolean }): Promise - delBuddy(uid: number): void - - delBatchBuddy(uids: number[]): void - - getSmartInfos(uid: number): unknown - - setBuddyCategory(uid: number, category: number): void - - setBatchBuddyCategory(uids: number[], category: number): void - - addCategory(category: string): void - - delCategory(category: string): void - - renameCategory(oldCategory: string, newCategory: string): void - - resortCategory(categorys: string[]): void - - pullCategory(uid: number, category: string): void - - setTop(uid: number, isTop: boolean): void - - SetSpecialCare(uid: number, isSpecialCare: boolean): void - - setMsgNotify(uid: number, isNotify: boolean): void - - hasBuddyList(): boolean - - setBlock(uid: number, isBlock: boolean): void - - isBlocked(uid: number): boolean - - modifyAddMeSetting(setting: unknown): void - - getAddMeSetting(): unknown - - getDoubtBuddyReq(): unknown - - getDoubtBuddyUnreadNum(): number - - approvalDoubtBuddyReq(uid: number, isAgree: boolean): void - - delDoubtBuddyReq(uid: number): void - - delAllDoubtBuddyReq(): void - - reportDoubtBuddyReqUnread(): void - getBuddyRecommendContactArkJson(uid: string, phoneNumber: string): Promise - - isNull(): boolean } diff --git a/src/ntqqapi/services/NodeIKernelGroupService.ts b/src/ntqqapi/services/NodeIKernelGroupService.ts index 9e74f35..4247a4b 100644 --- a/src/ntqqapi/services/NodeIKernelGroupService.ts +++ b/src/ntqqapi/services/NodeIKernelGroupService.ts @@ -1,79 +1,39 @@ import { - GroupExtParam, GroupMember, GroupMemberRole, GroupNotifyType, GroupRequestOperateTypes, } from '@/ntqqapi/types' import { GeneralCallResult } from './common' -import { Dict } from 'cosmokit' export interface NodeIKernelGroupService { - getMemberCommonInfo(Req: { - groupCode: string, - startUin: string, - identifyFlag: string, - uinList: string[], - memberCommonFilter: { - memberUin: number, - uinFlag: number, - uinFlagExt: number, - uinMobileFlag: number, - shutUpTime: number, - privilege: number, - }, - memberNum: number, - filterMethod: string, - onlineFlag: string, - realSpecialTitleFlag: number - }): Promise - - //26702 - getGroupMemberLevelInfo(groupCode: string): Promise - - //26702 - getGroupHonorList(groupCodes: Array): unknown + getGroupHonorList(req: { groupCode: number[] }): Promise<{ + errCode: number + errMsg: string + groupMemberHonorList: { + honorList: { + groupCode: string + id: number[] + isGray: number + }[] + cacheTs: number + honorInfos: unknown[] + joinTime: number + } + }> getUinByUids(uins: string[]): Promise<{ - errCode: number, - errMsg: string, + errCode: number + errMsg: string uins: Map }> getUidByUins(uins: string[]): Promise<{ - errCode: number, - errMsg: string, + errCode: number + errMsg: string uids: Map }> - //26702(其实更早 但是我不知道) - checkGroupMemberCache(arrayList: Array): Promise - - //26702(其实更早 但是我不知道) - getGroupLatestEssenceList(groupCode: string): Promise - - //26702(其实更早 但是我不知道) - shareDigest(Req: { - appId: string, - appType: number, - msgStyle: number, - recvUin: string, - sendType: number, - clientInfo: { - platform: number - }, - richMsg: { - usingArk: boolean, - title: string, - summary: string, - url: string, - pictureUrl: string, - brief: string - } - }): Promise - - isEssenceMsg(req: { groupCode: string, msgRandom: number, msgSeq: number }): Promise - queryCachedEssenceMsg(req: { groupCode: string, msgRandom: number, msgSeq: number }): Promise<{ items: { groupCode: string @@ -89,33 +49,10 @@ export interface NodeIKernelGroupService { }[] }> - fetchGroupEssenceList(req: { groupCode: string, pageStart: number, pageLimit: number }, arg: unknown): Promise - - //26702 - getAllMemberList(groupCode: string, forceFetch: boolean): Promise<{ - errCode: number, - errMsg: string, - result: { - ids: Array<{ - uid: string, - index: number//0 - }>, - infos: Dict, - finish: true, - hasRobot: false - } - }> - setHeader(uid: string, path: string): unknown - addKernelGroupListener(listener: unknown): number - - removeKernelGroupListener(listenerId: unknown): void - createMemberListScene(groupCode: string, scene: string): string - destroyMemberListScene(sceneId: string): void - getNextMemberList(sceneId: string, a: undefined, num: number): Promise<{ errCode: number errMsg: string @@ -130,97 +67,33 @@ export interface NodeIKernelGroupService { } }> - getPrevMemberList(): unknown - - monitorMemberList(): unknown - - searchMember(sceneId: string, keywords: string[]): unknown - - getMemberInfo(group_id: string, uids: string[], forceFetch: boolean): Promise - //getMemberInfo [ '56729xxxx', [ 'u_4Nj08cwW5Hxxxxx' ], true ] - kickMember(groupCode: string, memberUids: string[], refuseForever: boolean, kickReason: string): Promise modifyMemberRole(groupCode: string, uid: string, role: GroupMemberRole): void modifyMemberCardName(groupCode: string, uid: string, cardName: string): void - getTransferableMemberInfo(groupCode: string): unknown//获取整个群的 - - transferGroup(uid: string): void - - getGroupList(force: boolean): Promise - - getGroupExtList(force: boolean): Promise - - getGroupDetailInfo(groupCode: string): unknown - - getMemberExtInfo(param: GroupExtParam): Promise//req - - getGroupAllInfo(): unknown - - getDiscussExistInfo(): unknown - - getGroupConfMember(): unknown - - getGroupMsgMask(): unknown - - getGroupPortrait(): void - modifyGroupName(groupCode: string, groupName: string, arg: false): void - modifyGroupRemark(groupCode: string, remark: string): void - - modifyGroupDetailInfo(groupCode: string, arg: unknown): void - - setGroupMsgMask(groupCode: string, arg: unknown): void - - changeGroupShieldSettingTemp(groupCode: string, arg: unknown): void - - inviteToGroup(arg: unknown): void - - inviteMembersToGroup(args: unknown[]): void - - inviteMembersToGroupWithMsg(args: unknown): void - - createGroup(arg: unknown): void - - createGroupWithMembers(arg: unknown): void - quitGroup(groupCode: string): void - destroyGroup(groupCode: string): void - //获取单屏群通知列表 - getSingleScreenNotifies(force: boolean, start_seq: string, num: number): Promise - - clearGroupNotifies(groupCode: string): void - - getGroupNotifiesUnreadCount(unknown: boolean): Promise - - clearGroupNotifiesUnreadCount(groupCode: string): void + getSingleScreenNotifies(force: boolean, startSeq: string, num: number): Promise operateSysNotify( doubt: boolean, operateMsg: { - operateType: GroupRequestOperateTypes, // 2 拒绝 + operateType: GroupRequestOperateTypes // 2 拒绝 targetMsg: { - seq: string, // 通知序列号 - type: GroupNotifyType, - groupCode: string, + seq: string // 通知序列号 + type: GroupNotifyType + groupCode: string postscript: string } - }): Promise - - setTop(groupCode: string, isTop: boolean): void - - getGroupBulletin(groupCode: string): unknown - - deleteGroupBulletin(groupCode: string, seq: string): void + } + ): Promise publishGroupBulletin(groupCode: string, pskey: string, data: unknown): Promise - publishInstructionForNewcomers(groupCode: string, arg: unknown): void - uploadGroupBulletinPic(groupCode: string, pskey: string, imagePath: string): Promise<{ errCode: number errMsg: string @@ -231,45 +104,23 @@ export interface NodeIKernelGroupService { } }> - downloadGroupBulletinRichMedia(groupCode: string): unknown - - getGroupBulletinList(groupCode: string): unknown - - getGroupStatisticInfo(groupCode: string): unknown - - getGroupRemainAtTimes(groupCode: string): number - - getJoinGroupNoVerifyFlag(groupCode: string): unknown - - getGroupArkInviteState(groupCode: string): unknown - - reqToJoinGroup(groupCode: string, arg: unknown): void + getGroupRemainAtTimes(groupCode: string): Promise setGroupShutUp(groupCode: string, shutUp: boolean): void - getGroupShutUpMemberList(groupCode: string): unknown[] - setMemberShutUp(groupCode: string, memberTimes: { uid: string, timeStamp: number }[]): Promise getGroupRecommendContactArkJson(groupCode: string): Promise - getJoinGroupLink(groupCode: string): unknown + addGroupEssence(param: { groupCode: string, msgRandom: number, msgSeq: number }): Promise - modifyGroupExtInfo(groupCode: string, arg: unknown): void - - //需要提前判断是否存在 高版本新增 - addGroupEssence(param: { - groupCode: string - msgRandom: number, - msgSeq: number - }): Promise - - //需要提前判断是否存在 高版本新增 - removeGroupEssence(param: { - groupCode: string - msgRandom: number, - msgSeq: number - }): Promise - - isNull(): boolean + removeGroupEssence(param: { groupCode: string, msgRandom: number, msgSeq: number }): Promise } diff --git a/src/ntqqapi/services/NodeIKernelMsgService.ts b/src/ntqqapi/services/NodeIKernelMsgService.ts index 52c92e8..8188229 100644 --- a/src/ntqqapi/services/NodeIKernelMsgService.ts +++ b/src/ntqqapi/services/NodeIKernelMsgService.ts @@ -1,15 +1,14 @@ import { ElementType, MessageElement, Peer, RawMessage, SendMessageElement } from '@/ntqqapi/types' import { GeneralCallResult } from './common' -import { Dict } from 'cosmokit' export interface QueryMsgsParams { - chatInfo: Peer, - filterMsgType: [], - filterSendersUid: string[], - filterMsgFromTime: string, - filterMsgToTime: string, - pageLimit: number, - isReverseOrder: boolean, + chatInfo: Peer + filterMsgType: [] + filterSendersUid: string[] + filterMsgFromTime: string + filterMsgToTime: string + pageLimit: number + isReverseOrder: boolean isIncludeCurrent: boolean } @@ -31,444 +30,73 @@ export interface TmpChatInfo { export interface NodeIKernelMsgService { generateMsgUniqueId(chatType: number, time: string): string - addKernelMsgListener(nodeIKernelMsgListener: unknown): number - sendMsg(msgId: string, peer: Peer, msgElements: SendMessageElement[], map: Map): Promise recallMsg(peer: Peer, msgIds: string[]): Promise - addKernelMsgImportToolListener(arg: Dict): unknown - - removeKernelMsgListener(args: unknown): unknown - - addKernelTempChatSigListener(...args: unknown[]): unknown - - removeKernelTempChatSigListener(...args: unknown[]): unknown - - setAutoReplyTextList(AutoReplyText: Array, i2: number): unknown - - getAutoReplyTextList(...args: unknown[]): unknown - - getOnLineDev(): void - - kickOffLine(DevInfo: Dict): unknown - setStatus(args: { status: number, extStatus: number, batteryStatus: number }): Promise - fetchStatusMgrInfo(): unknown - - fetchStatusUnitedConfigInfo(): unknown - - getOnlineStatusSmallIconBasePath(): unknown - - getOnlineStatusSmallIconFileNameByUrl(Url: string): unknown - - downloadOnlineStatusSmallIconByUrl(arg0: number, arg1: string): unknown - - getOnlineStatusBigIconBasePath(): unknown - - downloadOnlineStatusBigIconByUrl(arg0: number, arg1: string): unknown - - getOnlineStatusCommonPath(arg: string): unknown - - getOnlineStatusCommonFileNameByUrl(Url: string): unknown - - downloadOnlineStatusCommonByUrl(arg0: string, arg1: string): unknown - - // this.tokenType = i2 - // this.apnsToken = bArr - // this.voipToken = bArr2 - // this.profileId = str - - setToken(arg: Dict): unknown - - switchForeGround(): unknown - - switchBackGround(arg: Dict): unknown - - //hex - setTokenForMqq(token: string): unknown - - switchForeGroundForMqq(...args: unknown[]): unknown - - switchBackGroundForMqq(...args: unknown[]): unknown - - getMsgSetting(...args: unknown[]): unknown - - setMsgSetting(...args: unknown[]): unknown - - addSendMsg(...args: unknown[]): unknown - - cancelSendMsg(...args: unknown[]): unknown - - switchToOfflineSendMsg(peer: Peer, MsgId: string): unknown - - reqToOfflineSendMsg(...args: unknown[]): unknown - - refuseReceiveOnlineFileMsg(peer: Peer, MsgId: string): unknown - - resendMsg(...args: unknown[]): unknown - - reeditRecallMsg(...args: unknown[]): unknown - - //调用请检查除开commentElements其余参数不能为null forwardMsg(msgIds: string[], srcContact: Peer, dstContacts: Peer[], commentElements: MessageElement[]): Promise forwardMsgWithComment(...args: unknown[]): Promise - forwardSubMsgWithComment(...args: unknown[]): unknown - - forwardRichMsgInVist(...args: unknown[]): unknown - - forwardFile(...args: unknown[]): unknown - //Array, Peer from, Peer to - multiForwardMsg(...args: unknown[]): unknown - multiForwardMsgWithComment(...args: unknown[]): unknown - deleteRecallMsg(...args: unknown[]): unknown + getAioFirstViewLatestMsgs(peer: Peer, num: number): Promise - deleteRecallMsgForLocal(...args: unknown[]): unknown - - addLocalGrayTipMsg(...args: unknown[]): unknown - - addLocalJsonGrayTipMsg(...args: unknown[]): unknown - - addLocalJsonGrayTipMsgExt(...args: unknown[]): unknown - - IsLocalJsonTipValid(...args: unknown[]): unknown - - addLocalAVRecordMsg(...args: unknown[]): unknown - - addLocalTofuRecordMsg(...args: unknown[]): unknown - - addLocalRecordMsg(Peer: Peer, msgId: string, ele: MessageElement, attr: Array | number, front: boolean): Promise - - deleteMsg(Peer: Peer, msgIds: Array): Promise - - updateElementExtBufForUI(...args: unknown[]): unknown - - updateMsgRecordExtPbBufForUI(...args: unknown[]): unknown - - startMsgSync(...args: unknown[]): unknown - - startGuildMsgSync(...args: unknown[]): unknown - - isGuildChannelSync(...args: unknown[]): unknown - - getMsgUniqueId(UniqueId: string): string - - isMsgMatched(...args: unknown[]): unknown - - getOnlineFileMsgs(...args: unknown[]): unknown - - getAllOnlineFileMsgs(...args: unknown[]): unknown - - getLatestDbMsgs(peer: Peer, cnt: number): Promise - - getLastMessageList(peer: Peer[]): Promise - - getAioFirstViewLatestMsgs(peer: Peer, num: number): Promise - - getMsgs(peer: Peer, msgId: string, count: unknown, queryOrder: boolean): Promise - - getMsgsIncludeSelf(peer: Peer, msgId: string, count: number, queryOrder: boolean): Promise - - // this.$peer = contact - // this.$msgTime = j2 - // this.$clientSeq = j3 - // this.$cnt = i2 - - getMsgsWithMsgTimeAndClientSeqForC2C(...args: unknown[]): Promise - - getMsgsWithStatus(params: { - peer: Peer - msgId: string - msgTime: unknown - cnt: unknown - queryOrder: boolean - isIncludeSelf: boolean - appid: unknown - }): Promise - - getMsgsBySeqRange(peer: Peer, startSeq: string, endSeq: string): Promise + getMsgsIncludeSelf(peer: Peer, msgId: string, count: number, queryOrder: boolean): Promise getMsgsBySeqAndCount(peer: Peer, seq: string, count: number, desc: boolean, unknownArg: boolean): Promise getMsgsByMsgId(peer: Peer, ids: string[]): Promise - getRecallMsgsByMsgId(peer: Peer, MsgId: string[]): Promise - getMsgsBySeqList(peer: Peer, seqList: string[]): Promise - getSingleMsg(Peer: Peer, msgSeq: string): Promise + getSingleMsg(peer: Peer, msgSeq: string): Promise - getSourceOfReplyMsg(peer: Peer, MsgId: string, SourceSeq: string): unknown - - getSourceOfReplyMsgV2(peer: Peer, RootMsgId: string, ReplyMsgId: string): unknown - - getMsgByClientSeqAndTime(peer: Peer, clientSeq: string, time: string): unknown - - getSourceOfReplyMsgByClientSeqAndTime(peer: Peer, clientSeq: string, time: string): unknown - - getMsgsByTypeFilter(peer: Peer, msgId: string, cnt: unknown, queryOrder: boolean, typeFilter: { type: number, subtype: Array }): unknown - - getMsgsByTypeFilters(peer: Peer, msgId: string, cnt: unknown, queryOrder: boolean, typeFilters: Array<{ type: number, subtype: Array }>): unknown - - getMsgWithAbstractByFilterParam(...args: unknown[]): unknown - - queryMsgsWithFilter(...args: unknown[]): unknown - - // this.chatType = i2 - // this.peerUid = str - // this.chatInfo = new ChatInfo() - // this.filterMsgType = new ArrayList<>() - // this.filterSendersUid = new ArrayList<>() - // this.chatInfo = chatInfo - // this.filterMsgType = arrayList - // this.filterSendersUid = arrayList2 - // this.filterMsgFromTime = j2 - // this.filterMsgToTime = j3 - // this.pageLimit = i2 - // this.isReverseOrder = z - // this.isIncludeCurrent = z2 - //queryMsgsWithFilterEx(0L, 0L, 0L, new QueryMsgsParams(new ChatInfo(2, str), new ArrayList(), new ArrayList(), 0L, 0L, 250, false, true)) queryMsgsWithFilterEx(msgId: string, msgTime: string, megSeq: string, param: QueryMsgsParams): Promise - //queryMsgsWithFilterEx(this.$msgId, this.$msgTime, this.$msgSeq, this.$param) - queryFileMsgsDesktop(...args: unknown[]): unknown - - setMsgRichInfoFlag(...args: unknown[]): unknown - - queryPicOrVideoMsgs(msgId: string, msgTime: string, megSeq: string, param: QueryMsgsParams): Promise - - queryPicOrVideoMsgsDesktop(...args: unknown[]): unknown - - queryEmoticonMsgs(msgId: string, msgTime: string, msgSeq: string, Params: QueryMsgsParams): Promise - - queryTroopEmoticonMsgs(msgId: string, msgTime: string, msgSeq: string, Params: QueryMsgsParams): Promise - - queryMsgsAndAbstractsWithFilter(msgId: string, msgTime: string, megSeq: string, param: QueryMsgsParams): unknown - - setFocusOnGuild(...args: unknown[]): unknown - - setFocusSession(...args: unknown[]): unknown - - enableFilterUnreadInfoNotify(...args: unknown[]): unknown - - enableFilterMsgAbstractNotify(...args: unknown[]): unknown - - onScenesChangeForSilenceMode(...args: unknown[]): unknown - - getContactUnreadCnt(...args: unknown[]): unknown - - getUnreadCntInfo(...args: unknown[]): unknown - - getGuildUnreadCntInfo(...args: unknown[]): unknown - - getGuildUnreadCntTabInfo(...args: unknown[]): unknown - - getAllGuildUnreadCntInfo(...args: unknown[]): unknown - - getAllJoinGuildCnt(...args: unknown[]): unknown - - getAllDirectSessionUnreadCntInfo(...args: unknown[]): unknown - - getCategoryUnreadCntInfo(...args: unknown[]): unknown - - getGuildFeedsUnreadCntInfo(...args: unknown[]): unknown - - setUnVisibleChannelCntInfo(...args: unknown[]): unknown - - setUnVisibleChannelTypeCntInfo(...args: unknown[]): unknown - - setVisibleGuildCntInfo(...args: unknown[]): unknown setMsgRead(peer: Peer): Promise - setAllC2CAndGroupMsgRead(): Promise - - setGuildMsgRead(...args: unknown[]): unknown - - setAllGuildMsgRead(...args: unknown[]): unknown - - setMsgReadAndReport(...args: unknown[]): unknown - - setSpecificMsgReadAndReport(...args: unknown[]): unknown - - setLocalMsgRead(...args: unknown[]): unknown - - setGroupGuildMsgRead(...args: unknown[]): unknown - - getGuildGroupTransData(...args: unknown[]): unknown - - setGroupGuildBubbleRead(...args: unknown[]): unknown - - getGuildGroupBubble(...args: unknown[]): unknown - - fetchGroupGuildUnread(...args: unknown[]): unknown - - setGroupGuildFlag(...args: unknown[]): unknown - - setGuildUDCFlag(...args: unknown[]): unknown - - setGuildTabUserFlag(...args: unknown[]): unknown - - setBuildMode(flag: number/*0 1 3*/): unknown - - setConfigurationServiceData(...args: unknown[]): unknown - - setMarkUnreadFlag(...args: unknown[]): unknown - - getChannelEventFlow(...args: unknown[]): unknown - - getMsgEventFlow(...args: unknown[]): unknown - - getRichMediaFilePathForMobileQQSend(...args: unknown[]): unknown - getRichMediaFilePathForGuild(arg: { - md5HexStr: string, - fileName: string, - elementType: ElementType, - elementSubType: number, - thumbSize: 0, - needCreate: true, - downloadType: 1, + md5HexStr: string + fileName: string + elementType: ElementType + elementSubType: number + thumbSize: 0 + needCreate: true + downloadType: 1 file_uuid: '' }): string - assembleMobileQQRichMediaFilePath(...args: unknown[]): unknown - - getFileThumbSavePathForSend(...args: unknown[]): unknown - - getFileThumbSavePath(...args: unknown[]): unknown - - //猜测居多 - translatePtt2Text(MsgId: string, Peer: Dict, MsgElement: Dict): unknown - - setPttPlayedState(...args: unknown[]): unknown - // NodeIQQNTWrapperSession fetchFavEmojiList [ - // "", - // 48, - // true, - // true - // ] fetchFavEmojiList(str: string, num: number, uk1: boolean, uk2: boolean): Promise + }[] }> - addFavEmoji(...args: unknown[]): unknown - - fetchMarketEmoticonList(...args: unknown[]): unknown - - fetchMarketEmoticonShowImage(...args: unknown[]): unknown - - fetchMarketEmoticonAioImage(...args: unknown[]): unknown - - fetchMarketEmotionJsonFile(...args: unknown[]): unknown - - getMarketEmoticonPath(...args: unknown[]): unknown - - getMarketEmoticonPathBySync(...args: unknown[]): unknown - - fetchMarketEmoticonFaceImages(...args: unknown[]): unknown - - fetchMarketEmoticonAuthDetail(...args: unknown[]): unknown - - getFavMarketEmoticonInfo(...args: unknown[]): unknown - - addRecentUsedFace(...args: unknown[]): unknown - - getRecentUsedFaceList(...args: unknown[]): unknown - - getMarketEmoticonEncryptKeys(...args: unknown[]): unknown - - downloadEmojiPic(...args: unknown[]): unknown - - deleteFavEmoji(...args: unknown[]): unknown - - modifyFavEmojiDesc(...args: unknown[]): unknown - - queryFavEmojiByDesc(...args: unknown[]): unknown - - getHotPicInfoListSearchString(...args: unknown[]): unknown - - getHotPicSearchResult(...args: unknown[]): unknown - - getHotPicHotWords(...args: unknown[]): unknown - - getHotPicJumpInfo(...args: unknown[]): unknown - - getEmojiResourcePath(...args: unknown[]): unknown - - JoinDragonGroupEmoji(JoinDragonGroupEmojiReq: unknown): unknown - - getMsgAbstracts(...args: unknown[]): unknown - - getMsgAbstract(...args: unknown[]): unknown - - getMsgAbstractList(...args: unknown[]): unknown - - getMsgAbstractListBySeqRange(...args: unknown[]): unknown - - refreshMsgAbstracts(...args: unknown[]): unknown - - refreshMsgAbstractsByGuildIds(...args: unknown[]): unknown - - getRichMediaElement(...args: unknown[]): unknown - - cancelGetRichMediaElement(...args: unknown[]): unknown - - refuseGetRichMediaElement(...args: unknown[]): unknown - - switchToOfflineGetRichMediaElement(...args: unknown[]): unknown - downloadRichMedia(...args: unknown[]): unknown - getFirstUnreadMsgSeq(args: { - peerUid: string - guildId: string - }): unknown - - getFirstUnreadCommonMsg(...args: unknown[]): unknown - - getFirstUnreadAtmeMsg(...args: unknown[]): unknown - - getFirstUnreadAtallMsg(...args: unknown[]): unknown - - getNavigateInfo(...args: unknown[]): unknown - - getChannelFreqLimitInfo(...args: unknown[]): unknown - - getRecentUseEmojiList(...args: unknown[]): unknown - - getRecentEmojiList(...args: unknown[]): unknown - setMsgEmojiLikes(...args: unknown[]): unknown getMsgEmojiLikesList(peer: Peer, msgSeq: string, emojiId: string, emojiType: string, cookie: string, bForward: boolean, number: number): Promise<{ @@ -484,235 +112,7 @@ export interface NodeIKernelMsgService { isFirstPage: boolean }> - setMsgEmojiLikesForRole(...args: unknown[]): unknown - - clickInlineKeyboardButton(...args: unknown[]): unknown - - setCurOnScreenMsg(...args: unknown[]): unknown - - setCurOnScreenMsgForMsgEvent(...args: unknown[]): unknown - - getMiscData(key: string): unknown - - setMiscData(key: string, value: string): unknown - - getBookmarkData(...args: unknown[]): unknown - - setBookmarkData(...args: unknown[]): unknown - - sendShowInputStatusReq(ChatType: number, EventType: number, toUid: string): Promise - - queryCalendar(...args: unknown[]): unknown - - queryFirstMsgSeq(peer: Peer, ...args: unknown[]): unknown - - queryRoamCalendar(...args: unknown[]): unknown - - queryFirstRoamMsg(...args: unknown[]): unknown - - fetchLongMsg(peer: Peer, msgId: string): unknown - - fetchLongMsgWithCb(...args: unknown[]): unknown - - setIsStopKernelFetchLongMsg(...args: unknown[]): unknown - - insertGameResultAsMsgToDb(...args: unknown[]): unknown - - getMultiMsg(...args: unknown[]): Promise - - setDraft(...args: unknown[]): unknown - - getDraft(...args: unknown[]): unknown - - deleteDraft(...args: unknown[]): unknown - - getRecentHiddenSesionList(...args: unknown[]): unknown - - setRecentHiddenSession(...args: unknown[]): unknown - - delRecentHiddenSession(...args: unknown[]): unknown - - getCurHiddenSession(...args: unknown[]): unknown - - setCurHiddenSession(...args: unknown[]): unknown - - setReplyDraft(...args: unknown[]): unknown - - getReplyDraft(...args: unknown[]): unknown - - deleteReplyDraft(...args: unknown[]): unknown - - getFirstUnreadAtMsg(peer: Peer): unknown - - clearMsgRecords(...args: unknown[]): unknown//设置已读后调用我觉得比较好 清理记录 现在别了 - - IsExistOldDb(...args: unknown[]): unknown - - canImportOldDbMsg(...args: unknown[]): unknown - - setPowerStatus(z: boolean): unknown - - canProcessDataMigration(...args: unknown[]): unknown - - importOldDbMsg(...args: unknown[]): unknown - - stopImportOldDbMsgAndroid(...args: unknown[]): unknown - - isMqqDataImportFinished(...args: unknown[]): unknown - - getMqqDataImportTableNames(...args: unknown[]): unknown - - getCurChatImportStatusByUin(...args: unknown[]): unknown - - getDataImportUserLevel(): unknown - - getMsgQRCode(...args: unknown[]): unknown - - getGuestMsgAbstracts(...args: unknown[]): unknown - - getGuestMsgByRange(...args: unknown[]): unknown - - getGuestMsgAbstractByRange(...args: unknown[]): unknown - - registerSysMsgNotification(...args: unknown[]): unknown - - unregisterSysMsgNotification(...args: unknown[]): unknown - - enterOrExitAio(...args: unknown[]): unknown - - // this.peerUid = "" - // this.peerNickname = "" - // this.fromGroupCode = "" - // this.sig = new byte[0] - // this.selfUid = "" - // this.selfPhone = "" - // this.chatType = i2 - // this.peerUid = str - // this.peerNickname = str2 - // this.fromGroupCode = str3 - // this.sig = bArr - // this.selfUid = str4 - // this.selfPhone = str5 - // this.gameSession = tempChatGameSession - prepareTempChat(args: unknown): unknown//主动临时消息 不做 - - sendSsoCmdReqByContend(cmd: string, param: string): Promise - - getTempChatInfo(ChatType: number, Uid: string): Promise - - setContactLocalTop(...args: unknown[]): unknown - - switchAnonymousChat(...args: unknown[]): unknown - - renameAnonyChatNick(...args: unknown[]): unknown - - getAnonymousInfo(...args: unknown[]): unknown - - updateAnonymousInfo(...args: unknown[]): unknown - - sendSummonMsg(peer: Peer, MsgElement: unknown, MsgAttributeInfo: unknown): Promise//频道的东西 - - outputGuildUnreadInfo(...args: unknown[]): unknown - - checkMsgWithUrl(...args: unknown[]): unknown - - checkTabListStatus(...args: unknown[]): unknown - - getABatchOfContactMsgBoxInfo(...args: unknown[]): unknown - - insertMsgToMsgBox(peer: Peer, msgId: string, arg: 2006): unknown - - isHitEmojiKeyword(...args: unknown[]): unknown - - getKeyWordRelatedEmoji(...args: unknown[]): unknown - - recordEmoji(...args: unknown[]): unknown - - fetchGetHitEmotionsByWord(args: Dict): Promise//表情推荐? - - deleteAllRoamMsgs(...args: unknown[]): unknown//漫游消息? - - packRedBag(...args: unknown[]): unknown - - grabRedBag(...args: unknown[]): unknown - - pullDetail(...args: unknown[]): unknown - - selectPasswordRedBag(...args: unknown[]): unknown - - pullRedBagPasswordList(...args: unknown[]): unknown - - requestTianshuAdv(...args: unknown[]): unknown - - tianshuReport(...args: unknown[]): unknown - - tianshuMultiReport(...args: unknown[]): unknown - - GetMsgSubType(a0: number, a1: number): unknown - - setIKernelPublicAccountAdapter(...args: unknown[]): unknown - //tempChatGameSession有关 - createUidFromTinyId(fromTinyId: string, toTinyId: string): unknown - - dataMigrationGetDataAvaiableContactList(...args: unknown[]): unknown - - dataMigrationGetMsgList(...args: unknown[]): unknown - - dataMigrationStopOperation(...args: unknown[]): unknown - - dataMigrationImportMsgPbRecord(DataMigrationMsgInfo: Array<{ - extensionData: string //"Hex" - extraData: string //"" - chatType: number - chatUin: string - msgType: number - msgTime: string - msgSeq: string - msgRandom: string - }>, DataMigrationResourceInfo: { - extraData: string - filePath: string - fileSize: string - msgRandom: string - msgSeq: string - msgSubType: number - msgType: number - }): unknown - - dataMigrationGetResourceLocalDestinyPath(...args: unknown[]): unknown - - dataMigrationSetIOSPathPrefix(...args: unknown[]): unknown - - getServiceAssistantSwitch(...args: unknown[]): unknown - - setServiceAssistantSwitch(...args: unknown[]): unknown - - setSubscribeFolderUsingSmallRedPoint(...args: unknown[]): unknown - - clearGuildNoticeRedPoint(...args: unknown[]): unknown - - clearFeedNoticeRedPoint(...args: unknown[]): unknown - - clearFeedSquareRead(...args: unknown[]): unknown - - IsC2CStyleChatType(...args: unknown[]): unknown - - IsTempChatType(uin: number): unknown//猜的 - - getGuildInteractiveNotification(...args: unknown[]): unknown - - getGuildNotificationAbstract(...args: unknown[]): unknown - - setFocusOnBase(...args: unknown[]): unknown - - queryArkInfo(...args: unknown[]): unknown - - queryUserSecQuality(...args: unknown[]): unknown - - getGuildMsgAbFlag(...args: unknown[]): unknown - - getGroupMsgStorageTime(): unknown//这是嘛啊 + getMultiMsg(...args: unknown[]): Promise + getTempChatInfo(chatType: number, uid: string): Promise } diff --git a/src/ntqqapi/services/NodeIKernelProfileLikeService.ts b/src/ntqqapi/services/NodeIKernelProfileLikeService.ts index da29f2c..5d98f8e 100644 --- a/src/ntqqapi/services/NodeIKernelProfileLikeService.ts +++ b/src/ntqqapi/services/NodeIKernelProfileLikeService.ts @@ -3,10 +3,6 @@ import { GeneralCallResult } from './common' import { Dict } from 'cosmokit' export interface NodeIKernelProfileLikeService { - addKernelProfileLikeListener(listener: NodeIKernelProfileLikeService): void - - removeKernelProfileLikeListener(listener: unknown): void - setBuddyProfileLike(...args: unknown[]): { result: number, errMsg: string, succCounts: number } getBuddyProfileLike(req: BuddyProfileLikeReq): Promise - - getProfileLikeScidResourceInfo(...args: unknown[]): void - - isNull(): boolean -} \ No newline at end of file +} diff --git a/src/ntqqapi/services/NodeIKernelProfileService.ts b/src/ntqqapi/services/NodeIKernelProfileService.ts index f1003ed..5ccec1c 100644 --- a/src/ntqqapi/services/NodeIKernelProfileService.ts +++ b/src/ntqqapi/services/NodeIKernelProfileService.ts @@ -1,4 +1,3 @@ -import { AnyCnameRecord } from 'node:dns' import { SimpleInfo } from '../types' import { GeneralCallResult } from './common' @@ -16,91 +15,17 @@ export enum ProfileBizType { } export interface NodeIKernelProfileService { - getUidByUin(callfrom: string, uin: Array): Promise>//uin->uid + getUidByUin(callfrom: string, uin: Array): Promise> getUinByUid(callfrom: string, uid: Array): Promise> - // { - // coreInfo: CoreInfo, - // baseInfo: BaseInfo, - // status: null, - // vasInfo: null, - // relationFlags: null, - // otherFlags: null, - // intimate: null - // } getCoreAndBaseInfo(callfrom: string, uids: string[]): Promise> fetchUserDetailInfo(trace: string, uids: string[], arg2: number, arg3: number[]): Promise - addKernelProfileListener(listener: unknown): number - - removeKernelProfileListener(listenerId: number): void - - prepareRegionConfig(...args: unknown[]): unknown - - getLocalStrangerRemark(): Promise - - enumCountryOptions(): Array - - enumProvinceOptions(Country: string): Array - - enumCityOptions(Country: string, Province: string): unknown - - enumAreaOptions(...args: unknown[]): unknown - - //SimpleInfo - // this.uid = "" - // this.uid = str - // this.uin = j2 - // this.isBuddy = z - // this.coreInfo = coreInfo - // this.baseInfo = baseInfo - // this.status = statusInfo - // this.vasInfo = vasInfo - // this.relationFlags = relationFlag - // this.otherFlags = otherFlag - // this.intimate = intimate - - modifySelfProfile(...args: unknown[]): Promise - - modifyDesktopMiniProfile(param: unknown): Promise - - setNickName(NickName: string): Promise - - setLongNick(longNick: string): Promise - - setBirthday(...args: unknown[]): Promise - - setGander(...args: unknown[]): Promise - setHeader(arg: string): Promise - setRecommendImgFlag(...args: unknown[]): Promise - - getUserSimpleInfo(force: boolean, uids: string[],): Promise - - getUserDetailInfo(uid: string): Promise - - getUserDetailInfoWithBizInfo(uid: string, Biz: unknown[]): Promise + getUserDetailInfoWithBizInfo(uid: string, biz: unknown[]): Promise getUserDetailInfoByUin(uin: string): Promise - - getZplanAvatarInfos(args: string[]): Promise - - getStatus(uid: string): Promise - - startStatusPolling(isForceReset: boolean): Promise - - getSelfStatus(): Promise - - setdisableEmojiShortCuts(...args: unknown[]): unknown - - getProfileQzonePicInfo(uid: string, type: number, force: boolean): Promise - - //profileService.getCoreInfo("UserRemarkServiceImpl::getStrangerRemarkByUid", arrayList) - getCoreInfo(name: string, arg: unknown[]): unknown - - //m429253e12.getOtherFlag("FriendListInfoCache_getKernelDataAndPutCache", new ArrayList<>()) - isNull(): boolean -} \ No newline at end of file +} diff --git a/src/ntqqapi/services/NodeIKernelRichMediaService.ts b/src/ntqqapi/services/NodeIKernelRichMediaService.ts index b16ab18..e11a4a6 100644 --- a/src/ntqqapi/services/NodeIKernelRichMediaService.ts +++ b/src/ntqqapi/services/NodeIKernelRichMediaService.ts @@ -1,191 +1,23 @@ -import { GetFileListParam, MessageElement, Peer } from '../types' +import { GetFileListParam, Peer } from '../types' import { GeneralCallResult } from './common' -export enum UrlFileDownloadType { - KUNKNOWN, - KURLFILEDOWNLOADPRIVILEGEICON, - KURLFILEDOWNLOADPHOTOWALL, - KURLFILEDOWNLOADQZONE, - KURLFILEDOWNLOADCOMMON, - KURLFILEDOWNLOADINSTALLAPP -} - -export enum RMBizTypeEnum { - KUNKNOWN, - KC2CFILE, - KGROUPFILE, - KC2CPIC, - KGROUPPIC, - KDISCPIC, - KC2CVIDEO, - KGROUPVIDEO, - KC2CPTT, - KGROUPPTT, - KFEEDCOMMENTPIC, - KGUILDFILE, - KGUILDPIC, - KGUILDPTT, - KGUILDVIDEO -} - -export interface CommonFileInfo { - bizType: number - chatType: number - elemId: string - favId: string - fileModelId: string - fileName: string - fileSize: string - md5: string - md510m: string - msgId: string - msgTime: string - parent: string - peerUid: string - picThumbPath: Array - sha: string - sha3: string - subId: string - uuid: string -} - export interface NodeIKernelRichMediaService { - //getVideoPlayUrl(peer, msgId, elemId, videoCodecFormat, VideoRequestWay.KHAND, cb) - // public enum VideoCodecFormatType { - // KCODECFORMATH264, - // KCODECFORMATH265, - // KCODECFORMATH266, - // KCODECFORMATAV1 - // } - // public enum VideoRequestWay { - // KUNKNOW, - // KHAND, - // KAUTO - // } - getVideoPlayUrl(peer: Peer, msgId: string, elemId: string, videoCodecFormat: number, VideoRequestWay: number): Promise - - //exParams (RMReqExParams) - // this.downSourceType = i2 - // this.triggerType = i3 - //peer, msgId, elemId, videoCodecFormat, exParams - // 1 0 频道在用 - // 1 1 - // 0 2 - - // public static final int KCOMMONREDENVELOPEMSGTYPEINMSGBOX = 1007 - // public static final int KDOWNSOURCETYPEAIOINNER = 1 - // public static final int KDOWNSOURCETYPEBIGSCREEN = 2 - // public static final int KDOWNSOURCETYPEHISTORY = 3 - // public static final int KDOWNSOURCETYPEUNKNOWN = 0 - - // public static final int KTRIGGERTYPEAUTO = 1 - // public static final int KTRIGGERTYPEMANUAL = 0 - getVideoPlayUrlV2(peer: Peer, msgId: string, elemId: string, videoCodecFormat: number, exParams: { downSourceType: number, triggerType: number }): Promise, + }[] videoCodecFormat: number } }> - getRichMediaFileDir(elementType: number, downType: number, isTemp: boolean): unknown + deleteGroupFolder(groupCode: string, folderId: string): Promise - // this.senderUid = "" - // this.peerUid = "" - // this.guildId = "" - // this.elem = new MsgElement() - // this.downloadType = i2 - // this.thumbSize = i3 - // this.msgId = j2 - // this.msgRandom = j3 - // this.msgSeq = j4 - // this.msgTime = j5 - // this.chatType = i4 - // this.senderUid = str - // this.peerUid = str2 - // this.guildId = str3 - // this.elem = msgElement - // this.useHttps = num - - getVideoPlayUrlInVisit(arg: { - downloadType: number, - thumbSize: number, - msgId: string, - msgRandom: string, - msgSeq: string, - msgTime: string, - chatType: number, - senderUid: string, - peerUid: string, - guildId: string, - ele: MessageElement, - useHttps: boolean - }): Promise - - //arg双端number - isFileExpired(arg: number): unknown - - deleteGroupFolder(GroupCode: string, FolderId: string): Promise - - //参数与getVideoPlayUrlInVisit一样 - downloadRichMediaInVisit(arg: { - downloadType: number, - thumbSize: number, - msgId: string, - msgRandom: string, - msgSeq: string, - msgTime: string, - chatType: number, - senderUid: string, - peerUid: string, - guildId: string, - ele: MessageElement, - useHttps: boolean - }): unknown - //arg3为“” - downloadFileForModelId(peer: Peer, ModelId: string[], arg3: string): unknown - //第三个参数 Array - // this.fileId = "" - // this.fileName = "" - // this.fileId = str - // this.fileName = str2 - // this.fileSize = j2 - // this.fileModelId = j3 - - downloadFileForFileUuid(peer: Peer, uuid: string, arg3: { - fileId: string, - fileName: string, - fileSize: string, - fileModelId: string - }[]): Promise - - downloadFileByUrlList(fileDownloadTyp: UrlFileDownloadType, urlList: Array): unknown - - downloadFileForFileInfo(fileInfo: CommonFileInfo[], savePath: string): unknown - - createGroupFolder(GroupCode: string, FolderName: string): Promise } }> - - downloadFile(commonFile: CommonFileInfo, arg2: unknown, arg3: unknown, savePath: string): unknown - - downloadGroupFolder(arg1: unknown, arg2: unknown, arg3: unknown): unknown - - renameGroupFolder(arg1: unknown, arg2: unknown, arg3: unknown): unknown - - deleteTransferInfo(arg1: unknown, arg2: unknown): unknown - - cancelTransferTask(arg1: unknown, arg2: unknown, arg3: unknown): unknown - - cancelUrlDownload(arg: unknown): unknown - - updateOnlineVideoElemStatus(arg: unknown): unknown - - getGroupSpace(arg: unknown): unknown + createGroupFolder(groupCode: string, folderName: string): Promise getGroupFileList(groupCode: string, params: GetFileListParam): Promise - getGroupFileInfo(arg1: unknown, arg2: unknown): unknown - - getGroupTransferList(arg1: unknown, arg2: unknown): unknown - - renameGroupFile(arg1: unknown, arg2: unknown, arg3: unknown, arg4: unknown, arg5: unknown): unknown - moveGroupFile(arg1: unknown, arg2: unknown, arg3: unknown, arg4: unknown, arg5: unknown): unknown - transGroupFile(arg1: unknown, arg2: unknown): unknown - - searchGroupFile( - keywords: Array, - param: { - groupIds: Array, - fileType: number, - context: string, - count: number, - sortType: number, - groupNames: Array - }): Promise - searchGroupFileByWord(arg1: unknown, arg2: unknown, arg3: unknown, arg4: unknown, arg5: unknown): unknown - - deleteGroupFile(GroupCode: string, params: Array, Files: Array): Promise, files: Array): Promise failFileIdList: Array } }> +} - translateEnWordToZn(words: string[]): Promise - - getScreenOCR(path: string): Promise - - batchGetGroupFileCount(Gids: Array): Promise, groupFileCounts: Array }> - - queryPicDownloadSize(arg: unknown): unknown - - searchGroupFile(arg1: unknown, arg2: unknown): unknown - - searchMoreGroupFile(arg: unknown): unknown - - cancelSearcheGroupFile(arg1: unknown, arg2: unknown, arg3: unknown): unknown - - onlyDownloadFile(peer: Peer, arg2: unknown, arg3: Array<{ - fileId: string, - fileName: string, - fileSize: string, - fileModelId: string - } - >): unknown - - onlyUploadFile(arg1: unknown, arg2: unknown): unknown - - isExtraLargePic(arg1: unknown, arg2: unknown, arg3: unknown): unknown - - uploadRMFileWithoutMsg(arg: { - bizType: RMBizTypeEnum, - filePath: string, - peerUid: string, - transferId: string - useNTV2: string - }): Promise - - isNull(): boolean -} \ No newline at end of file diff --git a/src/ntqqapi/services/NodeIKernelSearchService.ts b/src/ntqqapi/services/NodeIKernelSearchService.ts deleted file mode 100644 index 3c4b7f1..0000000 --- a/src/ntqqapi/services/NodeIKernelSearchService.ts +++ /dev/null @@ -1,128 +0,0 @@ -import { ChatType } from '../types' - -export interface NodeIKernelSearchService { - addKernelSearchListener(...args: unknown[]): unknown// needs 1 arguments - - removeKernelSearchListener(...args: unknown[]): unknown// needs 1 arguments - - searchStranger(...args: unknown[]): unknown// needs 3 arguments - - searchGroup(...args: unknown[]): unknown// needs 1 arguments - - searchLocalInfo(keywords: string, unknown: number/*4*/): unknown - - cancelSearchLocalInfo(...args: unknown[]): unknown// needs 3 arguments - - searchBuddyChatInfo(...args: unknown[]): unknown// needs 2 arguments - - searchMoreBuddyChatInfo(...args: unknown[]): unknown// needs 1 arguments - - cancelSearchBuddyChatInfo(...args: unknown[]): unknown// needs 3 arguments - - searchContact(...args: unknown[]): unknown// needs 2 arguments - - searchMoreContact(...args: unknown[]): unknown// needs 1 arguments - - cancelSearchContact(...args: unknown[]): unknown// needs 3 arguments - - searchGroupChatInfo(...args: unknown[]): unknown// needs 3 arguments - - resetSearchGroupChatInfoSortType(...args: unknown[]): unknown// needs 3 arguments - - resetSearchGroupChatInfoFilterMembers(...args: unknown[]): unknown// needs 3 arguments - - searchMoreGroupChatInfo(...args: unknown[]): unknown// needs 1 arguments - - cancelSearchGroupChatInfo(...args: unknown[]): unknown// needs 3 arguments - - searchChatsWithKeywords(...args: unknown[]): unknown// needs 3 arguments - - searchMoreChatsWithKeywords(...args: unknown[]): unknown// needs 1 arguments - - cancelSearchChatsWithKeywords(...args: unknown[]): unknown// needs 3 arguments - - searchChatMsgs(...args: unknown[]): unknown// needs 2 arguments - - searchMoreChatMsgs(...args: unknown[]): unknown// needs 1 arguments - - cancelSearchChatMsgs(...args: unknown[]): unknown// needs 3 arguments - - searchMsgWithKeywords(...args: unknown[]): unknown// needs 2 arguments - - searchMoreMsgWithKeywords(...args: unknown[]): unknown// needs 1 arguments - - cancelSearchMsgWithKeywords(...args: unknown[]): unknown// needs 3 arguments - - searchFileWithKeywords(keywords: string[], source: number): Promise// needs 2 arguments - - searchMoreFileWithKeywords(...args: unknown[]): unknown// needs 1 arguments - - cancelSearchFileWithKeywords(...args: unknown[]): unknown// needs 3 arguments - - searchAtMeChats(...args: unknown[]): unknown// needs 3 arguments - - searchMoreAtMeChats(...args: unknown[]): unknown// needs 1 arguments - - cancelSearchAtMeChats(...args: unknown[]): unknown// needs 3 arguments - - searchChatAtMeMsgs(...args: unknown[]): unknown// needs 1 arguments - - searchMoreChatAtMeMsgs(...args: unknown[]): unknown// needs 1 arguments - - cancelSearchChatAtMeMsgs(...args: unknown[]): unknown// needs 3 arguments - - addSearchHistory(param: { - type: number,//4 - contactList: [], - id: number,//-1 - groupInfos: [], - msgs: [], - fileInfos: [ - { - chatType: ChatType, - buddyChatInfo: Array<{ category_name: string, peerUid: string, peerUin: string, remark: string }>, - discussChatInfo: [], - groupChatInfo: Array< - { - groupCode: string, - isConf: boolean, - hasModifyConfGroupFace: boolean, - hasModifyConfGroupName: boolean, - groupName: string, - remark: string - }>, - dataLineChatInfo: [], - tmpChatInfo: [], - msgId: string, - msgSeq: string, - msgTime: string, - senderUid: string, - senderNick: string, - senderRemark: string, - senderCard: string, - elemId: string, - elemType: string,//3 - fileSize: string, - filePath: string, - fileName: string, - hits: Array< - { - start: 12, - end: 14 - } - > - } - ] - - }): Promise<{ - result: number, - errMsg: string, - id?: number - }> - - removeSearchHistory(...args: unknown[]): unknown// needs 1 arguments - - searchCache(...args: unknown[]): unknown// needs 3 arguments - - clearSearchCache(...args: unknown[]): unknown// needs 1 arguments -} \ No newline at end of file diff --git a/src/ntqqapi/services/NodeIKernelTicketService.ts b/src/ntqqapi/services/NodeIKernelTicketService.ts index 74f7321..d846ef3 100644 --- a/src/ntqqapi/services/NodeIKernelTicketService.ts +++ b/src/ntqqapi/services/NodeIKernelTicketService.ts @@ -1,11 +1,10 @@ -import { forceFetchClientKeyRetType } from './common' +import { GeneralCallResult } from './common' export interface NodeIKernelTicketService { - addKernelTicketListener(listener: unknown): void - - removeKernelTicketListener(listenerId: unknown): void - - forceFetchClientKey(arg: string): Promise - - isNull(): boolean -} \ No newline at end of file + forceFetchClientKey(arg: string): Promise +} diff --git a/src/ntqqapi/services/NodeIKernelTipOffService.ts b/src/ntqqapi/services/NodeIKernelTipOffService.ts index e63ba90..c5fe80d 100644 --- a/src/ntqqapi/services/NodeIKernelTipOffService.ts +++ b/src/ntqqapi/services/NodeIKernelTipOffService.ts @@ -1,19 +1,5 @@ import { GeneralCallResult } from './common' export interface NodeIKernelTipOffService { - addKernelTipOffListener(listener: unknown): void - - removeKernelTipOffListener(listenerId: unknown): void - - tipOffSendJsData(args: unknown[]): Promise //2 - - getPskey(domainList: string[], nocache: boolean): Promise }> //2 - - tipOffSendJsData(args: unknown[]): Promise //2 - - tipOffMsgs(args: unknown[]): Promise //1 - - encodeUinAesInfo(args: unknown[]): Promise //2 - - isNull(): boolean -} \ No newline at end of file + getPskey(domainList: string[], nocache: boolean): Promise }> +} diff --git a/src/ntqqapi/services/common.ts b/src/ntqqapi/services/common.ts index dc7ac8d..138315e 100644 --- a/src/ntqqapi/services/common.ts +++ b/src/ntqqapi/services/common.ts @@ -1,16 +1,8 @@ export enum GeneralCallResultStatus { OK = 0 - // ERROR = 1 } export interface GeneralCallResult { result: GeneralCallResultStatus errMsg: string } - -export interface forceFetchClientKeyRetType extends GeneralCallResult { - url: string - keyIndex: string - clientKey: string - expireTime: string -} \ No newline at end of file diff --git a/src/ntqqapi/services/index.ts b/src/ntqqapi/services/index.ts index 22f46ab..2ce5f5a 100644 --- a/src/ntqqapi/services/index.ts +++ b/src/ntqqapi/services/index.ts @@ -9,4 +9,3 @@ export * from './NodeIKernelUixConvertService' export * from './NodeIKernelRichMediaService' export * from './NodeIKernelTicketService' export * from './NodeIKernelTipOffService' -export * from './NodeIKernelSearchService' \ No newline at end of file diff --git a/src/ntqqapi/types/msg.ts b/src/ntqqapi/types/msg.ts index f84f1f2..81390ab 100644 --- a/src/ntqqapi/types/msg.ts +++ b/src/ntqqapi/types/msg.ts @@ -197,50 +197,6 @@ export enum ChatType { temp = 100, } -// 来自Android分析 -export enum ChatType2 { - KCHATTYPEADELIE = 42, - KCHATTYPEBUDDYNOTIFY = 5, - KCHATTYPEC2C = 1, - KCHATTYPECIRCLE = 113, - KCHATTYPEDATALINE = 8, - KCHATTYPEDATALINEMQQ = 134, - KCHATTYPEDISC = 3, - KCHATTYPEFAV = 41, - KCHATTYPEGAMEMESSAGE = 105, - KCHATTYPEGAMEMESSAGEFOLDER = 116, - KCHATTYPEGROUP = 2, - KCHATTYPEGROUPBLESS = 133, - KCHATTYPEGROUPGUILD = 9, - KCHATTYPEGROUPHELPER = 7, - KCHATTYPEGROUPNOTIFY = 6, - KCHATTYPEGUILD = 4, - KCHATTYPEGUILDMETA = 16, - KCHATTYPEMATCHFRIEND = 104, - KCHATTYPEMATCHFRIENDFOLDER = 109, - KCHATTYPENEARBY = 106, - KCHATTYPENEARBYASSISTANT = 107, - KCHATTYPENEARBYFOLDER = 110, - KCHATTYPENEARBYHELLOFOLDER = 112, - KCHATTYPENEARBYINTERACT = 108, - KCHATTYPEQQNOTIFY = 132, - KCHATTYPERELATEACCOUNT = 131, - KCHATTYPESERVICEASSISTANT = 118, - KCHATTYPESERVICEASSISTANTSUB = 201, - KCHATTYPESQUAREPUBLIC = 115, - KCHATTYPESUBSCRIBEFOLDER = 30, - KCHATTYPETEMPADDRESSBOOK = 111, - KCHATTYPETEMPBUSSINESSCRM = 102, - KCHATTYPETEMPC2CFROMGROUP = 100, - KCHATTYPETEMPC2CFROMUNKNOWN = 99, - KCHATTYPETEMPFRIENDVERIFY = 101, - KCHATTYPETEMPNEARBYPRO = 119, - KCHATTYPETEMPPUBLICACCOUNT = 103, - KCHATTYPETEMPWPA = 117, - KCHATTYPEUNKNOWN = 0, - KCHATTYPEWEIYUN = 40, -} - export interface PttElement { canConvert2Text: boolean duration: number // 秒数 diff --git a/src/ntqqapi/wrapper.ts b/src/ntqqapi/wrapper.ts index 80fc730..f101f1a 100644 --- a/src/ntqqapi/wrapper.ts +++ b/src/ntqqapi/wrapper.ts @@ -8,8 +8,7 @@ import { NodeIKernelUixConvertService, NodeIKernelRichMediaService, NodeIKernelTicketService, - NodeIKernelTipOffService, - NodeIKernelSearchService + NodeIKernelTipOffService } from './services' import { constants } from 'node:os' import { Dict } from 'cosmokit' @@ -26,7 +25,6 @@ export interface NodeIQQNTWrapperSession { getRichMediaService(): NodeIKernelRichMediaService getTicketService(): NodeIKernelTicketService getTipOffService(): NodeIKernelTipOffService - getSearchService(): NodeIKernelSearchService } export interface WrapperApi { diff --git a/src/onebot11/action/go-cqhttp/DelEssenceMsg.ts b/src/onebot11/action/go-cqhttp/DelEssenceMsg.ts index a4815bd..89e735f 100644 --- a/src/onebot11/action/go-cqhttp/DelEssenceMsg.ts +++ b/src/onebot11/action/go-cqhttp/DelEssenceMsg.ts @@ -5,7 +5,7 @@ interface Payload { message_id: number | string } -export class DelEssenceMsg extends BaseAction { +export class DeleteEssenceMsg extends BaseAction { actionName = ActionName.GoCQHTTP_DelEssenceMsg payloadSchema = Schema.object({ message_id: Schema.union([Number, String]).required() diff --git a/src/onebot11/action/go-cqhttp/DelGroupFile.ts b/src/onebot11/action/go-cqhttp/DelGroupFile.ts index b9a4a25..0dc3ede 100644 --- a/src/onebot11/action/go-cqhttp/DelGroupFile.ts +++ b/src/onebot11/action/go-cqhttp/DelGroupFile.ts @@ -2,9 +2,9 @@ import { BaseAction, Schema } from '../BaseAction' import { ActionName } from '../types' interface Payload { - group_id: string | number + group_id: number | string file_id: string - busid: number + busid: number | string } export class DelGroupFile extends BaseAction { @@ -12,11 +12,11 @@ export class DelGroupFile extends BaseAction { payloadSchema = Schema.object({ group_id: Schema.union([Number, String]).required(), file_id: Schema.string().required(), - busid: Schema.number().default(102) + busid: Schema.union([Number, String]).default(102) }) async _handle(payload: Payload) { - await this.ctx.ntGroupApi.deleteGroupFile(payload.group_id.toString(), [payload.file_id], [payload.busid]) + await this.ctx.ntGroupApi.deleteGroupFile(payload.group_id.toString(), [payload.file_id], [+payload.busid]) return null } } diff --git a/src/onebot11/action/group/GetGroupEssence.ts b/src/onebot11/action/go-cqhttp/GetGroupEssence.ts similarity index 95% rename from src/onebot11/action/group/GetGroupEssence.ts rename to src/onebot11/action/go-cqhttp/GetGroupEssence.ts index 06d78da..fa4aa11 100644 --- a/src/onebot11/action/group/GetGroupEssence.ts +++ b/src/onebot11/action/go-cqhttp/GetGroupEssence.ts @@ -16,7 +16,7 @@ interface EssenceMsg { message_id: number } -export class GetGroupEssence extends BaseAction { +export class GetEssenceMsgList extends BaseAction { actionName = ActionName.GoCQHTTP_GetEssenceMsgList payloadSchema = Schema.object({ group_id: Schema.union([Number, String]).required() diff --git a/src/onebot11/action/go-cqhttp/SetEssenceMsg.ts b/src/onebot11/action/go-cqhttp/SetEssenceMsg.ts index 6bfbc0f..dc124b6 100644 --- a/src/onebot11/action/go-cqhttp/SetEssenceMsg.ts +++ b/src/onebot11/action/go-cqhttp/SetEssenceMsg.ts @@ -1,24 +1,22 @@ -import { BaseAction } from '../BaseAction' +import { BaseAction, Schema } from '../BaseAction' import { ActionName } from '../types' interface Payload { message_id: number | string } -export class SetEssenceMsg extends BaseAction { +export class SetEssenceMsg extends BaseAction { actionName = ActionName.GoCQHTTP_SetEssenceMsg + payloadSchema = Schema.object({ + message_id: Schema.union([Number, String]).required() + }) protected async _handle(payload: Payload) { - if (!payload.message_id) { - throw Error('message_id不能为空') - } const msg = await this.ctx.store.getMsgInfoByShortId(+payload.message_id) if (!msg) { throw new Error('msg not found') } - return await this.ctx.ntGroupApi.addGroupEssence( - msg.peer.peerUid, - msg.msgId - ) + await this.ctx.ntGroupApi.addGroupEssence(msg.peer.peerUid, msg.msgId) + return null } } diff --git a/src/onebot11/action/go-cqhttp/UploadGroupFile.ts b/src/onebot11/action/go-cqhttp/UploadGroupFile.ts new file mode 100644 index 0000000..10ba0e5 --- /dev/null +++ b/src/onebot11/action/go-cqhttp/UploadGroupFile.ts @@ -0,0 +1,35 @@ +import { BaseAction, Schema } from '../BaseAction' +import { ActionName } from '../types' +import { SendElementEntities } from '@/ntqqapi/entities' +import { uri2local } from '@/common/utils' +import { sendMsg, createPeer, CreatePeerMode } from '../../helper/createMessage' + +interface Payload { + group_id: number | string + file: string + name: string + folder?: string + folder_id?: string +} + +export class UploadGroupFile extends BaseAction { + actionName = ActionName.GoCQHTTP_UploadGroupFile + payloadSchema = Schema.object({ + group_id: Schema.union([Number, String]).required(), + file: Schema.string().required(), + name: Schema.string(), + folder: Schema.string(), + folder_id: Schema.string() + }) + + protected async _handle(payload: Payload): Promise { + const { success, errMsg, path, fileName } = await uri2local(payload.file) + if (!success) { + throw new Error(errMsg) + } + const file = await SendElementEntities.file(this.ctx, path, payload.name || fileName, payload.folder ?? payload.folder_id) + const peer = await createPeer(this.ctx, payload, CreatePeerMode.Group) + await sendMsg(this.ctx, peer, [file], []) + return null + } +} diff --git a/src/onebot11/action/go-cqhttp/UploadFile.ts b/src/onebot11/action/go-cqhttp/UploadPrivateFile.ts similarity index 53% rename from src/onebot11/action/go-cqhttp/UploadFile.ts rename to src/onebot11/action/go-cqhttp/UploadPrivateFile.ts index c52b36f..667b791 100644 --- a/src/onebot11/action/go-cqhttp/UploadFile.ts +++ b/src/onebot11/action/go-cqhttp/UploadPrivateFile.ts @@ -1,32 +1,9 @@ -import { BaseAction } from '../BaseAction' +import { BaseAction, Schema } from '../BaseAction' import { ActionName } from '../types' import { SendElementEntities } from '@/ntqqapi/entities' import { uri2local } from '@/common/utils' import { sendMsg, createPeer, CreatePeerMode } from '../../helper/createMessage' -interface UploadGroupFilePayload { - group_id: number | string - file: string - name: string - folder?: string - folder_id?: string -} - -export class UploadGroupFile extends BaseAction { - actionName = ActionName.GoCQHTTP_UploadGroupFile - - protected async _handle(payload: UploadGroupFilePayload): Promise { - const { success, errMsg, path, fileName } = await uri2local(payload.file) - if (!success) { - throw new Error(errMsg) - } - const file = await SendElementEntities.file(this.ctx, path, payload.name || fileName, payload.folder ?? payload.folder_id) - const peer = await createPeer(this.ctx, payload, CreatePeerMode.Group) - await sendMsg(this.ctx, peer, [file], []) - return null - } -} - interface UploadPrivateFilePayload { user_id: number | string file: string @@ -35,6 +12,11 @@ interface UploadPrivateFilePayload { export class UploadPrivateFile extends BaseAction { actionName = ActionName.GoCQHTTP_UploadPrivateFile + payloadSchema = Schema.object({ + user_id: Schema.union([Number, String]).required(), + file: Schema.string().required(), + name: Schema.string() + }) protected async _handle(payload: UploadPrivateFilePayload): Promise { const { success, errMsg, path, fileName } = await uri2local(payload.file) diff --git a/src/onebot11/action/group/GetGroupHonorInfo.ts b/src/onebot11/action/group/GetGroupHonorInfo.ts index 867c06a..e376724 100644 --- a/src/onebot11/action/group/GetGroupHonorInfo.ts +++ b/src/onebot11/action/group/GetGroupHonorInfo.ts @@ -1,22 +1,19 @@ -import { WebHonorType } from '@/ntqqapi/api' import { ActionName } from '../types' -import { BaseAction } from '../BaseAction' +import { BaseAction, Schema } from '../BaseAction' interface Payload { - group_id: number - type?: WebHonorType + group_id: number | string + type: 'talkative' | 'performer' | 'legend' | 'strong_newbie' | 'emotion' | 'all' } export class GetGroupHonorInfo extends BaseAction { actionName = ActionName.GetGroupHonorInfo + payloadSchema = Schema.object({ + group_id: Schema.union([Number, String]).required(), + type: Schema.union(['talkative', 'performer', 'legend', 'strong_newbie', 'emotion', 'all']).default('all') + }) protected async _handle(payload: Payload) { - if (!payload.group_id) { - throw '缺少参数group_id' - } - if (!payload.type) { - payload.type = WebHonorType.ALL - } return await this.ctx.ntWebApi.getGroupHonorInfo(payload.group_id.toString(), payload.type) } } diff --git a/src/onebot11/action/group/GetGroupInfo.ts b/src/onebot11/action/group/GetGroupInfo.ts index 30d0357..cc3faf1 100644 --- a/src/onebot11/action/group/GetGroupInfo.ts +++ b/src/onebot11/action/group/GetGroupInfo.ts @@ -1,6 +1,6 @@ import { OB11Group } from '../../types' import { OB11Entities } from '../../entities' -import { BaseAction } from '../BaseAction' +import { BaseAction, Schema } from '../BaseAction' import { ActionName } from '../types' interface Payload { @@ -9,14 +9,17 @@ interface Payload { class GetGroupInfo extends BaseAction { actionName = ActionName.GetGroupInfo + payloadSchema = Schema.object({ + group_id: Schema.union([Number, String]).required() + }) protected async _handle(payload: Payload) { - const group = (await this.ctx.ntGroupApi.getGroups()).find(e => e.groupCode == payload.group_id.toString()) + const groupCode = payload.group_id.toString() + const group = (await this.ctx.ntGroupApi.getGroups()).find(e => e.groupCode === groupCode) if (group) { return OB11Entities.group(group) - } else { - throw `群${payload.group_id}不存在` } + throw new Error(`群${payload.group_id}不存在`) } } diff --git a/src/onebot11/action/group/GetGroupMemberInfo.ts b/src/onebot11/action/group/GetGroupMemberInfo.ts index e47b1be..8fe323c 100644 --- a/src/onebot11/action/group/GetGroupMemberInfo.ts +++ b/src/onebot11/action/group/GetGroupMemberInfo.ts @@ -1,8 +1,7 @@ -import { BaseAction } from '../BaseAction' +import { BaseAction, Schema } from '../BaseAction' import { OB11GroupMember } from '../../types' import { OB11Entities } from '../../entities' import { ActionName } from '../types' -import { selfInfo } from '@/common/globalVars' import { isNullable } from 'cosmokit' interface Payload { @@ -12,35 +11,26 @@ interface Payload { class GetGroupMemberInfo extends BaseAction { actionName = ActionName.GetGroupMemberInfo + payloadSchema = Schema.object({ + group_id: Schema.union([Number, String]).required(), + user_id: Schema.union([Number, String]).required() + }) protected async _handle(payload: Payload) { - const member = await this.ctx.ntGroupApi.getGroupMember(payload.group_id.toString(), payload.user_id.toString()) + const groupCode = payload.group_id.toString() + const member = await this.ctx.ntGroupApi.getGroupMember(groupCode, payload.user_id.toString()) if (member) { if (isNullable(member.sex)) { - //log('获取群成员详细信息') const info = await this.ctx.ntUserApi.getUserDetailInfo(member.uid) - //log('群成员详细信息结果', info) Object.assign(member, info) } - const ret = OB11Entities.groupMember(payload.group_id.toString(), member) - const self = await this.ctx.ntGroupApi.getGroupMember(payload.group_id.toString(), selfInfo.uid) - if (self?.role === 3 || self?.role === 4) { - const webGroupMembers = await this.ctx.ntWebApi.getGroupMembers(payload.group_id.toString()) - const target = webGroupMembers.find(e => e?.uin && e.uin === ret.user_id) - if (target) { - ret.join_time = target.join_time - ret.last_sent_time = target.last_speak_time - ret.qage = target.qage - ret.level = target.lv.level.toString() - } - } + const ret = OB11Entities.groupMember(groupCode, member) const date = Math.round(Date.now() / 1000) - ret.last_sent_time ||= Number(member.lastSpeakTime || date) - ret.join_time ||= Number(member.joinTime || date) + ret.last_sent_time ??= date + ret.join_time ??= date return ret - } else { - throw `群成员${payload.user_id}不存在` } + throw new Error(`群成员${payload.user_id}不存在`) } } diff --git a/src/onebot11/action/group/GetGroupMemberList.ts b/src/onebot11/action/group/GetGroupMemberList.ts index a6d5efc..11f2666 100644 --- a/src/onebot11/action/group/GetGroupMemberList.ts +++ b/src/onebot11/action/group/GetGroupMemberList.ts @@ -1,16 +1,18 @@ import { OB11GroupMember } from '../../types' import { OB11Entities } from '../../entities' -import { BaseAction } from '../BaseAction' +import { BaseAction, Schema } from '../BaseAction' import { ActionName } from '../types' -import { selfInfo } from '@/common/globalVars' interface Payload { group_id: number | string - no_cache: boolean | string + no_cache?: boolean | string } class GetGroupMemberList extends BaseAction { actionName = ActionName.GetGroupMemberList + payloadSchema = Schema.object({ + group_id: Schema.union([Number, String]).required() + }) protected async _handle(payload: Payload) { const groupCode = payload.group_id.toString() @@ -20,43 +22,14 @@ class GetGroupMemberList extends BaseAction { groupMembers = await this.ctx.ntGroupApi.getGroupMembers(groupCode) } const groupMembersArr = Array.from(groupMembers.values()) - - const _groupMembers = groupMembersArr.map(item => { - return OB11Entities.groupMember(groupCode, item) - }) - - const MemberMap: Map = new Map() const date = Math.round(Date.now() / 1000) - for (let i = 0, len = _groupMembers.length; i < len; i++) { - // 保证基础数据有这个 同时避免群管插件过于依赖这个杀了 - _groupMembers[i].join_time ||= date - _groupMembers[i].last_sent_time ||= date - MemberMap.set(_groupMembers[i].user_id, _groupMembers[i]) - } - - const selfRole = groupMembers.get(selfInfo.uid)?.role - const isPrivilege = selfRole === 3 || selfRole === 4 - - if (isPrivilege) { - const webGroupMembers = await this.ctx.ntWebApi.getGroupMembers(groupCode) - for (let i = 0, len = webGroupMembers.length; i < len; i++) { - if (!webGroupMembers[i]?.uin) { - continue - } - const MemberData = MemberMap.get(webGroupMembers[i]?.uin) - if (MemberData) { - if (MemberData.join_time === date) { - MemberData.join_time = webGroupMembers[i]?.join_time - MemberData.last_sent_time = webGroupMembers[i]?.last_speak_time - } - MemberData.qage = webGroupMembers[i]?.qage - MemberMap.set(webGroupMembers[i]?.uin, MemberData) - } - } - } - - return Array.from(MemberMap.values()) + return groupMembersArr.map(item => { + const member = OB11Entities.groupMember(groupCode, item) + member.join_time ??= date + member.last_sent_time ??= date + return member + }) } } diff --git a/src/onebot11/action/index.ts b/src/onebot11/action/index.ts index 0c85a33..082ae58 100644 --- a/src/onebot11/action/index.ts +++ b/src/onebot11/action/index.ts @@ -1,7 +1,7 @@ import type Adapter from '../adapter' import GetMsg from './msg/GetMsg' import GetLoginInfo from './system/GetLoginInfo' -import { GetFriendList, GetFriendWithCategory } from './user/GetFriendList' +import { GetFriendList } from './user/GetFriendList' import GetGroupList from './group/GetGroupList' import GetGroupInfo from './group/GetGroupInfo' import GetGroupMemberList from './group/GetGroupMemberList' @@ -37,7 +37,6 @@ import GetImage from './file/GetImage' import GetRecord from './file/GetRecord' import { MarkMsgAsRead } from './go-cqhttp/MarkMsgAsRead' import CleanCache from './system/CleanCache' -import { UploadGroupFile, UploadPrivateFile } from './go-cqhttp/UploadFile' import { GetConfigAction, SetConfigAction } from './llonebot/Config' import GetGroupAddRequest from './llonebot/GetGroupAddRequest' import SetQQAvatar from './llonebot/SetQQAvatar' @@ -48,11 +47,11 @@ import { GetForwardMsg } from './go-cqhttp/GetForwardMsg' import { GetCookies } from './user/GetCookie' import { SetMsgEmojiLike } from './msg/SetMsgEmojiLike' import { ForwardFriendSingleMsg, ForwardGroupSingleMsg } from './msg/ForwardSingleMsg' -import { GetGroupEssence } from './group/GetGroupEssence' +import { GetEssenceMsgList } from './go-cqhttp/GetGroupEssence' import { GetGroupHonorInfo } from './group/GetGroupHonorInfo' import { HandleQuickOperation } from './go-cqhttp/QuickOperation' import { SetEssenceMsg } from './go-cqhttp/SetEssenceMsg' -import { DelEssenceMsg } from './go-cqhttp/DelEssenceMsg' +import { DeleteEssenceMsg } from './go-cqhttp/DelEssenceMsg' import { GetEvent } from './llonebot/GetEvent' import { DelGroupFile } from './go-cqhttp/DelGroupFile' import { GetGroupSystemMsg } from './go-cqhttp/GetGroupSystemMsg' @@ -67,6 +66,9 @@ import { FetchEmojiLike } from './llonebot/FetchEmojiLike' import { FetchCustomFace } from './llonebot/FetchCustomFace' import { GetFriendMsgHistory } from './llonebot/GetFriendMsgHistory' import { GetGroupFilesByFolder } from './go-cqhttp/GetGroupFilesByFolder' +import { GetFriendWithCategory } from './llonebot/GetFriendWithCategory' +import { UploadGroupFile } from './go-cqhttp/UploadGroupFile' +import { UploadPrivateFile } from './go-cqhttp/UploadPrivateFile' export function initActionMap(adapter: Adapter) { const actionHandlers = [ @@ -117,7 +119,7 @@ export function initActionMap(adapter: Adapter) { new ForwardFriendSingleMsg(adapter), new ForwardGroupSingleMsg(adapter), // go-cqhttp - new GetGroupEssence(adapter), + new GetEssenceMsgList(adapter), new GetGroupHonorInfo(adapter), new SendForwardMsg(adapter), new SendGroupForwardMsg(adapter), @@ -132,7 +134,7 @@ export function initActionMap(adapter: Adapter) { new GetForwardMsg(adapter), new HandleQuickOperation(adapter), new SetEssenceMsg(adapter), - new DelEssenceMsg(adapter), + new DeleteEssenceMsg(adapter), new DelGroupFile(adapter), new GetGroupSystemMsg(adapter), new CreateGroupFileFolder(adapter), diff --git a/src/onebot11/action/llonebot/GetFriendMsgHistory.ts b/src/onebot11/action/llonebot/GetFriendMsgHistory.ts index 87605dd..e7c3219 100644 --- a/src/onebot11/action/llonebot/GetFriendMsgHistory.ts +++ b/src/onebot11/action/llonebot/GetFriendMsgHistory.ts @@ -43,9 +43,9 @@ export class GetFriendMsgHistory extends BaseAction { } if (msgList.length === 0) throw new Error('未找到消息') if (payload.reverseOrder) msgList.reverse() - msgList.map(msg => { + for (const msg of msgList) { msg.msgShortId = this.ctx.store.createMsgShortId({ chatType: msg.chatType, peerUid: msg.peerUid }, msg.msgId) - }) + } const ob11MsgList = await Promise.all(msgList.map(msg => OB11Entities.message(this.ctx, msg))) return { messages: filterNullable(ob11MsgList) } } diff --git a/src/onebot11/action/llonebot/GetFriendWithCategory.ts b/src/onebot11/action/llonebot/GetFriendWithCategory.ts new file mode 100644 index 0000000..7451d4f --- /dev/null +++ b/src/onebot11/action/llonebot/GetFriendWithCategory.ts @@ -0,0 +1,17 @@ +import { BaseAction } from '../BaseAction' +import { OB11User } from '../../types' +import { OB11Entities } from '../../entities' +import { ActionName } from '../types' +import { getBuildVersion } from '@/common/utils' + +export class GetFriendWithCategory extends BaseAction { + actionName = ActionName.GetFriendsWithCategory + + protected async _handle() { + if (getBuildVersion() >= 26702) { + return OB11Entities.friendsV2(await this.ctx.ntFriendApi.getBuddyV2ExWithCate(true)) + } else { + throw new Error('this ntqq version not support, must be 26702 or later') + } + } +} diff --git a/src/onebot11/action/llonebot/GetGroupAddRequest.ts b/src/onebot11/action/llonebot/GetGroupAddRequest.ts index 147b074..920cd39 100644 --- a/src/onebot11/action/llonebot/GetGroupAddRequest.ts +++ b/src/onebot11/action/llonebot/GetGroupAddRequest.ts @@ -1,5 +1,5 @@ import { BaseAction } from '../BaseAction' -import { GroupNotify, GroupNotifyStatus } from '@/ntqqapi/types' +import { GroupNotifyStatus } from '@/ntqqapi/types' import { ActionName } from '../types' interface OB11GroupRequestNotify { @@ -13,7 +13,7 @@ export default class GetGroupAddRequest extends BaseAction { const data = await this.ctx.ntGroupApi.getGroupIgnoreNotifies() - const notifies: GroupNotify[] = data.notifies.filter((notify) => notify.status === GroupNotifyStatus.KUNHANDLE) + const notifies = data.notifies.filter(notify => notify.status === GroupNotifyStatus.KUNHANDLE) const returnData: OB11GroupRequestNotify[] = [] for (const notify of notifies) { const uin = await this.ctx.ntUserApi.getUinByUid(notify.user1.uid) diff --git a/src/onebot11/action/llonebot/GetProfileLike.ts b/src/onebot11/action/llonebot/GetProfileLike.ts index 5f6a3e7..a80690a 100644 --- a/src/onebot11/action/llonebot/GetProfileLike.ts +++ b/src/onebot11/action/llonebot/GetProfileLike.ts @@ -8,10 +8,10 @@ export class GetProfileLike extends BaseAction { async _handle() { const ret = await this.ctx.ntUserApi.getProfileLike(selfInfo.uid) - const listdata = ret.info.userLikeInfos[0].favoriteInfo.userInfos - for (const item of listdata) { + const data = ret.info.userLikeInfos[0].favoriteInfo.userInfos + for (const item of data) { item.uin = Number(await this.ctx.ntUserApi.getUinByUid(item.uid)) || 0 } - return listdata + return data } } diff --git a/src/onebot11/action/llonebot/SetQQAvatar.ts b/src/onebot11/action/llonebot/SetQQAvatar.ts index b79b391..0f8ed82 100644 --- a/src/onebot11/action/llonebot/SetQQAvatar.ts +++ b/src/onebot11/action/llonebot/SetQQAvatar.ts @@ -1,4 +1,4 @@ -import fs from 'node:fs' +import { unlink } from 'node:fs/promises' import { BaseAction } from '../BaseAction' import { ActionName } from '../types' import { checkFileReceived, uri2local } from '../../../common/utils/file' @@ -13,18 +13,17 @@ export default class SetAvatar extends BaseAction { protected async _handle(payload: Payload): Promise { const { path, isLocal, errMsg } = await uri2local(payload.file) if (errMsg) { - throw `头像${payload.file}设置失败,file字段可能格式不正确` + throw new Error(errMsg) } if (path) { await checkFileReceived(path, 5000) // 文件不存在QQ会崩溃,需要提前判断 const ret = await this.ctx.ntUserApi.setQQAvatar(path) if (!isLocal) { - fs.unlink(path, () => { }) + unlink(path) } if (!ret) { throw `头像${payload.file}设置失败,api无返回` } - // log(`头像设置返回:${JSON.stringify(ret)}`) if ((ret.result as number) === 1004022) { throw `头像${payload.file}设置失败,文件可能不是图片格式` } else if (ret.result !== 0) { @@ -32,7 +31,7 @@ export default class SetAvatar extends BaseAction { } } else { if (!isLocal) { - fs.unlink(path, () => { }) + unlink(path) } throw `头像${payload.file}设置失败,无法获取头像,文件可能不存在` } diff --git a/src/onebot11/action/user/GetFriendList.ts b/src/onebot11/action/user/GetFriendList.ts index a2fd1e8..540702b 100644 --- a/src/onebot11/action/user/GetFriendList.ts +++ b/src/onebot11/action/user/GetFriendList.ts @@ -1,35 +1,24 @@ -import { BaseAction } from '../BaseAction' +import { BaseAction, Schema } from '../BaseAction' import { OB11User } from '../../types' import { OB11Entities } from '../../entities' import { ActionName } from '../types' import { getBuildVersion } from '@/common/utils' interface Payload { - no_cache: boolean | string + no_cache: boolean } export class GetFriendList extends BaseAction { actionName = ActionName.GetFriendList + payloadSchema = Schema.object({ + no_cache: Schema.boolean().default(false) + }) protected async _handle(payload: Payload) { - const refresh = payload?.no_cache === true || payload?.no_cache === 'true' + const refresh = payload.no_cache if (getBuildVersion() >= 26702) { return OB11Entities.friendsV2(await this.ctx.ntFriendApi.getBuddyV2(refresh)) } return OB11Entities.friends(await this.ctx.ntFriendApi.getFriends()) } } - -// extend -export class GetFriendWithCategory extends BaseAction { - actionName = ActionName.GetFriendsWithCategory - - protected async _handle() { - if (getBuildVersion() >= 26702) { - //全新逻辑 - return OB11Entities.friendsV2(await this.ctx.ntFriendApi.getBuddyV2ExWithCate(true)) - } else { - throw new Error('this ntqq version not support, must be 26702 or later') - } - } -} diff --git a/src/onebot11/entities.ts b/src/onebot11/entities.ts index dce07bd..a89e8b8 100644 --- a/src/onebot11/entities.ts +++ b/src/onebot11/entities.ts @@ -20,8 +20,7 @@ import { Sex, TipGroupElementType, User, - FriendV2, - ChatType2 + FriendV2 } from '../ntqqapi/types' import { EventType } from './event/OB11BaseEvent' import { encodeCQCode } from './cqcode' @@ -91,11 +90,11 @@ export namespace OB11Entities { resMsg.sub_type = 'friend' resMsg.sender.nickname = (await ctx.ntUserApi.getUserDetailInfo(msg.senderUid)).nick } - else if (msg.chatType as unknown as ChatType2 === ChatType2.KCHATTYPETEMPC2CFROMGROUP) { + else if (msg.chatType === ChatType.temp) { resMsg.sub_type = 'group' resMsg.temp_source = 0 //群聊 resMsg.sender.nickname = (await ctx.ntUserApi.getUserDetailInfo(msg.senderUid)).nick - const ret = await ctx.ntMsgApi.getTempChatInfo(ChatType2.KCHATTYPETEMPC2CFROMGROUP, msg.senderUid) + const ret = await ctx.ntMsgApi.getTempChatInfo(ChatType.temp, msg.senderUid) if (ret?.result === 0) { resMsg.sender.group_id = Number(ret.tmpChatInfo?.groupCode) } else { @@ -395,6 +394,7 @@ export namespace OB11Entities { } } if (grayTipElement.xmlElement?.templId === '10229' || grayTipElement.jsonGrayTipElement?.busiId === '19324') { + ctx.logger.info('收到好友添加消息', msg.peerUid) const uin = +msg.peerUin || +(await ctx.ntUserApi.getUinByUid(msg.peerUid)) return new OB11FriendAddNoticeEvent(uin) } @@ -503,14 +503,6 @@ export namespace OB11Entities { const xmlElement = grayTipElement.xmlElement if (xmlElement?.templId === '10382') { - // 表情回应消息 - // "content": - // " - // - // - // - // - // ", const emojiLikeData = new XMLParser({ ignoreAttributes: false, attributeNamePrefix: '', diff --git a/src/onebot11/types.ts b/src/onebot11/types.ts index cb63d99..0fd169b 100644 --- a/src/onebot11/types.ts +++ b/src/onebot11/types.ts @@ -289,7 +289,7 @@ export interface OB11MessageContact { export interface OB11MessageShake { type: OB11MessageDataType.shake - data: {} + data: Record } export type OB11MessageData = diff --git a/src/version.ts b/src/version.ts index f6b357f..c23cf1b 100644 --- a/src/version.ts +++ b/src/version.ts @@ -1 +1 @@ -export const version = '3.33.2' +export const version = '3.33.3'