diff --git a/src/core/core.ts b/src/core/core.ts index 37f3f2a9..aee5ba08 100644 --- a/src/core/core.ts +++ b/src/core/core.ts @@ -1,3 +1,21 @@ +export enum NCoreWorkMode { + Unknown = 0, + Shell = 1, + LiteLoader = 2 +} export class NapCatCore { - + public WorkMode: NCoreWorkMode = NCoreWorkMode.Unknown; + public isInit: boolean = false; +} +export class NapCatShell extends NapCatCore { + public WorkMode: NCoreWorkMode = NCoreWorkMode.Shell; + Init() { + + } +} +export class NapCatLiteLoader extends NapCatCore { + public WorkMode: NCoreWorkMode = NCoreWorkMode.LiteLoader; + Init(LoginService: any, WrapperSession: any) { + + } } \ No newline at end of file diff --git a/src/core/entities/cache.ts b/src/core/entities/cache.ts new file mode 100644 index 00000000..8c53d1b0 --- /dev/null +++ b/src/core/entities/cache.ts @@ -0,0 +1,65 @@ +import { ChatType } from './msg'; + +export interface CacheScanResult { + result: number; + size: [ // 单位为字节 + string, // 系统总存储空间 + string, // 系统可用存储空间 + string, // 系统已用存储空间 + string, // QQ总大小 + string, // 「聊天与文件」大小 + string, // 未知 + string, // 「缓存数据」大小 + string, // 「其他数据」大小 + string, // 未知 + ] +} + +export interface ChatCacheList { + pageCount: number; + infos: ChatCacheListItem[] +}; + +export interface ChatCacheListItem { + chatType: ChatType; + basicChatCacheInfo: ChatCacheListItemBasic; + guildChatCacheInfo: unknown[]; // TODO: 没用过频道所以不知道这里边的详细内容 +} + +export interface ChatCacheListItemBasic { + chatSize: string; + chatTime: string; + uid: string; + uin: string; + remarkName: string; + nickName: string; + chatType?: ChatType; + isChecked?: boolean; +} + +export enum CacheFileType { + IMAGE = 0, + VIDEO = 1, + AUDIO = 2, + DOCUMENT = 3, + OTHER = 4, +} + +export interface CacheFileList { + infos: CacheFileListItem[], +} + +export interface CacheFileListItem { + fileSize: string; + fileTime: string; + fileKey: string; + elementId: string; + elementIdStr: string; + fileType: CacheFileType; + path: string; + fileName: string; + senderId: string; + previewPath: string; + senderName: string; + isChecked?: boolean; +} diff --git a/src/core/entities/group.ts b/src/core/entities/group.ts new file mode 100644 index 00000000..43688fa2 --- /dev/null +++ b/src/core/entities/group.ts @@ -0,0 +1,64 @@ +import { QQLevel, Sex } from './user'; +export enum GroupListUpdateType { + REFRESHALL, + GETALL, + MODIFIED, + REMOVE +} +export interface Group { + groupCode: string, + createTime?: string,//高版本才有 + maxMember: number, + memberCount: number, + groupName: string, + groupStatus: number, + memberRole: number, + isTop: boolean, + toppedTimestamp: string, + privilegeFlag: number, //65760 + isConf: boolean, + hasModifyConfGroupFace: boolean, + hasModifyConfGroupName: boolean, + remarkName: string, + hasMemo: boolean, + groupShutupExpireTime: string, //"0", + personShutupExpireTime: string, //"0", + discussToGroupUin: string, //"0", + discussToGroupMaxMsgSeq: number, + discussToGroupTime: number, + groupFlagExt: number, //1073938496, + authGroupType: number, //0, + groupCreditLevel: number, //0, + groupFlagExt3: number, //0, + groupOwnerId: { + memberUin: string, //"0", + memberUid: string, //"u_fbf8N7aeuZEnUiJAbQ9R8Q" + } +} + +export enum GroupMemberRole { + normal = 2, + admin = 3, + owner = 4 +} + +export interface GroupMember { + memberSpecialTitle?: string; + avatarPath: string; + cardName: string; + cardType: number; + isDelete: boolean; + nick: string; + qid: string; + remark: string; + role: GroupMemberRole; // 群主:4, 管理员:3,群员:2 + shutUpTime: number; // 禁言时间,单位是什么暂时不清楚 + uid: string; // 加密的字符串 + uin: string; // QQ号 + isRobot: boolean; + sex?: Sex + qqLevel?: QQLevel + isChangeRole: boolean; + joinTime: string; + lastSpeakTime: string; +} \ No newline at end of file diff --git a/src/core/entities/index.ts b/src/core/entities/index.ts new file mode 100644 index 00000000..5fd551d4 --- /dev/null +++ b/src/core/entities/index.ts @@ -0,0 +1,5 @@ +export * from './user'; +export * from './group'; +export * from './msg'; +export * from './notify'; +export * from './cache'; \ No newline at end of file diff --git a/src/core/entities/msg.ts b/src/core/entities/msg.ts new file mode 100644 index 00000000..3f5d1ab8 --- /dev/null +++ b/src/core/entities/msg.ts @@ -0,0 +1,787 @@ +import { GroupMemberRole } from './group'; + + +export interface Peer { + chatType: ChatType; + peerUid: string; // 如果是群聊uid为群号,私聊uid就是加密的字符串 + guildId?: string; +} +export interface KickedOffLineInfo { + appId: number + instanceId: number + sameDevice: boolean + tipsDesc: string + tipsTitle: string + kickedType: number + securityKickedType: number +} +export interface GetFileListParam { + sortType: number + fileCount: number + startIndex: number + sortOrder: number + showOnlinedocFolder: number +} +export enum ElementType { + UNKNOWN = 0, + TEXT = 1, + PIC = 2, + FILE = 3, + PTT = 4, + VIDEO = 5, + FACE = 6, + REPLY = 7, + WALLET = 9, + GreyTip = 8,//Poke别叫戳一搓了 官方名字拍一拍 戳一戳是另一个名字 + ARK = 10, + MFACE = 11, + LIVEGIFT = 12, + STRUCTLONGMSG = 13, + MARKDOWN = 14, + GIPHY = 15, + MULTIFORWARD = 16, + INLINEKEYBOARD = 17, + INTEXTGIFT = 18, + CALENDAR = 19, + YOLOGAMERESULT = 20, + AVRECORD = 21, + FEED = 22, + TOFURECORD = 23, + ACEBUBBLE = 24, + ACTIVITY = 25, + TOFU = 26, + FACEBUBBLE = 27, + SHARELOCATION = 28, + TASKTOPMSG = 29, + RECOMMENDEDMSG = 43, + ACTIONBAR = 44 +} +export interface ActionBarElement { + rows: InlineKeyboardRow[]; + botAppid: string; +} +export interface SendActionBarElement { + elementType: ElementType.ACTIONBAR; + elementId: string; + actionBarElement: ActionBarElement; +} +export interface RecommendedMsgElement { + rows: InlineKeyboardRow[]; + botAppid: string; +} +export interface SendRecommendedMsgElement { + elementType: ElementType.RECOMMENDEDMSG; + elementId: string; + recommendedMsgElement: RecommendedMsgElement; +} +export interface InlineKeyboardButton { + id: string; + label: string; + visitedLabel: string; + unsupportTips: string; + data: string; + specifyRoleIds: string[]; + specifyTinyids: string[]; + style: number; + type: number; + clickLimit: number; + atBotShowChannelList: boolean; + permissionType: number; +} +export interface InlineKeyboardRow { + buttons: InlineKeyboardButton[]; +} +export interface TofuElementContent { + color: string; + tittle: string; +} +export interface TaskTopMsgElement { + msgTitle: string; + msgSummary: string; + iconUrl: string; + topMsgType: number; +} +export interface SendTaskTopMsgElement { + elementType: ElementType.TASKTOPMSG; + elementId: string; + taskTopMsgElement: TaskTopMsgElement; +} +export interface TofuRecordElement { + type: number; + busiid: string; + busiuuid: string; + descriptionContent: string; + contentlist: TofuElementContent[], + background: string; + icon: string; + uinlist: string[], + uidlist: string[], + busiExtra: string; + updateTime: string; + dependedmsgid: string; + msgtime: string; + onscreennotify: boolean; +} +export interface SendTofuRecordElement { + elementType: ElementType.TOFURECORD; + elementId: string; + tofuRecordElement: TofuRecordElement; +} + +export interface FaceBubbleElement { + faceCount: number; + faceSummary: string; + faceFlag: number; + content: string; + oldVersionStr: string; + faceType: number; + others: string; + yellowFaceInfo: { + index: number; + buf: string; + compatibleText: string; + text: string; + } +} +export interface SendFaceBubbleElement { + elementType: ElementType.FACEBUBBLE; + elementId: string; + faceBubbleElement: FaceBubbleElement; + +} +export interface AvRecordElement { + type: number; + time: string; + text: string; + mainType: number; + hasRead: boolean; + extraType: number; +} +export interface SendavRecordElement { + elementType: ElementType.AVRECORD; + elementId: string; + avRecordElement: AvRecordElement; +} +export interface YoloUserInfo { + uid: string; + result: number; + rank: number; + bizId: string +} +export interface SendInlineKeyboardElement { + elementType: ElementType.INLINEKEYBOARD; + elementId: string; + inlineKeyboardElement: { + rows: number; + botAppid: string; + } + +} +export interface YoloGameResultElement { + UserInfo: YoloUserInfo[]; +} +export interface SendYoloGameResultElement { + elementType: ElementType.YOLOGAMERESULT; + yoloGameResultElement: YoloGameResultElement +} +export interface GiphyElement { + id: string; + isClip: boolean; + width: number; + height: number; +} +export interface SendGiphyElement { + elementType: ElementType.GIPHY; + elementId: string; + giphyElement: GiphyElement; +} +export interface SendWalletElement { + elementType: ElementType.UNKNOWN;//不做 设置位置 + elementId: string; + walletElement: {} +} +export interface CalendarElement { + summary: string; + msg: string; + expireTimeMs: string; + schemaType: number; + schema: string +} +export interface SendCalendarElement { + elementType: ElementType.CALENDAR; + elementId: string; + calendarElement: CalendarElement; +} +export interface SendliveGiftElement { + elementType: ElementType.LIVEGIFT; + elementId: string; + liveGiftElement: {} +} +export interface SendTextElement { + elementType: ElementType.TEXT; + elementId: string; + textElement: { + content: string; + atType: number; + atUid: string; + atTinyId: string; + atNtUid: string; + }; +} + +export interface SendPttElement { + elementType: ElementType.PTT; + elementId: string; + pttElement: { + fileName: string; + filePath: string; + md5HexStr: string; + fileSize: number; + duration: number; // 单位是秒 + formatType: number; + voiceType: number; + voiceChangeType: number; + canConvert2Text: boolean; + waveAmplitudes: number[]; + fileSubId: string; + playState: number; + autoConvertText: number; + }; +} + +export enum PicType { + gif = 2000, + jpg = 1000 +} + +export enum PicSubType { + normal = 0, // 普通图片,大图 + face = 1 // 表情包小图 +} + +export interface SendPicElement { + elementType: ElementType.PIC; + elementId: string; + picElement:PicElement +} +export interface ReplyElement { + replayMsgSeq: string; + replayMsgId: string; + senderUin: string; + senderUinStr: string; +} +export interface SendReplyElement { + elementType: ElementType.REPLY; + elementId: string; + replyElement: ReplyElement +} + +export interface SendFaceElement { + elementType: ElementType.FACE; + elementId: string; + faceElement: FaceElement; +} + +export interface SendMarketFaceElement { + elementType: ElementType.MFACE; + marketFaceElement: MarketFaceElement; +} +export interface SendstructLongMsgElement { + elementType: ElementType.STRUCTLONGMSG; + elementId: string; + structLongMsgElement: StructLongMsgElement; +} +export interface StructLongMsgElement { + xmlContent: string; + resId: string; +} +export interface SendactionBarElement { + elementType: ElementType.ACTIONBAR; + elementId: string; + actionBarElement: { + rows: number; + botAppid: string; + } +} +export interface ShareLocationElement { + text: string; + ext: string; +} +export interface sendShareLocationElement { + elementType: ElementType.SHARELOCATION; + elementId: string; + shareLocationElement?: ShareLocationElement; +} + +export interface FileElement { + fileMd5?: string; + fileName: string; + filePath: string; + fileSize: string; + picHeight?: number; + picWidth?: number; + folderId?: string; + picThumbPath?: Map; + file10MMd5?: string; + fileSha?: string; + fileSha3?: string; + fileUuid?: string; + fileSubId?: string; + thumbFileSize?: number; + fileBizId?: number +} + +export interface SendFileElement { + elementType: ElementType.FILE; + elementId: string; + fileElement: FileElement; +} + +export interface SendVideoElement { + elementType: ElementType.VIDEO; + elementId: string; + videoElement: VideoElement; +} + +export interface SendArkElement { + elementType: ElementType.ARK; + elementId: string; + arkElement: ArkElement; +} + +export interface SendMarkdownElement { + elementType: ElementType.MARKDOWN; + elementId: string; + markdownElement: MarkdownElement; +} +export type SendMessageElement = SendTextElement | SendPttElement | + SendPicElement | SendReplyElement | SendFaceElement | SendMarketFaceElement | SendFileElement | + SendVideoElement | SendArkElement | SendMarkdownElement | sendShareLocationElement; + +export interface TextElement { + content: string; + atType: number; + atUid: string; + atTinyId: string; + atNtUid: string; +} +export interface MessageElement { + elementType: ElementType, + elementId: string, + extBufForUI: string,//"0x", + textElement?: TextElement; + faceElement?: FaceElement, + marketFaceElement?: MarkdownElement, + replyElement?: ReplyElement, + picElement?: PicElement, + pttElement?: PttElement, + videoElement?: VideoElement, + grayTipElement?: GrayTipElement, + arkElement?: ArkElement, + fileElement?: FileElement, + liveGiftElement?: null, + markdownElement?: MarkdownElement, + structLongMsgElement?: StructLongMsgElement, + multiForwardMsgElement?: MultiForwardMsgElement, + giphyElement?: GiphyElement, + walletElement?: null, + inlineKeyboardElement?: InlineKeyboardElement, + textGiftElement?: null,//???? + calendarElement?: CalendarElement, + yoloGameResultElement?: YoloGameResultElement, + avRecordElement?: AvRecordElement, + structMsgElement?: null, + faceBubbleElement?: FaceBubbleElement, + shareLocationElement?: ShareLocationElement, + tofuRecordElement?: TofuRecordElement, + taskTopMsgElement?: TaskTopMsgElement, + recommendedMsgElement?: RecommendedMsgElement, + actionBarElement?:ActionBarElement + +} +export enum AtType { + notAt = 0, + atAll = 1, + atUser = 2 +} + +export enum ChatType { + friend = 1, + group = 2, + chatDevice = 8, //移动设备? + 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; // 秒数 + fileBizId: null; + fileId: number; // 0 + fileName: string; // "e4d09c784d5a2abcb2f9980bdc7acfe6.amr" + filePath: string; // "/Users//Library/Containers/com.tencent.qq/Data/Library/Application Support/QQ/nt_qq_a6b15c9820595d25a56c1633ce19ad40/nt_data/Ptt/2023-11/Ori/e4d09c784d5a2abcb2f9980bdc7acfe6.amr" + fileSize: string; // "4261" + fileSubId: string; // "0" + fileUuid: string; // "90j3z7rmRphDPrdVgP9udFBaYar#oK0TWZIV" + formatType: string; // 1 + invalidState: number; // 0 + md5HexStr: string; // "e4d09c784d5a2abcb2f9980bdc7acfe6" + playState: number; // 0 + progress: number; // 0 + text: string; // "" + transferStatus: number; // 0 + translateStatus: number; // 0 + voiceChangeType: number; // 0 + voiceType: number; // 0 + waveAmplitudes: number[]; +} + +export interface ArkElement { + bytesData: string; + linkInfo: null; + subElementType: null; +} + +export const IMAGE_HTTP_HOST = 'https://gchat.qpic.cn'; +export const IMAGE_HTTP_HOST_NT = 'https://multimedia.nt.qq.com.cn'; + +export interface PicElement { + md5HexStr?: string; + fileSize: number | string;//number + picWidth: number; + picHeight: number; + fileName: string; + sourcePath: string; + original: boolean; + picType: PicType; + picSubType?: PicSubType; + fileUuid: string; + fileSubId: string; + thumbFileSize: number; + summary: string; + thumbPath: Map; + originImageMd5?: string; + originImageUrl?: string; // http url, 没有host,host是https://gchat.qpic.cn/, 带download参数的是https://multimedia.nt.qq.com.cn +}; + +export enum GrayTipElementSubType { + INVITE_NEW_MEMBER = 12, + MEMBER_NEW_TITLE = 17 +} + +export interface GrayTipElement { + subElementType: GrayTipElementSubType; + revokeElement: { + operatorRole: string; + operatorUid: string; + operatorNick: string; + operatorRemark: string; + operatorMemRemark?: string; + wording: string; // 自定义的撤回提示语 + } + aioOpGrayTipElement: TipAioOpGrayTipElement; + groupElement: TipGroupElement; + xmlElement: { + content: string; + templId: string; + }; + jsonGrayTipElement: { + busiId?: number; + jsonStr: string; + }; +} + +export enum FaceType { + normal = 1, // 小黄脸 + normal2 = 2, // 新小黄脸, 从faceIndex 222开始? + dice = 3 // 骰子 +} +export enum FaceIndex { + dice = 358, + RPS = 359 // 石头剪刀布 +} +export interface FaceElement { + faceIndex: number; + faceType: FaceType; + faceText?: string; + packId?: string; + stickerId?: string; + sourceType?: number; + stickerType?: number; + resultId?: string; + surpriseId?: string; + randomType?: number; +} + +export interface MarketFaceElement { + emojiPackageId: number; + faceName: string; + emojiId: string; + key: string; +} + +export interface VideoElement { + filePath: string; + fileName: string; + videoMd5?: string; + thumbMd5?: string + fileTime?: number; // second + thumbSize?: number; // byte + fileFormat?: viedo_type; // 2表示mp4 参考下面条目 + fileSize?: string; // byte + thumbWidth?: number; + thumbHeight?: number; + busiType?: 0; // + subBusiType?: 0; // 未知 + thumbPath?: Map; + transferStatus?: 0; // 未知 + progress?: 0; // 下载进度? + invalidState?: 0; // 未知 + fileUuid?: string; // 可以用于下载链接? + fileSubId?: string; + fileBizId?: null; + originVideoMd5?: string; + import_rich_media_context?: null; + sourceVideoCodecFormat?: number; +} +// export enum busiType{ +// public static final int CREATOR_SHARE_ADV_XWORLD = 21; +// public static final int MINI_APP_MINI_GAME = 11; +// public static final int OFFICIAL_ACCOUNT_ADV = 4; +// public static final int OFFICIAL_ACCOUNT_ADV_GAME = 8; +// public static final int OFFICIAL_ACCOUNT_ADV_SHOP = 9; +// public static final int OFFICIAL_ACCOUNT_ADV_VIP = 7; +// public static final int OFFICIAL_ACCOUNT_LAYER_MASK_ADV = 14; +// public static final int OFFICIAL_ACCOUNT_SPORT = 13; +// public static final int OFFICIAL_ACCOUNT_TIAN_QI = 10; +// public static final int PC_QQTAB_ADV = 18; +// public static final int QIQIAOBAN_SDK = 15; +// public static final int QQ_CPS = 16; +// public static final int QQ_WALLET_CPS = 17; +// public static final int QZONE_FEEDS = 0; +// public static final int QZONE_PHOTO_TAIL = 2; +// public static final int QZONE_VIDEO_LAYER = 1; +// public static final int REWARD_GIFT_ADV = 6; +// public static final int REWARD_GROUPGIFT_ADV = 12; +// public static final int REWARD_PERSONAL_ADV = 5; +// public static final int WEISEE_OFFICIAL_ACCOUNT = 3; +// public static final int X_WORLD_CREATOR_ADV = 20; +// public static final int X_WORLD_QZONE_LAYER = 22; +// public static final int X_WORLD_VIDEO_ADV = 19; + +// } +// export enum CategoryBusiType { +// _KCateBusiTypeDefault = 0, +// _kCateBusiTypeFaceCluster = 1, +// _kCateBusiTypeLabelCluster = 4, +// _kCateBusiTypeMonthCluster = 16, +// _kCateBusiTypePoiCluster = 2, +// _kCateBusiTypeYearCluster = 8, +// } +export enum viedo_type { + VIDEO_FORMAT_AFS = 7, + VIDEO_FORMAT_AVI = 1, + VIDEO_FORMAT_MKV = 4, + VIDEO_FORMAT_MOD = 9, + VIDEO_FORMAT_MOV = 8, + VIDEO_FORMAT_MP4 = 2, + VIDEO_FORMAT_MTS = 11, + VIDEO_FORMAT_RM = 6, + VIDEO_FORMAT_RMVB = 5, + VIDEO_FORMAT_TS = 10, + VIDEO_FORMAT_WMV = 3, +} +export interface MarkdownElement { + content: string; +} + +export interface InlineKeyboardElementRowButton { + id: string; + label: string; + visitedLabel: string; + style: 1; // 未知 + type: 2; // 未知 + clickLimit: 0; // 未知 + unsupportTips: string; + data: string; + atBotShowChannelList: boolean; + permissionType: number; + specifyRoleIds: []; + specifyTinyids: []; + isReply: false; + anchor: 0; + enter: false; + subscribeDataTemplateIds: [] +} + +export interface InlineKeyboardElement { + rows: [{ + buttons: InlineKeyboardElementRowButton[] + }]; +} + +export interface TipAioOpGrayTipElement { // 这是什么提示来着? + operateType: number; + peerUid: string; + fromGrpCodeOfTmpChat: string; +} + +export enum TipGroupElementType { + memberIncrease = 1, + kicked = 3, // 被移出群 + ban = 8 +} +// public final class MemberAddShowType { +// public static final int KOTHERADD = 0; +// public static final int KOTHERADDBYOTHERQRCODE = 2; +// public static final int KOTHERADDBYYOURQRCODE = 3; +// public static final int KOTHERINVITEOTHER = 5; +// public static final int KOTHERINVITEYOU = 6; +// public static final int KYOUADD = 1; +// public static final int KYOUADDBYOTHERQRCODE = 4; +// public static final int KYOUALREADYMEMBER = 8; +// public static final int KYOUINVITEOTHER = 7; +// } +export interface TipGroupElement { + type: TipGroupElementType; // 1是表示有人加入群; 自己加入群也会收到这个 + role: 0; // 暂时不知 + groupName: string; // 暂时获取不到 + memberUid: string; + memberNick: string; + memberRemark: string; + adminUid: string; + adminNick: string; + adminRemark: string; + createGroup: null; + memberAdd?: { + showType: 1; + otherAdd: null; + otherAddByOtherQRCode: null; + otherAddByYourQRCode: null; + youAddByOtherQRCode: null; + otherInviteOther: null; + otherInviteYou: null; + youInviteOther: null + }; + shutUp?: { + curTime: string; + duration: string; // 禁言时间,秒 + admin: { + uid: string; + card: string; + name: string; + role: GroupMemberRole + }; + member: { + uid: string + card: string; + name: string; + role: GroupMemberRole + } + } +} + +export interface MultiForwardMsgElement { + xmlContent: string; // xml格式的消息内容 + resId: string; + fileName: string; +} + +export interface RawMessage { + parentMsgPeer: Peer; + parentMsgIdList:string[]; + id?: number;//扩展字段 用于处理OB11 ID + guildId: string; + msgRandom: string; + + + msgId: string; + + // 时间戳,秒 + msgTime: string; + + msgSeq: string; + msgType: number; + subMsgType: number; + senderUid: string; + senderUin: string; // 发送者QQ号 + peerUid: string; // 群号 或者 QQ uid + peerUin: string; // 群号 或者 发送者QQ号 + sendNickName: string; + sendMemberName?: string; // 发送者群名片 + chatType: ChatType; + sendStatus?: number; // 消息状态,别人发的2是已撤回,自己发的2是已发送 + recallTime: string; // 撤回时间, "0"是没有撤回 + records: RawMessage[]; + elements: { + elementId: string; + elementType: ElementType; + replyElement: { + sourceMsgIdInRecords: string; + senderUid: string; // 原消息发送者QQ号 + sourceMsgIsIncPic: boolean; // 原消息是否有图片 + sourceMsgText: string; + replayMsgSeq: string; // 源消息的msgSeq,可以通过这个找到源消息的msgId + }; + textElement: { + atType: AtType; + atUid: string; // QQ号 + content: string; + atNtUid: string; // uid号 + }; + picElement: PicElement; + pttElement: PttElement; + arkElement: ArkElement; + grayTipElement: GrayTipElement; + faceElement: FaceElement; + videoElement: VideoElement; + fileElement: FileElement; + marketFaceElement: MarketFaceElement; + inlineKeyboardElement: InlineKeyboardElement; + markdownElement: MarkdownElement; + multiForwardMsgElement: MultiForwardMsgElement; + }[]; +} diff --git a/src/core/entities/notify.ts b/src/core/entities/notify.ts new file mode 100644 index 00000000..6041eab7 --- /dev/null +++ b/src/core/entities/notify.ts @@ -0,0 +1,116 @@ +export enum GroupNotifyTypes { + INVITE_ME = 1, + INVITED_JOIN = 4, // 有人接受了邀请入群 + JOIN_REQUEST = 7, + ADMIN_SET = 8, + KICK_MEMBER = 9, + MEMBER_EXIT = 11, // 主动退出 + ADMIN_UNSET = 12, + ADMIN_UNSET_OTHER = 13, // 其他人取消管理员 +} + +export interface GroupNotifies { + doubt: boolean; + nextStartSeq: string; + notifies: GroupNotify[]; +} + +export enum GroupNotifyStatus { + IGNORE = 0, + WAIT_HANDLE = 1, + APPROVE = 2, + REJECT = 3 +} + +export interface GroupNotify { + time: number; // 自己添加的字段,时间戳,毫秒, 用于判断收到短时间内收到重复的notify + seq: string; // 唯一标识符,转成数字再除以1000应该就是时间戳? + type: GroupNotifyTypes; + status: GroupNotifyStatus; // 0是已忽略?,1是未处理,2是已同意 + group: { groupCode: string; groupName: string }; + user1: { uid: string; nickName: string }; // 被设置管理员的人 + user2: { uid: string; nickName: string }; // 操作者 + actionUser: { uid: string; nickName: string }; //未知 + actionTime: string; + invitationExt: { + srcType: number; // 0?未知 + groupCode: string; waitStatus: number + }; + postscript: string; // 加群用户填写的验证信息 + repeatSeqs: []; + warningTips: string +} + +export enum GroupRequestOperateTypes { + approve = 1, + reject = 2 +} +export enum BuddyReqType { + KMEINITIATOR, + KPEERINITIATOR, + KMEAGREED, + KMEAGREEDANDADDED, + KPEERAGREED, + KPEERAGREEDANDADDED, + KPEERREFUSED, + KMEREFUSED, + KMEIGNORED, + KMEAGREEANYONE, + KMESETQUESTION, + KMEAGREEANDADDFAILED, + KMSGINFO, + KMEINITIATORWAITPEERCONFIRM +} +export interface FriendRequest { + isInitiator?: boolean; + isDecide: boolean; + friendUid: string; + reqType: BuddyReqType, + reqTime: string; // 时间戳;秒 + extWords: string; // 申请人填写的验证消息 + isUnread: boolean; + friendNick: string; + sourceId: number; + groupCode: string +} + +export interface FriendRequestNotify { + unreadNums: number; + buddyReqs: FriendRequest[]; +} +export enum MemberExtSourceType { + DEFAULTTYPE = 0, + TITLETYPE = 1, + NEWGROUPTYPE = 2, +} +export interface GroupExtParam { + groupCode: string + seq: string + beginUin: string + dataTime: string + uinList: Array + uinNum: string + groupType: string + richCardNameVer: string + sourceType: MemberExtSourceType + memberExtFilter: { + memberLevelInfoUin: number + memberLevelInfoPoint: number + memberLevelInfoActiveDay: number + memberLevelInfoLevel: number + memberLevelInfoName: number + levelName: number + dataTime: number + userShowFlag: number + sysShowFlag: number + timeToUpdate: number + nickName: number + specialTitle: number + levelNameNew: number + userShowFlagNew: number + msgNeedField: number + cmdUinFlagExt3Grocery: number + memberIcon: number + memberInfoSeq: number + } +} \ No newline at end of file diff --git a/src/core/entities/user.ts b/src/core/entities/user.ts new file mode 100644 index 00000000..f80c128b --- /dev/null +++ b/src/core/entities/user.ts @@ -0,0 +1,347 @@ +export enum Sex { + male = 1, + female = 2, + unknown = 255, +} +export interface BuddyCategoryType { + categoryId: number; + categroyName: string; + categroyMbCount: number; + buddyList: User[]; +} +export interface CoreInfo { + uid: string; + uin: string; + nick: string; + remark: string; +} + +export interface BaseInfo { + qid: string; + longNick: string; + birthday_year: number; + birthday_month: number; + birthday_day: number; + age: number; + sex: number; + eMail: string; + phoneNum: string; + categoryId: number; + richTime: number; + richBuffer: string; +} + +interface MusicInfo { + buf: string; +} + +interface VideoBizInfo { + cid: string; + tvUrl: string; + synchType: string; +} + +interface VideoInfo { + name: string; +} + +interface ExtOnlineBusinessInfo { + buf: string; + customStatus: any; + videoBizInfo: VideoBizInfo; + videoInfo: VideoInfo; +} + +interface ExtBuffer { + buf: string; +} + +interface UserStatus { + uid: string; + uin: string; + status: number; + extStatus: number; + batteryStatus: number; + termType: number; + netType: number; + iconType: number; + customStatus: any; + setTime: string; + specialFlag: number; + abiFlag: number; + eNetworkType: number; + showName: string; + termDesc: string; + musicInfo: MusicInfo; + extOnlineBusinessInfo: ExtOnlineBusinessInfo; + extBuffer: ExtBuffer; +} + +interface PrivilegeIcon { + jumpUrl: string; + openIconList: any[]; + closeIconList: any[]; +} + +interface VasInfo { + vipFlag: boolean; + yearVipFlag: boolean; + svipFlag: boolean; + vipLevel: number; + bigClub: boolean; + bigClubLevel: number; + nameplateVipType: number; + grayNameplateFlag: number; + superVipTemplateId: number; + diyFontId: number; + pendantId: number; + pendantDiyId: number; + faceId: number; + vipFont: number; + vipFontType: number; + magicFont: number; + fontEffect: number; + newLoverDiamondFlag: number; + extendNameplateId: number; + diyNameplateIDs: any[]; + vipStartFlag: number; + vipDataFlag: number; + gameNameplateId: string; + gameLastLoginTime: string; + gameRank: number; + gameIconShowFlag: boolean; + gameCardId: string; + vipNameColorId: string; + privilegeIcon: PrivilegeIcon; +} + +interface RelationFlags { + topTime: string; + isBlock: boolean; + isMsgDisturb: boolean; + isSpecialCareOpen: boolean; + isSpecialCareZone: boolean; + ringId: string; + isBlocked: boolean; + recommendImgFlag: number; + disableEmojiShortCuts: number; + qidianMasterFlag: number; + qidianCrewFlag: number; + qidianCrewFlag2: number; + isHideQQLevel: number; + isHidePrivilegeIcon: number; +} + + +interface CommonExt { + constellation: number; + shengXiao: number; + kBloodType: number; + homeTown: string; + makeFriendCareer: number; + pos: string; + college: string; + country: string; + province: string; + city: string; + postCode: string; + address: string; + regTime: number; + interest: string; + labels: any[]; + qqLevel: QQLevel; +} + +interface Pic { + picId: string; + picTime: number; + picUrlMap: Record; +} + +interface PhotoWall { + picList: Pic[]; +} + +export interface SimpleInfo { + uid?: string; + uin?: string; + coreInfo: CoreInfo; + baseInfo: BaseInfo; + status: UserStatus | null; + vasInfo: VasInfo | null; + relationFlags: RelationFlags | null; + otherFlags: any | null; + intimate: any | null; +} +export interface FriendV2 extends SimpleInfo { + categoryId?: number; + categroyName?: string; +} +export interface UserDetailInfoListenerArg { + uid: string; + uin: string; + simpleInfo: SimpleInfo; + commonExt: CommonExt; + photoWall: PhotoWall; +} +export interface ModifyProfileParams { + nick: string, + longNick: string, + sex: Sex, + birthday: { birthday_year: string, birthday_month: string, birthday_day: string }, + location: any//undefined +} + +export interface BuddyProfileLikeReq { + friendUids: string[]; + basic: number; + vote: number; + favorite: number; + userProfile: number; + type: number; + start: number; + limit: number; +} +export interface QQLevel { + crownNum: number; + sunNum: number; + moonNum: number; + starNum: number +} +export interface User { + uid: string; // 加密的字符串 + uin: string; // QQ号 + nick: string; + avatarUrl?: string; + longNick?: string; // 签名 + remark?: string; + sex?: Sex; + qqLevel?: QQLevel; + qid?: string + birthday_year?: number; + birthday_month?: number; + birthday_day?: number; + topTime?: string; + constellation?: number; + shengXiao?: number; + kBloodType?: number; + homeTown?: string; //"0-0-0"; + makeFriendCareer?: number; + pos?: string; + eMail?: string + phoneNum?: string; + college?: string; + country?: string; + province?: string; + city?: string; + postCode?: string; + address?: string; + isBlock?: boolean; + isSpecialCareOpen?: boolean; + isSpecialCareZone?: boolean; + ringId?: string; + regTime?: number; + interest?: string; + labels?: string[]; + isHideQQLevel?: number; + privilegeIcon?: { + jumpUrl: string; + openIconList: unknown[]; + closeIconList: unknown[] + }; + photoWall?: { + picList: unknown[] + }; + vipFlag?: boolean; + yearVipFlag?: boolean; + svipFlag?: boolean; + vipLevel?: number; + status?: number; + qidianMasterFlag?: number; + qidianCrewFlag?: number; + qidianCrewFlag2?: number; + extStatus?: number; + recommendImgFlag?: number; + disableEmojiShortCuts?: number; + pendantId?: string; +} + +export interface SelfInfo extends User { + online?: boolean; +} + +export interface Friend extends User { } + +export enum BizKey { + KPRIVILEGEICON, + KPHOTOWALL +} +export interface UserDetailInfoByUinV2 { + result: number, + errMsg: string, + detail: { + uid: string, + uin: string, + simpleInfo: SimpleInfo, + commonExt: CommonExt, + photoWall: null + } +} +export interface UserDetailInfoByUin { + result: number, + errMsg: string, + info: { + uid: string,//这个没办法用 + qid: string, + uin: string, + nick: string, + remark: string, + longNick: string, + avatarUrl: string, + birthday_year: number, + birthday_month: number, + birthday_day: number, + sex: number,//0 + topTime: string, + constellation: number, + shengXiao: number, + kBloodType: number, + homeTown: string, + makeFriendCareer: number, + pos: string, + eMail: string, + phoneNum: string, + college: string, + country: string, + province: string, + city: string, + postCode: string, + address: string, + isBlock: boolean, + isSpecialCareOpen: boolean, + isSpecialCareZone: boolean, + ringId: string, + regTime: number, + interest: string, + termType: number, + labels: any[], + qqLevel: { crownNum: number, sunNum: number, moonNum: number, starNum: number }, + isHideQQLevel: number, + privilegeIcon: { jumpUrl: string, openIconList: any[], closeIconList: any[] }, + isHidePrivilegeIcon: number, + photoWall: { picList: any[] }, + vipFlag: boolean, + yearVipFlag: boolean, + svipFlag: boolean, + vipLevel: number, + status: number, + qidianMasterFlag: number, + qidianCrewFlag: number, + qidianCrewFlag2: number, + extStatus: number, + recommendImgFlag: number, + disableEmojiShortCuts: number, + pendantId: string, + vipNameColorId: string + } +} \ No newline at end of file diff --git a/src/core/external/face_config.json b/src/core/external/face_config.json new file mode 100644 index 00000000..84bb8fec --- /dev/null +++ b/src/core/external/face_config.json @@ -0,0 +1,3665 @@ +{ + "sysface": [ + { + "QSid": "392", + "QDes": "/龙年快乐", + "IQLid": "392", + "AQLid": "392", + "EMCode": "10392", + "AniStickerType": 3, + "AniStickerPackId": "1", + "AniStickerId": "38" + }, + { + "QSid": "393", + "QDes": "/新年中龙", + "IQLid": "393", + "AQLid": "393", + "EMCode": "10393", + "QHide": "1", + "AniStickerType": 3, + "AniStickerPackId": "1", + "AniStickerId": "39" + }, + { + "QSid": "364", + "QDes": "/超级赞", + "IQLid": "364", + "AQLid": "364", + "EMCode": "10364", + "QHide": "1", + "AniStickerType": 1, + "AniStickerId": "1", + "AniStickerPackId": "2", + "AniStickerPackName": "汪汪" + }, + { + "QSid": "366", + "QDes": "/芒狗", + "IQLid": "366", + "AQLid": "366", + "EMCode": "10366", + "QHide": "1", + "AniStickerType": 1, + "AniStickerId": "2", + "AniStickerPackId": "2", + "AniStickerPackName": "汪汪" + }, + { + "QSid": "362", + "QDes": "/好兄弟", + "IQLid": "362", + "AQLid": "362", + "EMCode": "10362", + "QHide": "1", + "AniStickerType": 1, + "AniStickerId": "3", + "AniStickerPackId": "2", + "AniStickerPackName": "汪汪" + }, + { + "QSid": "397", + "QDes": "/抛媚眼", + "IQLid": "397", + "AQLid": "397", + "EMCode": "10397", + "QHide": "1", + "AniStickerType": 1, + "AniStickerId": "4", + "AniStickerPackId": "2", + "AniStickerPackName": "汪汪" + }, + { + "QSid": "396", + "QDes": "/狼狗", + "IQLid": "396", + "AQLid": "396", + "EMCode": "10396", + "QHide": "1", + "AniStickerType": 1, + "AniStickerId": "5", + "AniStickerPackId": "2", + "AniStickerPackName": "汪汪" + }, + { + "QSid": "360", + "QDes": "/亲亲", + "IQLid": "360", + "AQLid": "360", + "EMCode": "10360", + "QHide": "1", + "AniStickerType": 1, + "AniStickerId": "6", + "AniStickerPackId": "2", + "AniStickerPackName": "汪汪" + }, + { + "QSid": "361", + "QDes": "/狗狗笑哭", + "IQLid": "361", + "AQLid": "361", + "EMCode": "10361", + "QHide": "1", + "AniStickerType": 1, + "AniStickerId": "7", + "AniStickerPackId": "2", + "AniStickerPackName": "汪汪" + }, + { + "QSid": "363", + "QDes": "/狗狗可怜", + "IQLid": "363", + "AQLid": "363", + "EMCode": "10363", + "QHide": "1", + "AniStickerType": 1, + "AniStickerId": "8", + "AniStickerPackId": "2", + "AniStickerPackName": "汪汪" + }, + { + "QSid": "365", + "QDes": "/狗狗生气", + "IQLid": "365", + "AQLid": "365", + "EMCode": "10365", + "QHide": "1", + "AniStickerType": 1, + "AniStickerId": "9", + "AniStickerPackId": "2", + "AniStickerPackName": "汪汪" + }, + { + "QSid": "367", + "QDes": "/狗狗疑问", + "IQLid": "367", + "AQLid": "367", + "EMCode": "10367", + "QHide": "1", + "AniStickerType": 1, + "AniStickerId": "10", + "AniStickerPackId": "2", + "AniStickerPackName": "汪汪" + }, + { + "QSid": "399", + "QDes": "/tui", + "IQLid": "399", + "AQLid": "399", + "EMCode": "10399", + "QHide": "1", + "AniStickerType": 1, + "AniStickerId": "1", + "AniStickerPackId": "6", + "AniStickerPackName": "噗噗星人" + }, + { + "QSid": "398", + "QDes": "/超级ok", + "IQLid": "398", + "AQLid": "398", + "EMCode": "10398", + "QHide": "1", + "AniStickerType": 1, + "AniStickerId": "2", + "AniStickerPackId": "6", + "AniStickerPackName": "噗噗星人" + }, + { + "QSid": "373", + "QDes": "/忙", + "IQLid": "373", + "AQLid": "373", + "EMCode": "10373", + "QHide": "1", + "AniStickerType": 1, + "AniStickerId": "3", + "AniStickerPackId": "6", + "AniStickerPackName": "噗噗星人" + }, + { + "QSid": "370", + "QDes": "/祝贺", + "IQLid": "370", + "AQLid": "370", + "EMCode": "10370", + "QHide": "1", + "AniStickerType": 1, + "AniStickerId": "4", + "AniStickerPackId": "6", + "AniStickerPackName": "噗噗星人" + }, + { + "QSid": "375", + "QDes": "/超级鼓掌", + "IQLid": "375", + "AQLid": "375", + "EMCode": "10375", + "QHide": "1", + "AniStickerType": 1, + "AniStickerId": "5", + "AniStickerPackId": "6", + "AniStickerPackName": "噗噗星人" + }, + { + "QSid": "368", + "QDes": "/奥特笑哭", + "IQLid": "368", + "AQLid": "368", + "EMCode": "10368", + "QHide": "1", + "AniStickerType": 1, + "AniStickerId": "6", + "AniStickerPackId": "6", + "AniStickerPackName": "噗噗星人" + }, + { + "QSid": "369", + "QDes": "/彩虹", + "IQLid": "369", + "AQLid": "369", + "EMCode": "10369", + "QHide": "1", + "AniStickerType": 1, + "AniStickerId": "7", + "AniStickerPackId": "6", + "AniStickerPackName": "噗噗星人" + }, + { + "QSid": "371", + "QDes": "/冒泡", + "IQLid": "371", + "AQLid": "371", + "EMCode": "10371", + "QHide": "1", + "AniStickerType": 1, + "AniStickerId": "8", + "AniStickerPackId": "6", + "AniStickerPackName": "噗噗星人" + }, + { + "QSid": "372", + "QDes": "/气呼呼", + "IQLid": "372", + "AQLid": "372", + "EMCode": "10372", + "QHide": "1", + "AniStickerType": 1, + "AniStickerId": "9", + "AniStickerPackId": "6", + "AniStickerPackName": "噗噗星人" + }, + { + "QSid": "374", + "QDes": "/波波流泪", + "IQLid": "374", + "AQLid": "374", + "EMCode": "10374", + "QHide": "1", + "AniStickerType": 1, + "AniStickerId": "10", + "AniStickerPackId": "6", + "AniStickerPackName": "噗噗星人" + }, + { + "QSid": "382", + "QDes": "/emo", + "IQLid": "382", + "AQLid": "382", + "EMCode": "10382", + "QHide": "1", + "AniStickerType": 1, + "AniStickerId": "1", + "AniStickerPackId": "5", + "AniStickerPackName": "企鹅" + }, + { + "QSid": "383", + "QDes": "/企鹅爱心", + "IQLid": "383", + "AQLid": "383", + "EMCode": "10383", + "QHide": "1", + "AniStickerType": 1, + "AniStickerId": "2", + "AniStickerPackId": "5", + "AniStickerPackName": "企鹅" + }, + { + "QSid": "401", + "QDes": "/超级转圈", + "IQLid": "401", + "AQLid": "401", + "EMCode": "10401", + "QHide": "1", + "AniStickerType": 1, + "AniStickerId": "3", + "AniStickerPackId": "5", + "AniStickerPackName": "企鹅" + }, + { + "QSid": "400", + "QDes": "/快乐", + "IQLid": "400", + "AQLid": "400", + "EMCode": "10400", + "QHide": "1", + "AniStickerType": 1, + "AniStickerId": "4", + "AniStickerPackId": "5", + "AniStickerPackName": "企鹅" + }, + { + "QSid": "380", + "QDes": "/真棒", + "IQLid": "380", + "AQLid": "380", + "EMCode": "10380", + "QHide": "1", + "AniStickerType": 1, + "AniStickerId": "5", + "AniStickerPackId": "5", + "AniStickerPackName": "企鹅" + }, + { + "QSid": "381", + "QDes": "/路过", + "IQLid": "381", + "AQLid": "381", + "EMCode": "10381", + "QHide": "1", + "AniStickerType": 1, + "AniStickerId": "6", + "AniStickerPackId": "5", + "AniStickerPackName": "企鹅" + }, + { + "QSid": "379", + "QDes": "/企鹅流泪", + "IQLid": "379", + "AQLid": "379", + "EMCode": "10379", + "QHide": "1", + "AniStickerType": 1, + "AniStickerId": "7", + "AniStickerPackId": "5", + "AniStickerPackName": "企鹅" + }, + { + "QSid": "376", + "QDes": "/跺脚", + "IQLid": "376", + "AQLid": "376", + "EMCode": "10376", + "QHide": "1", + "AniStickerType": 1, + "AniStickerId": "8", + "AniStickerPackId": "5", + "AniStickerPackName": "企鹅" + }, + { + "QSid": "378", + "QDes": "/企鹅笑哭", + "IQLid": "378", + "AQLid": "378", + "EMCode": "10378", + "QHide": "1", + "AniStickerType": 1, + "AniStickerId": "9", + "AniStickerPackId": "5", + "AniStickerPackName": "企鹅" + }, + { + "QSid": "377", + "QDes": "/嗨", + "IQLid": "377", + "AQLid": "377", + "EMCode": "10377", + "QHide": "1", + "AniStickerType": 1, + "AniStickerId": "10", + "AniStickerPackId": "5", + "AniStickerPackName": "企鹅" + }, + { + "QSid": "403", + "QDes": "/出去玩", + "IQLid": "403", + "AQLid": "403", + "EMCode": "10403", + "QHide": "1", + "AniStickerType": 1, + "AniStickerId": "1", + "AniStickerPackId": "4", + "AniStickerPackName": "QQ黄脸" + }, + { + "QSid": "402", + "QDes": "/别说话", + "IQLid": "402", + "AQLid": "402", + "EMCode": "10402", + "QHide": "1", + "AniStickerType": 1, + "AniStickerId": "2", + "AniStickerPackId": "4", + "AniStickerPackName": "QQ黄脸" + }, + { + "QSid": "390", + "QDes": "/太头秃", + "IQLid": "390", + "AQLid": "390", + "EMCode": "10390", + "QHide": "1", + "AniStickerType": 1, + "AniStickerId": "3", + "AniStickerPackId": "4", + "AniStickerPackName": "QQ黄脸" + }, + { + "QSid": "391", + "QDes": "/太沧桑", + "IQLid": "391", + "AQLid": "391", + "EMCode": "10391", + "QHide": "1", + "AniStickerType": 1, + "AniStickerId": "4", + "AniStickerPackId": "4", + "AniStickerPackName": "QQ黄脸" + }, + { + "QSid": "388", + "QDes": "/太头疼", + "IQLid": "388", + "AQLid": "388", + "EMCode": "10388", + "QHide": "1", + "AniStickerType": 1, + "AniStickerId": "5", + "AniStickerPackId": "4", + "AniStickerPackName": "QQ黄脸" + }, + { + "QSid": "389", + "QDes": "/太赞了", + "IQLid": "389", + "AQLid": "389", + "EMCode": "10389", + "QHide": "1", + "AniStickerType": 1, + "AniStickerId": "6", + "AniStickerPackId": "4", + "AniStickerPackName": "QQ黄脸" + }, + { + "QSid": "386", + "QDes": "/呜呜呜", + "IQLid": "386", + "AQLid": "386", + "EMCode": "10386", + "QHide": "1", + "AniStickerType": 1, + "AniStickerId": "7", + "AniStickerPackId": "4", + "AniStickerPackName": "QQ黄脸" + }, + { + "QSid": "385", + "QDes": "/太气了", + "IQLid": "385", + "AQLid": "385", + "EMCode": "10385", + "QHide": "1", + "AniStickerType": 1, + "AniStickerId": "8", + "AniStickerPackId": "4", + "AniStickerPackName": "QQ黄脸" + }, + { + "QSid": "384", + "QDes": "/晚安", + "IQLid": "384", + "AQLid": "384", + "EMCode": "10384", + "QHide": "1", + "AniStickerType": 1, + "AniStickerId": "9", + "AniStickerPackId": "4", + "AniStickerPackName": "QQ黄脸" + }, + { + "QSid": "387", + "QDes": "/太好笑", + "IQLid": "387", + "AQLid": "387", + "EMCode": "10387", + "QHide": "1", + "AniStickerType": 1, + "AniStickerId": "10", + "AniStickerPackId": "4", + "AniStickerPackName": "QQ黄脸" + }, + { + "QSid": "413", + "QDes": "/摇起来", + "IQLid": "413", + "AQLid": "413", + "EMCode": "10413", + "QHide": "1", + "AniStickerType": 1, + "AniStickerId": "1", + "AniStickerPackId": "3", + "AniStickerPackName": "喜花妮" + }, + { + "QSid": "405", + "QDes": "/好运来", + "IQLid": "405", + "AQLid": "405", + "EMCode": "10405", + "QHide": "1", + "AniStickerType": 1, + "AniStickerId": "2", + "AniStickerPackId": "3", + "AniStickerPackName": "喜花妮" + }, + { + "QSid": "404", + "QDes": "/闪亮登场", + "IQLid": "404", + "AQLid": "404", + "EMCode": "10404", + "QHide": "1", + "AniStickerType": 1, + "AniStickerId": "3", + "AniStickerPackId": "3", + "AniStickerPackName": "喜花妮" + }, + { + "QSid": "406", + "QDes": "/姐是女王", + "IQLid": "406", + "AQLid": "406", + "EMCode": "10406", + "QHide": "1", + "AniStickerType": 1, + "AniStickerId": "4", + "AniStickerPackId": "3", + "AniStickerPackName": "喜花妮" + }, + { + "QSid": "410", + "QDes": "/么么哒", + "IQLid": "410", + "AQLid": "410", + "EMCode": "10410", + "QHide": "1", + "AniStickerType": 1, + "AniStickerId": "5", + "AniStickerPackId": "3", + "AniStickerPackName": "喜花妮" + }, + { + "QSid": "411", + "QDes": "/一起嗨", + "IQLid": "411", + "AQLid": "411", + "EMCode": "10411", + "QHide": "1", + "AniStickerType": 1, + "AniStickerId": "6", + "AniStickerPackId": "3", + "AniStickerPackName": "喜花妮" + }, + { + "QSid": "407", + "QDes": "/我听听", + "IQLid": "407", + "AQLid": "407", + "EMCode": "10407", + "QHide": "1", + "AniStickerType": 1, + "AniStickerId": "7", + "AniStickerPackId": "3", + "AniStickerPackName": "喜花妮" + }, + { + "QSid": "408", + "QDes": "/臭美", + "IQLid": "408", + "AQLid": "408", + "EMCode": "10408", + "QHide": "1", + "AniStickerType": 1, + "AniStickerId": "8", + "AniStickerPackId": "3", + "AniStickerPackName": "喜花妮" + }, + { + "QSid": "412", + "QDes": "/开心", + "IQLid": "412", + "AQLid": "412", + "EMCode": "10412", + "QHide": "1", + "AniStickerType": 1, + "AniStickerId": "9", + "AniStickerPackId": "3", + "AniStickerPackName": "喜花妮" + }, + { + "QSid": "409", + "QDes": "/送你花花", + "IQLid": "409", + "AQLid": "409", + "EMCode": "10409", + "QHide": "1", + "AniStickerType": 1, + "AniStickerId": "10", + "AniStickerPackId": "3", + "AniStickerPackName": "喜花妮" + }, + { + "QSid": "394", + "QDes": "/新年大龙", + "IQLid": "394", + "AQLid": "394", + "EMCode": "10394", + "QHide": "1", + "AniStickerType": 3, + "AniStickerPackId": "1", + "AniStickerId": "40" + }, + { + "QSid": "14", + "QDes": "/微笑", + "IQLid": "23", + "AQLid": "23", + "EMCode": "100" + }, + { + "QSid": "1", + "QDes": "/撇嘴", + "IQLid": "40", + "AQLid": "40", + "EMCode": "101" + }, + { + "QSid": "2", + "QDes": "/色", + "IQLid": "19", + "AQLid": "19", + "EMCode": "102" + }, + { + "QSid": "3", + "QDes": "/发呆", + "IQLid": "43", + "AQLid": "43", + "EMCode": "103" + }, + { + "QSid": "4", + "QDes": "/得意", + "IQLid": "21", + "AQLid": "21", + "EMCode": "104" + }, + { + "QSid": "6", + "QDes": "/害羞", + "IQLid": "20", + "AQLid": "20", + "EMCode": "106" + }, + { + "QSid": "7", + "QDes": "/闭嘴", + "IQLid": "104", + "AQLid": "106", + "EMCode": "107" + }, + { + "QSid": "8", + "QDes": "/睡", + "IQLid": "35", + "AQLid": "35", + "EMCode": "108" + }, + { + "QSid": "9", + "QDes": "/大哭", + "IQLid": "10", + "AQLid": "10", + "EMCode": "109" + }, + { + "QSid": "5", + "QDes": "/流泪", + "IQLid": "9", + "AQLid": "9", + "EMCode": "105", + "AniStickerType": 1, + "AniStickerPackId": "1", + "AniStickerId": "16" + }, + { + "QSid": "10", + "QDes": "/尴尬", + "IQLid": "25", + "AQLid": "25", + "EMCode": "110" + }, + { + "QSid": "11", + "QDes": "/发怒", + "IQLid": "24", + "AQLid": "24", + "EMCode": "111" + }, + { + "QSid": "12", + "QDes": "/调皮", + "IQLid": "1", + "AQLid": "1", + "EMCode": "112" + }, + { + "QSid": "13", + "QDes": "/呲牙", + "IQLid": "0", + "AQLid": "0", + "EMCode": "113" + }, + { + "QSid": "0", + "QDes": "/惊讶", + "IQLid": "33", + "AQLid": "33", + "EMCode": "114" + }, + { + "QSid": "15", + "QDes": "/难过", + "IQLid": "32", + "AQLid": "32", + "EMCode": "115" + }, + { + "QSid": "16", + "QDes": "/酷", + "IQLid": "12", + "AQLid": "12", + "EMCode": "116" + }, + { + "QSid": "96", + "QDes": "/冷汗", + "IQLid": "27", + "AQLid": "27", + "EMCode": "117" + }, + { + "QSid": "18", + "QDes": "/抓狂", + "IQLid": "13", + "AQLid": "13", + "EMCode": "118" + }, + { + "QSid": "19", + "QDes": "/吐", + "IQLid": "22", + "AQLid": "22", + "EMCode": "119" + }, + { + "QSid": "20", + "QDes": "/偷笑", + "IQLid": "3", + "AQLid": "3", + "EMCode": "120" + }, + { + "QSid": "21", + "QDes": "/可爱", + "IQLid": "18", + "AQLid": "18", + "EMCode": "121" + }, + { + "QSid": "22", + "QDes": "/白眼", + "IQLid": "30", + "AQLid": "30", + "EMCode": "122" + }, + { + "QSid": "23", + "QDes": "/傲慢", + "IQLid": "31", + "AQLid": "31", + "EMCode": "123" + }, + { + "QSid": "24", + "QDes": "/饥饿", + "IQLid": "79", + "AQLid": "81", + "EMCode": "124" + }, + { + "QSid": "25", + "QDes": "/困", + "IQLid": "80", + "AQLid": "82", + "EMCode": "125" + }, + { + "QSid": "26", + "QDes": "/惊恐", + "IQLid": "26", + "AQLid": "26", + "EMCode": "126" + }, + { + "QSid": "27", + "QDes": "/流汗", + "IQLid": "2", + "AQLid": "2", + "EMCode": "127" + }, + { + "QSid": "28", + "QDes": "/憨笑", + "IQLid": "37", + "AQLid": "37", + "EMCode": "128" + }, + { + "QSid": "29", + "QDes": "/悠闲", + "IQLid": "50", + "AQLid": "50", + "EMCode": "129" + }, + { + "QSid": "30", + "QDes": "/奋斗", + "IQLid": "42", + "AQLid": "42", + "EMCode": "130" + }, + { + "QSid": "31", + "QDes": "/咒骂", + "IQLid": "81", + "AQLid": "83", + "EMCode": "131" + }, + { + "QSid": "32", + "QDes": "/疑问", + "IQLid": "34", + "AQLid": "34", + "EMCode": "132" + }, + { + "QSid": "33", + "QDes": "/嘘", + "IQLid": "11", + "AQLid": "11", + "EMCode": "133" + }, + { + "QSid": "34", + "QDes": "/晕", + "IQLid": "49", + "AQLid": "49", + "EMCode": "134" + }, + { + "QSid": "35", + "QDes": "/折磨", + "IQLid": "82", + "AQLid": "84", + "EMCode": "135" + }, + { + "QSid": "36", + "QDes": "/衰", + "IQLid": "39", + "AQLid": "39", + "EMCode": "136" + }, + { + "QSid": "37", + "QDes": "/骷髅", + "isStatic": "1", + "IQLid": "76", + "AQLid": "78", + "EMCode": "137" + }, + { + "QSid": "38", + "QDes": "/敲打", + "IQLid": "5", + "AQLid": "5", + "EMCode": "138" + }, + { + "QSid": "39", + "QDes": "/再见", + "IQLid": "4", + "AQLid": "4", + "EMCode": "139" + }, + { + "QSid": "97", + "QDes": "/擦汗", + "IQLid": "6", + "AQLid": "6", + "EMCode": "140" + }, + { + "QSid": "98", + "QDes": "/抠鼻", + "IQLid": "83", + "AQLid": "85", + "EMCode": "141" + }, + { + "QSid": "99", + "QDes": "/鼓掌", + "IQLid": "84", + "AQLid": "86", + "EMCode": "142" + }, + { + "QSid": "100", + "QDes": "/糗大了", + "IQLid": "85", + "AQLid": "87", + "EMCode": "143" + }, + { + "QSid": "101", + "QDes": "/坏笑", + "IQLid": "46", + "AQLid": "46", + "EMCode": "144" + }, + { + "QSid": "102", + "QDes": "/左哼哼", + "IQLid": "86", + "AQLid": "88", + "EMCode": "145" + }, + { + "QSid": "103", + "QDes": "/右哼哼", + "IQLid": "44", + "AQLid": "44", + "EMCode": "146" + }, + { + "QSid": "104", + "QDes": "/哈欠", + "IQLid": "87", + "AQLid": "89", + "EMCode": "147" + }, + { + "QSid": "105", + "QDes": "/鄙视", + "IQLid": "48", + "AQLid": "48", + "EMCode": "148" + }, + { + "QSid": "106", + "QDes": "/委屈", + "IQLid": "14", + "AQLid": "14", + "EMCode": "149" + }, + { + "QSid": "107", + "QDes": "/快哭了", + "IQLid": "88", + "AQLid": "90", + "EMCode": "150" + }, + { + "QSid": "108", + "QDes": "/阴险", + "IQLid": "41", + "AQLid": "41", + "EMCode": "151" + }, + { + "QSid": "305", + "QDes": "/右亲亲", + "IQLid": "305", + "AQLid": "305", + "EMCode": "10305" + }, + { + "QSid": "109", + "QDes": "/左亲亲", + "IQLid": "36", + "AQLid": "36", + "EMCode": "152" + }, + { + "QSid": "110", + "QDes": "/吓", + "IQLid": "89", + "AQLid": "91", + "EMCode": "153" + }, + { + "QSid": "111", + "QDes": "/可怜", + "IQLid": "51", + "AQLid": "51", + "EMCode": "154" + }, + { + "QSid": "172", + "QDes": "/眨眼睛", + "IQLid": "142", + "AQLid": "164", + "EMCode": "242" + }, + { + "QSid": "182", + "QDes": "/笑哭", + "IQLid": "152", + "AQLid": "174", + "EMCode": "252" + }, + { + "QSid": "179", + "QDes": "/doge", + "IQLid": "149", + "AQLid": "171", + "EMCode": "249" + }, + { + "QSid": "173", + "QDes": "/泪奔", + "IQLid": "143", + "AQLid": "165", + "EMCode": "243" + }, + { + "QSid": "174", + "QDes": "/无奈", + "IQLid": "144", + "AQLid": "166", + "EMCode": "244" + }, + { + "QSid": "212", + "QDes": "/托腮", + "IQLid": "182", + "AQLid": "161", + "EMCode": "282" + }, + { + "QSid": "175", + "QDes": "/卖萌", + "IQLid": "145", + "AQLid": "167", + "EMCode": "245" + }, + { + "QSid": "178", + "QDes": "/斜眼笑", + "IQLid": "148", + "AQLid": "170", + "EMCode": "248" + }, + { + "QSid": "177", + "QDes": "/喷血", + "IQLid": "147", + "AQLid": "169", + "EMCode": "247" + }, + { + "QSid": "176", + "QDes": "/小纠结", + "IQLid": "146", + "AQLid": "168", + "EMCode": "246" + }, + { + "QSid": "183", + "QDes": "/我最美", + "IQLid": "153", + "AQLid": "175", + "EMCode": "253" + }, + { + "QSid": "262", + "QDes": "/脑阔疼", + "IQLid": "262", + "AQLid": "262", + "EMCode": "10262" + }, + { + "QSid": "263", + "QDes": "/沧桑", + "IQLid": "263", + "AQLid": "263", + "EMCode": "10263" + }, + { + "QSid": "264", + "QDes": "/捂脸", + "IQLid": "264", + "AQLid": "264", + "EMCode": "10264" + }, + { + "QSid": "265", + "QDes": "/辣眼睛", + "IQLid": "265", + "AQLid": "265", + "EMCode": "10265" + }, + { + "QSid": "266", + "QDes": "/哦哟", + "IQLid": "266", + "AQLid": "266", + "EMCode": "10266" + }, + { + "QSid": "267", + "QDes": "/头秃", + "IQLid": "267", + "AQLid": "267", + "EMCode": "10267" + }, + { + "QSid": "268", + "QDes": "/问号脸", + "IQLid": "268", + "AQLid": "268", + "EMCode": "10268" + }, + { + "QSid": "269", + "QDes": "/暗中观察", + "IQLid": "269", + "AQLid": "269", + "EMCode": "10269" + }, + { + "QSid": "270", + "QDes": "/emm", + "IQLid": "270", + "AQLid": "270", + "EMCode": "10270" + }, + { + "QSid": "271", + "QDes": "/吃瓜", + "IQLid": "271", + "AQLid": "271", + "EMCode": "10271" + }, + { + "QSid": "272", + "QDes": "/呵呵哒", + "IQLid": "272", + "AQLid": "272", + "EMCode": "10272" + }, + { + "QSid": "277", + "QDes": "/汪汪", + "IQLid": "277", + "AQLid": "277", + "EMCode": "10277" + }, + { + "QSid": "307", + "QDes": "/喵喵", + "IQLid": "307", + "AQLid": "307", + "EMCode": "10307" + }, + { + "QSid": "306", + "QDes": "/牛气冲天", + "isStatic": "1", + "IQLid": "306", + "AQLid": "306", + "EMCode": "10306" + }, + { + "QSid": "281", + "QDes": "/无眼笑", + "IQLid": "281", + "AQLid": "281", + "EMCode": "10281" + }, + { + "QSid": "282", + "QDes": "/敬礼", + "IQLid": "282", + "AQLid": "282", + "EMCode": "10282" + }, + { + "QSid": "283", + "QDes": "/狂笑", + "IQLid": "283", + "AQLid": "283", + "EMCode": "10283" + }, + { + "QSid": "284", + "QDes": "/面无表情", + "IQLid": "284", + "AQLid": "284", + "EMCode": "10284" + }, + { + "QSid": "285", + "QDes": "/摸鱼", + "IQLid": "285", + "AQLid": "285", + "EMCode": "10285" + }, + { + "QSid": "293", + "QDes": "/摸锦鲤", + "IQLid": "293", + "AQLid": "293", + "EMCode": "10293" + }, + { + "QSid": "286", + "QDes": "/魔鬼笑", + "IQLid": "286", + "AQLid": "286", + "EMCode": "10286" + }, + { + "QSid": "287", + "QDes": "/哦", + "IQLid": "287", + "AQLid": "287", + "EMCode": "10287" + }, + { + "QSid": "289", + "QDes": "/睁眼", + "IQLid": "289", + "AQLid": "289", + "EMCode": "10289" + }, + { + "QSid": "294", + "QDes": "/期待", + "IQLid": "294", + "AQLid": "294", + "EMCode": "10294" + }, + { + "QSid": "297", + "QDes": "/拜谢", + "IQLid": "297", + "AQLid": "297", + "EMCode": "10297" + }, + { + "QSid": "298", + "QDes": "/元宝", + "IQLid": "298", + "AQLid": "298", + "EMCode": "10298" + }, + { + "QSid": "299", + "QDes": "/牛啊", + "IQLid": "299", + "AQLid": "299", + "EMCode": "10299" + }, + { + "QSid": "300", + "QDes": "/胖三斤", + "IQLid": "300", + "AQLid": "300", + "EMCode": "10300" + }, + { + "QSid": "323", + "QDes": "/嫌弃", + "IQLid": "323", + "AQLid": "323", + "EMCode": "10323" + }, + { + "QSid": "332", + "QDes": "/举牌牌", + "IQLid": "332", + "AQLid": "332", + "EMCode": "10332" + }, + { + "QSid": "336", + "QDes": "/豹富", + "IQLid": "336", + "AQLid": "336", + "EMCode": "10336" + }, + { + "QSid": "353", + "QDes": "/拜托", + "IQLid": "353", + "AQLid": "353", + "EMCode": "10353" + }, + { + "QSid": "355", + "QDes": "/耶", + "IQLid": "355", + "AQLid": "355", + "EMCode": "10355" + }, + { + "QSid": "356", + "QDes": "/666", + "IQLid": "356", + "AQLid": "356", + "EMCode": "10356" + }, + { + "QSid": "354", + "QDes": "/尊嘟假嘟", + "IQLid": "354", + "AQLid": "354", + "EMCode": "10354" + }, + { + "QSid": "352", + "QDes": "/咦", + "IQLid": "352", + "AQLid": "352", + "EMCode": "10352" + }, + { + "QSid": "357", + "QDes": "/裂开", + "IQLid": "357", + "AQLid": "357", + "EMCode": "10357" + }, + { + "QSid": "334", + "QDes": "/虎虎生威", + "IQLid": "334", + "AQLid": "334", + "EMCode": "10334" + }, + { + "QSid": "347", + "QDes": "/大展宏兔", + "IQLid": "347", + "AQLid": "347", + "EMCode": "10347" + }, + { + "QSid": "303", + "QDes": "/右拜年", + "IQLid": "303", + "AQLid": "303", + "EMCode": "10303" + }, + { + "QSid": "302", + "QDes": "/左拜年", + "IQLid": "302", + "AQLid": "302", + "EMCode": "10302" + }, + { + "QSid": "295", + "QDes": "/拿到红包", + "IQLid": "295", + "AQLid": "295", + "EMCode": "10295" + }, + { + "QSid": "311", + "QDes": "/打call", + "IQLid": "311", + "AQLid": "311", + "EMCode": "10311", + "AniStickerType": 1, + "AniStickerPackId": "1", + "AniStickerId": "1" + }, + { + "QSid": "312", + "QDes": "/变形", + "IQLid": "312", + "AQLid": "312", + "EMCode": "10312", + "AniStickerType": 1, + "AniStickerPackId": "1", + "AniStickerId": "2" + }, + { + "QSid": "314", + "QDes": "/仔细分析", + "IQLid": "314", + "AQLid": "314", + "EMCode": "10314", + "AniStickerType": 1, + "AniStickerPackId": "1", + "AniStickerId": "4" + }, + { + "QSid": "317", + "QDes": "/菜汪", + "IQLid": "317", + "AQLid": "317", + "EMCode": "10317", + "AniStickerType": 1, + "AniStickerPackId": "1", + "AniStickerId": "7" + }, + { + "QSid": "318", + "QDes": "/崇拜", + "IQLid": "318", + "AQLid": "318", + "EMCode": "10318", + "AniStickerType": 1, + "AniStickerPackId": "1", + "AniStickerId": "8" + }, + { + "QSid": "319", + "QDes": "/比心", + "IQLid": "319", + "AQLid": "319", + "EMCode": "10319", + "AniStickerType": 1, + "AniStickerPackId": "1", + "AniStickerId": "9" + }, + { + "QSid": "320", + "QDes": "/庆祝", + "IQLid": "320", + "AQLid": "320", + "EMCode": "10320", + "AniStickerType": 1, + "AniStickerPackId": "1", + "AniStickerId": "10" + }, + { + "QSid": "324", + "QDes": "/吃糖", + "IQLid": "324", + "AQLid": "324", + "EMCode": "10324", + "AniStickerType": 1, + "AniStickerPackId": "1", + "AniStickerId": "12" + }, + { + "QSid": "325", + "QDes": "/惊吓", + "IQLid": "325", + "AQLid": "325", + "EMCode": "10325", + "AniStickerType": 1, + "AniStickerPackId": "1", + "AniStickerId": "14" + }, + { + "QSid": "337", + "QDes": "/花朵脸", + "IQLid": "337", + "AQLid": "337", + "EMCode": "10337", + "AniStickerType": 1, + "AniStickerPackId": "1", + "AniStickerId": "22" + }, + { + "QSid": "338", + "QDes": "/我想开了", + "IQLid": "338", + "AQLid": "338", + "EMCode": "10338", + "AniStickerType": 1, + "AniStickerPackId": "1", + "AniStickerId": "20" + }, + { + "QSid": "339", + "QDes": "/舔屏", + "IQLid": "339", + "AQLid": "339", + "EMCode": "10339", + "AniStickerType": 1, + "AniStickerPackId": "1", + "AniStickerId": "21" + }, + { + "QSid": "341", + "QDes": "/打招呼", + "IQLid": "341", + "AQLid": "341", + "EMCode": "10341", + "AniStickerType": 1, + "AniStickerPackId": "1", + "AniStickerId": "24" + }, + { + "QSid": "342", + "QDes": "/酸Q", + "IQLid": "342", + "AQLid": "342", + "EMCode": "10342", + "AniStickerType": 1, + "AniStickerPackId": "1", + "AniStickerId": "26" + }, + { + "QSid": "343", + "QDes": "/我方了", + "IQLid": "343", + "AQLid": "343", + "EMCode": "10343", + "AniStickerType": 1, + "AniStickerPackId": "1", + "AniStickerId": "27" + }, + { + "QSid": "344", + "QDes": "/大怨种", + "IQLid": "344", + "AQLid": "344", + "EMCode": "10344", + "AniStickerType": 1, + "AniStickerPackId": "1", + "AniStickerId": "28" + }, + { + "QSid": "345", + "QDes": "/红包多多", + "IQLid": "345", + "AQLid": "345", + "EMCode": "10345", + "AniStickerType": 1, + "AniStickerPackId": "1", + "AniStickerId": "29" + }, + { + "QSid": "346", + "QDes": "/你真棒棒", + "IQLid": "346", + "AQLid": "346", + "EMCode": "10346", + "AniStickerType": 1, + "AniStickerPackId": "1", + "AniStickerId": "25" + }, + { + "QSid": "181", + "QDes": "/戳一戳", + "IQLid": "151", + "AQLid": "173", + "EMCode": "251", + "AniStickerType": 1, + "AniStickerPackId": "1", + "AniStickerId": "37" + }, + { + "QSid": "74", + "QDes": "/太阳", + "isStatic": "1", + "IQLid": "73", + "AQLid": "75", + "EMCode": "176", + "AniStickerType": 1, + "AniStickerPackId": "1", + "AniStickerId": "35" + }, + { + "QSid": "75", + "QDes": "/月亮", + "isStatic": "1", + "IQLid": "67", + "AQLid": "68", + "EMCode": "175", + "AniStickerType": 1, + "AniStickerPackId": "1", + "AniStickerId": "36" + }, + { + "QSid": "351", + "QDes": "/敲敲", + "IQLid": "351", + "AQLid": "351", + "EMCode": "10351", + "AniStickerType": 1, + "AniStickerPackId": "1", + "AniStickerId": "30" + }, + { + "QSid": "349", + "QDes": "/坚强", + "IQLid": "349", + "AQLid": "349", + "EMCode": "10349", + "AniStickerType": 1, + "AniStickerPackId": "1", + "AniStickerId": "32" + }, + { + "QSid": "350", + "QDes": "/贴贴", + "IQLid": "350", + "AQLid": "350", + "EMCode": "10350", + "AniStickerType": 1, + "AniStickerPackId": "1", + "AniStickerId": "31" + }, + { + "QSid": "395", + "QDes": "/略略略", + "IQLid": "395", + "AQLid": "395", + "EMCode": "10395", + "AniStickerType": 1, + "AniStickerPackId": "1", + "AniStickerId": "41" + }, + { + "QSid": "114", + "QDes": "/篮球", + "IQLid": "90", + "AQLid": "92", + "EMCode": "158", + "AniStickerType": 2, + "AniStickerPackId": "1", + "AniStickerId": "13" + }, + { + "QSid": "358", + "QDes": "/骰子", + "IQLid": "358", + "AQLid": "358", + "QHide": "1", + "EMCode": "10358", + "AniStickerType": 2, + "AniStickerPackId": "1", + "AniStickerId": "33" + }, + { + "QSid": "359", + "QDes": "/包剪锤", + "IQLid": "359", + "AQLid": "359", + "QHide": "1", + "EMCode": "10359", + "AniStickerType": 2, + "AniStickerPackId": "1", + "AniStickerId": "34" + }, + { + "QSid": "326", + "QDes": "/生气", + "IQLid": "326", + "AQLid": "326", + "EMCode": "10326", + "AniStickerType": 1, + "AniStickerPackId": "1", + "AniStickerId": "15" + }, + { + "QSid": "53", + "QDes": "/蛋糕", + "IQLid": "59", + "AQLid": "59", + "EMCode": "168", + "AniStickerType": 1, + "AniStickerPackId": "1", + "AniStickerId": "17" + }, + { + "QSid": "49", + "QDes": "/拥抱", + "IQLid": "45", + "AQLid": "45", + "EMCode": "178" + }, + { + "QSid": "66", + "QDes": "/爱心", + "IQLid": "28", + "AQLid": "28", + "EMCode": "166" + }, + { + "QSid": "63", + "QDes": "/玫瑰", + "IQLid": "8", + "AQLid": "8", + "EMCode": "163" + }, + { + "QSid": "64", + "QDes": "/凋谢", + "IQLid": "57", + "AQLid": "57", + "EMCode": "164" + }, + { + "QSid": "187", + "QDes": "/幽灵", + "IQLid": "157", + "AQLid": "179", + "EMCode": "257" + }, + { + "QSid": "146", + "QDes": "/爆筋", + "IQLid": "116", + "AQLid": "118", + "EMCode": "121011" + }, + { + "QSid": "116", + "QDes": "/示爱", + "IQLid": "29", + "AQLid": "29", + "EMCode": "165" + }, + { + "QSid": "67", + "QDes": "/心碎", + "IQLid": "72", + "AQLid": "74", + "EMCode": "167" + }, + { + "QSid": "60", + "QDes": "/咖啡", + "IQLid": "66", + "AQLid": "66", + "EMCode": "160" + }, + { + "QSid": "185", + "QDes": "/羊驼", + "IQLid": "155", + "AQLid": "177", + "EMCode": "255" + }, + { + "QSid": "137", + "QDes": "/鞭炮", + "isStatic": "1", + "IQLid": "107", + "AQLid": "109", + "EMCode": "121002", + "AniStickerType": 1, + "AniStickerPackId": "1", + "AniStickerId": "18" + }, + { + "QSid": "333", + "QDes": "/烟花", + "isStatic": "1", + "IQLid": "333", + "AQLid": "333", + "EMCode": "10333", + "AniStickerType": 1, + "AniStickerPackId": "1", + "AniStickerId": "19" + }, + { + "QSid": "76", + "QDes": "/赞", + "IQLid": "52", + "AQLid": "52", + "EMCode": "179" + }, + { + "QSid": "124", + "QDes": "/OK", + "IQLid": "64", + "AQLid": "64", + "EMCode": "189" + }, + { + "QSid": "118", + "QDes": "/抱拳", + "IQLid": "56", + "AQLid": "56", + "EMCode": "183" + }, + { + "QSid": "78", + "QDes": "/握手", + "IQLid": "54", + "AQLid": "54", + "EMCode": "181" + }, + { + "QSid": "119", + "QDes": "/勾引", + "IQLid": "63", + "AQLid": "63", + "EMCode": "184" + }, + { + "QSid": "79", + "QDes": "/胜利", + "IQLid": "55", + "AQLid": "55", + "EMCode": "182" + }, + { + "QSid": "120", + "QDes": "/拳头", + "IQLid": "71", + "AQLid": "73", + "EMCode": "185" + }, + { + "QSid": "121", + "QDes": "/差劲", + "IQLid": "70", + "AQLid": "72", + "EMCode": "186" + }, + { + "QSid": "77", + "QDes": "/踩", + "IQLid": "53", + "AQLid": "53", + "EMCode": "180" + }, + { + "QSid": "123", + "QDes": "/NO", + "IQLid": "92", + "AQLid": "94", + "EMCode": "188" + }, + { + "QSid": "201", + "QDes": "/点赞", + "IQLid": "171", + "AQLid": "150", + "EMCode": "271" + }, + { + "QSid": "273", + "QDes": "/我酸了", + "isStatic": "1", + "IQLid": "273", + "AQLid": "273", + "EMCode": "10273" + }, + { + "QSid": "46", + "QDes": "/猪头", + "isStatic": "1", + "IQLid": "7", + "AQLid": "7", + "EMCode": "162" + }, + { + "QSid": "112", + "QDes": "/菜刀", + "IQLid": "17", + "AQLid": "17", + "EMCode": "155" + }, + { + "QSid": "56", + "QDes": "/刀", + "IQLid": "68", + "AQLid": "70", + "EMCode": "171" + }, + { + "QSid": "169", + "QDes": "/手枪", + "isStatic": "1", + "IQLid": "139", + "AQLid": "141", + "EMCode": "121034" + }, + { + "QSid": "171", + "QDes": "/茶", + "IQLid": "141", + "AQLid": "163", + "EMCode": "241" + }, + { + "QSid": "59", + "QDes": "/便便", + "IQLid": "15", + "AQLid": "15", + "EMCode": "174" + }, + { + "QSid": "144", + "QDes": "/喝彩", + "isStatic": "1", + "IQLid": "114", + "AQLid": "116", + "EMCode": "121009" + }, + { + "QSid": "147", + "QDes": "/棒棒糖", + "isStatic": "1", + "IQLid": "117", + "AQLid": "119", + "EMCode": "121012" + }, + { + "QSid": "89", + "QDes": "/西瓜", + "isStatic": "1", + "IQLid": "60", + "AQLid": "60", + "EMCode": "156" + }, + { + "QSid": "148", + "QDes": "/喝奶", + "isStatic": "1", + "IQLid": "118", + "AQLid": "120", + "QHide": "1", + "EMCode": "121013" + }, + { + "QSid": "55", + "QDes": "/炸弹", + "isStatic": "1", + "IQLid": "16", + "AQLid": "16", + "QHide": "1", + "EMCode": "170" + }, + { + "QSid": "41", + "QDes": "/发抖", + "isStatic": "1", + "IQLid": "69", + "AQLid": "71", + "EMCode": "193" + }, + { + "QSid": "125", + "QDes": "/转圈", + "IQLid": "95", + "AQLid": "97", + "EMCode": "195" + }, + { + "QSid": "42", + "QDes": "/爱情", + "IQLid": "38", + "AQLid": "38", + "EMCode": "190" + }, + { + "QSid": "43", + "QDes": "/跳跳", + "IQLid": "93", + "AQLid": "95", + "EMCode": "192" + }, + { + "QSid": "86", + "QDes": "/怄火", + "IQLid": "94", + "AQLid": "96", + "EMCode": "194" + }, + { + "QSid": "129", + "QDes": "/挥手", + "IQLid": "77", + "AQLid": "79", + "EMCode": "199" + }, + { + "QSid": "226", + "QDes": "/拍桌", + "IQLid": "196", + "isCMEmoji": "1", + "AQLid": "198", + "QHide": "1", + "EMCode": "297" + }, + { + "QSid": "85", + "QDes": "/飞吻", + "isStatic": "1", + "IQLid": "47", + "AQLid": "47", + "EMCode": "191" + }, + { + "QSid": "215", + "QDes": "/糊脸", + "IQLid": "185", + "isCMEmoji": "1", + "AQLid": "187", + "QHide": "1", + "EMCode": "285" + }, + { + "QSid": "214", + "QDes": "/啵啵", + "IQLid": "184", + "isCMEmoji": "1", + "AQLid": "186", + "QHide": "1", + "EMCode": "284" + }, + { + "QSid": "222", + "QDes": "/抱抱", + "IQLid": "192", + "isCMEmoji": "1", + "AQLid": "194", + "QHide": "1", + "EMCode": "292" + }, + { + "QSid": "203", + "QDes": "/托脸", + "IQLid": "173", + "AQLid": "152", + "QHide": "1", + "EMCode": "273" + }, + { + "QSid": "235", + "QDes": "/颤抖", + "IQLid": "205", + "isCMEmoji": "1", + "AQLid": "207", + "QHide": "1", + "EMCode": "305" + }, + { + "QSid": "241", + "QDes": "/生日快乐", + "IQLid": "211", + "isCMEmoji": "1", + "AQLid": "213", + "QHide": "1", + "EMCode": "311" + }, + { + "QSid": "237", + "QDes": "/偷看", + "IQLid": "207", + "isCMEmoji": "1", + "AQLid": "209", + "QHide": "1", + "EMCode": "307" + }, + { + "QSid": "218", + "QDes": "/舔一舔", + "IQLid": "188", + "isCMEmoji": "1", + "AQLid": "190", + "QHide": "1", + "EMCode": "288" + }, + { + "QSid": "233", + "QDes": "/掐一掐", + "IQLid": "203", + "isCMEmoji": "1", + "AQLid": "205", + "QHide": "1", + "EMCode": "303" + }, + { + "QSid": "232", + "QDes": "/佛系", + "IQLid": "202", + "isCMEmoji": "1", + "AQLid": "204", + "QHide": "1", + "EMCode": "302" + }, + { + "QSid": "238", + "QDes": "/扇脸", + "IQLid": "208", + "isCMEmoji": "1", + "AQLid": "210", + "QHide": "1", + "EMCode": "308" + }, + { + "QSid": "217", + "QDes": "/扯一扯", + "IQLid": "187", + "isCMEmoji": "1", + "AQLid": "189", + "QHide": "1", + "EMCode": "287" + }, + { + "QSid": "225", + "QDes": "/撩一撩", + "IQLid": "195", + "isCMEmoji": "1", + "AQLid": "197", + "QHide": "1", + "EMCode": "296" + }, + { + "QSid": "230", + "QDes": "/嘲讽", + "IQLid": "200", + "isCMEmoji": "1", + "AQLid": "202", + "QHide": "1", + "EMCode": "300" + }, + { + "QSid": "194", + "QDes": "/不开心", + "IQLid": "164", + "AQLid": "143", + "QHide": "1", + "EMCode": "264" + }, + { + "QSid": "210", + "QDes": "/飙泪", + "IQLid": "180", + "AQLid": "159", + "QHide": "1", + "EMCode": "280" + }, + { + "QSid": "193", + "QDes": "/大笑", + "IQLid": "163", + "AQLid": "185", + "QHide": "1", + "EMCode": "263" + }, + { + "QSid": "204", + "QDes": "/吃", + "IQLid": "174", + "AQLid": "153", + "QHide": "1", + "EMCode": "274" + }, + { + "QSid": "200", + "QDes": "/求求", + "IQLid": "170", + "AQLid": "149", + "QHide": "1", + "EMCode": "270" + }, + { + "QSid": "290", + "QDes": "/敲开心", + "IQLid": "290", + "isCMEmoji": "1", + "AQLid": "290", + "QHide": "1", + "EMCode": "20240" + }, + { + "QSid": "224", + "QDes": "/开枪", + "IQLid": "194", + "isCMEmoji": "1", + "AQLid": "196", + "QHide": "1", + "EMCode": "295" + }, + { + "QSid": "229", + "QDes": "/干杯", + "IQLid": "199", + "isCMEmoji": "1", + "AQLid": "201", + "QHide": "1", + "EMCode": "299" + }, + { + "QSid": "221", + "QDes": "/顶呱呱", + "IQLid": "191", + "isCMEmoji": "1", + "AQLid": "193", + "QHide": "1", + "EMCode": "291" + }, + { + "QSid": "219", + "QDes": "/蹭一蹭", + "IQLid": "189", + "isCMEmoji": "1", + "AQLid": "191", + "QHide": "1", + "EMCode": "289" + }, + { + "QSid": "227", + "QDes": "/拍手", + "IQLid": "197", + "isCMEmoji": "1", + "AQLid": "199", + "QHide": "1", + "EMCode": "294" + }, + { + "QSid": "216", + "QDes": "/拍头", + "IQLid": "186", + "isCMEmoji": "1", + "AQLid": "188", + "QHide": "1", + "EMCode": "286" + }, + { + "QSid": "231", + "QDes": "/哼", + "IQLid": "201", + "isCMEmoji": "1", + "AQLid": "203", + "QHide": "1", + "EMCode": "301" + }, + { + "QSid": "244", + "QDes": "/扔狗", + "IQLid": "214", + "isCMEmoji": "1", + "AQLid": "216", + "QHide": "1", + "EMCode": "312" + }, + { + "QSid": "223", + "QDes": "/暴击", + "IQLid": "193", + "isCMEmoji": "1", + "AQLid": "195", + "QHide": "1", + "EMCode": "293" + }, + { + "QSid": "243", + "QDes": "/甩头", + "IQLid": "213", + "isCMEmoji": "1", + "AQLid": "215", + "QHide": "1", + "EMCode": "313" + }, + { + "QSid": "211", + "QDes": "/我不看", + "IQLid": "181", + "AQLid": "160", + "QHide": "1", + "EMCode": "281" + }, + { + "QSid": "292", + "QDes": "/让我康康", + "IQLid": "292", + "isCMEmoji": "1", + "AQLid": "292", + "QHide": "1", + "EMCode": "20242" + }, + { + "QSid": "240", + "QDes": "/喷脸", + "IQLid": "210", + "isCMEmoji": "1", + "AQLid": "212", + "QHide": "1", + "EMCode": "310" + }, + { + "QSid": "180", + "QDes": "/惊喜", + "IQLid": "150", + "AQLid": "172", + "QHide": "1", + "EMCode": "250" + }, + { + "QSid": "122", + "QDes": "/爱你", + "IQLid": "65", + "AQLid": "65", + "QHide": "1", + "EMCode": "187" + }, + { + "QSid": "202", + "QDes": "/无聊", + "IQLid": "172", + "AQLid": "151", + "QHide": "1", + "EMCode": "272" + }, + { + "QSid": "278", + "QDes": "/汗", + "IQLid": "278", + "isCMEmoji": "1", + "AQLid": "278", + "QHide": "1", + "EMCode": "20237" + }, + { + "QSid": "301", + "QDes": "/好闪", + "IQLid": "301", + "AQLid": "301", + "QHide": "1", + "EMCode": "10301" + }, + { + "QSid": "288", + "QDes": "/请", + "IQLid": "288", + "AQLid": "288", + "QHide": "1", + "EMCode": "10288" + }, + { + "QSid": "322", + "QDes": "/拒绝", + "IQLid": "322", + "AQLid": "322", + "QHide": "1", + "EMCode": "10322" + }, + { + "QSid": "198", + "QDes": "/呃", + "IQLid": "168", + "AQLid": "147", + "QHide": "1", + "EMCode": "268" + }, + { + "QSid": "348", + "QDes": "/福萝卜", + "IQLid": "348", + "AQLid": "348", + "QHide": "1", + "EMCode": "10348" + }, + { + "QSid": "206", + "QDes": "/害怕", + "IQLid": "176", + "AQLid": "155", + "QHide": "1", + "EMCode": "276" + }, + { + "QSid": "239", + "QDes": "/原谅", + "IQLid": "209", + "isCMEmoji": "1", + "AQLid": "211", + "QHide": "1", + "EMCode": "309" + } + ], + "emoji": [ + { + "QSid": "😊", + "QCid": "128522", + "AQLid": "0", + "QDes": "/嘿嘿", + "EMCode": "400832" + }, + { + "QSid": "😌", + "QCid": "128524", + "AQLid": "1", + "QDes": "/羞涩", + "EMCode": "400834" + }, + { + "QSid": "😚", + "QCid": "128538", + "AQLid": "2", + "QDes": "/亲亲", + "EMCode": "400848" + }, + { + "QSid": "😓", + "QCid": "128531", + "AQLid": "3", + "QDes": "/汗", + "EMCode": "400841" + }, + { + "QSid": "😰", + "QCid": "128560", + "AQLid": "4", + "QDes": "/紧张", + "EMCode": "400870" + }, + { + "QSid": "😝", + "QCid": "128541", + "AQLid": "5", + "QDes": "/吐舌", + "EMCode": "400851" + }, + { + "QSid": "😁", + "QCid": "128513", + "AQLid": "6", + "QDes": "/呲牙", + "EMCode": "400823" + }, + { + "QSid": "😜", + "QCid": "128540", + "AQLid": "7", + "QDes": "/淘气", + "EMCode": "400850" + }, + { + "QSid": "☺", + "QCid": "9786", + "AQLid": "8", + "QDes": "/可爱", + "EMCode": "401181" + }, + { + "QSid": "😉", + "QCid": "128521", + "AQLid": "9", + "QDes": "/媚眼", + "QHide": "1", + "EMCode": "400831" + }, + { + "QSid": "😍", + "QCid": "128525", + "AQLid": "10", + "QDes": "/花痴", + "EMCode": "400835" + }, + { + "QSid": "😔", + "QCid": "128532", + "AQLid": "11", + "QDes": "/失落", + "EMCode": "400842" + }, + { + "QSid": "😄", + "QCid": "128516", + "AQLid": "12", + "QDes": "/高兴", + "EMCode": "400826" + }, + { + "QSid": "😏", + "QCid": "128527", + "AQLid": "13", + "QDes": "/哼哼", + "EMCode": "400837" + }, + { + "QSid": "😒", + "QCid": "128530", + "AQLid": "14", + "QDes": "/不屑", + "EMCode": "400840" + }, + { + "QSid": "😳", + "QCid": "128563", + "AQLid": "15", + "QDes": "/瞪眼", + "EMCode": "400873" + }, + { + "QSid": "😘", + "QCid": "128536", + "AQLid": "16", + "QDes": "/飞吻", + "EMCode": "400846" + }, + { + "QSid": "😭", + "QCid": "128557", + "AQLid": "17", + "QDes": "/大哭", + "EMCode": "400867" + }, + { + "QSid": "😱", + "QCid": "128561", + "AQLid": "18", + "QDes": "/害怕", + "EMCode": "400871" + }, + { + "QSid": "😂", + "QCid": "128514", + "AQLid": "19", + "QDes": "/激动", + "EMCode": "400824" + }, + { + "QSid": "💪", + "QCid": "128170", + "AQLid": "20", + "QDes": "/肌肉", + "EMCode": "400644" + }, + { + "QSid": "👊", + "QCid": "128074", + "AQLid": "21", + "QDes": "/拳头", + "EMCode": "400390" + }, + { + "QSid": "👍", + "QCid": "128077", + "AQLid": "22", + "QDes": "/厉害", + "EMCode": "400408" + }, + { + "QSid": "☝", + "QCid": "9757", + "AQLid": "23", + "QDes": "/向上", + "QHide": "1", + "EMCode": "401203" + }, + { + "QSid": "👏", + "QCid": "128079", + "AQLid": "24", + "QDes": "/鼓掌", + "EMCode": "400420" + }, + { + "QSid": "✌", + "QCid": "9996", + "AQLid": "25", + "QDes": "/胜利", + "QHide": "1", + "EMCode": "401210" + }, + { + "QSid": "👎", + "QCid": "128078", + "AQLid": "26", + "QDes": "/鄙视", + "EMCode": "400414" + }, + { + "QSid": "🙏", + "QCid": "128591", + "AQLid": "27", + "QDes": "/合十", + "EMCode": "400396" + }, + { + "QSid": "👌", + "QCid": "128076", + "AQLid": "28", + "QDes": "/好的", + "EMCode": "400402" + }, + { + "QSid": "👈", + "QCid": "128072", + "AQLid": "29", + "QDes": "/向左", + "QHide": "1", + "EMCode": "400378" + }, + { + "QSid": "👉", + "QCid": "128073", + "AQLid": "30", + "QDes": "/向右", + "QHide": "1", + "EMCode": "400384" + }, + { + "QSid": "👆", + "QCid": "128070", + "AQLid": "31", + "QDes": "/向上", + "EMCode": "400366" + }, + { + "QSid": "👇", + "QCid": "128071", + "AQLid": "32", + "QDes": "/向下", + "QHide": "1", + "EMCode": "400372" + }, + { + "QSid": "👀", + "QCid": "128064", + "AQLid": "33", + "QDes": "/眼睛", + "EMCode": "400351" + }, + { + "QSid": "👃", + "QCid": "128067", + "AQLid": "34", + "QDes": "/鼻子", + "QHide": "1", + "EMCode": "400358" + }, + { + "QSid": "👄", + "QCid": "128068", + "AQLid": "35", + "QDes": "/嘴唇", + "QHide": "1", + "EMCode": "400364" + }, + { + "QSid": "👂", + "QCid": "128066", + "AQLid": "36", + "QDes": "/耳朵", + "QHide": "1", + "EMCode": "400352" + }, + { + "QSid": "🍚", + "QCid": "127834", + "AQLid": "37", + "QDes": "/米饭", + "QHide": "1", + "EMCode": "400149" + }, + { + "QSid": "🍝", + "QCid": "127837", + "AQLid": "38", + "QDes": "/意面", + "QHide": "1", + "EMCode": "400152" + }, + { + "QSid": "🍜", + "QCid": "127836", + "AQLid": "39", + "QDes": "/拉面", + "EMCode": "400151" + }, + { + "QSid": "🍙", + "QCid": "127833", + "AQLid": "40", + "QDes": "/饭团", + "QHide": "1", + "EMCode": "400148" + }, + { + "QSid": "🍧", + "QCid": "127847", + "AQLid": "41", + "QDes": "/刨冰", + "EMCode": "400162" + }, + { + "QSid": "🍣", + "QCid": "127843", + "AQLid": "42", + "QDes": "/寿司", + "QHide": "1", + "EMCode": "400158" + }, + { + "QSid": "🎂", + "QCid": "127874", + "AQLid": "43", + "QDes": "/蛋糕", + "QHide": "1", + "EMCode": "400186" + }, + { + "QSid": "🍞", + "QCid": "127838", + "AQLid": "44", + "QDes": "/面包", + "EMCode": "400153" + }, + { + "QSid": "🍔", + "QCid": "127828", + "AQLid": "45", + "QDes": "/汉堡", + "QHide": "1", + "EMCode": "400143" + }, + { + "QSid": "🍳", + "QCid": "127859", + "AQLid": "46", + "QDes": "/煎蛋", + "QHide": "1", + "EMCode": "400174" + }, + { + "QSid": "🍟", + "QCid": "127839", + "AQLid": "47", + "QDes": "/薯条", + "QHide": "1", + "EMCode": "400154" + }, + { + "QSid": "🍺", + "QCid": "127866", + "AQLid": "48", + "QDes": "/啤酒", + "EMCode": "400181" + }, + { + "QSid": "🍻", + "QCid": "127867", + "AQLid": "49", + "QDes": "/干杯", + "EMCode": "400182" + }, + { + "QSid": "🍸", + "QCid": "127864", + "AQLid": "50", + "QDes": "/高脚杯", + "QHide": "1", + "EMCode": "400179" + }, + { + "QSid": "☕", + "QCid": "9749", + "AQLid": "51", + "QDes": "/咖啡", + "EMCode": "401262" + }, + { + "QSid": "🍎", + "QCid": "127822", + "AQLid": "52", + "QDes": "/苹果", + "EMCode": "400137" + }, + { + "QSid": "🍊", + "QCid": "127818", + "AQLid": "53", + "QDes": "/橙子", + "QHide": "1", + "EMCode": "400133" + }, + { + "QSid": "🍓", + "QCid": "127827", + "AQLid": "54", + "QDes": "/草莓", + "EMCode": "400142" + }, + { + "QSid": "🍉", + "QCid": "127817", + "AQLid": "55", + "QDes": "/西瓜", + "EMCode": "400132" + }, + { + "QSid": "💊", + "QCid": "128138", + "AQLid": "56", + "QDes": "/药丸", + "QHide": "1", + "EMCode": "400612" + }, + { + "QSid": "🚬", + "QCid": "128684", + "AQLid": "57", + "QDes": "/吸烟", + "EMCode": "400987" + }, + { + "QSid": "🎄", + "QCid": "127876", + "AQLid": "58", + "QDes": "/圣诞树", + "QHide": "1", + "EMCode": "400188" + }, + { + "QSid": "🌹", + "QCid": "127801", + "AQLid": "59", + "QDes": "/玫瑰", + "EMCode": "400116" + }, + { + "QSid": "🎉", + "QCid": "127881", + "AQLid": "60", + "QDes": "/庆祝", + "EMCode": "400198" + }, + { + "QSid": "🌴", + "QCid": "127796", + "AQLid": "61", + "QDes": "/椰子树", + "QHide": "1", + "EMCode": "400112" + }, + { + "QSid": "💝", + "QCid": "128157", + "AQLid": "62", + "QDes": "/礼物", + "EMCode": "400631" + }, + { + "QSid": "🎀", + "QCid": "127872", + "AQLid": "63", + "QDes": "/蝴蝶结", + "QHide": "1", + "EMCode": "400184" + }, + { + "QSid": "🎈", + "QCid": "127880", + "AQLid": "64", + "QDes": "/气球", + "QHide": "1", + "EMCode": "400197" + }, + { + "QSid": "🐚", + "QCid": "128026", + "AQLid": "65", + "QDes": "/海螺", + "QHide": "1", + "EMCode": "400314" + }, + { + "QSid": "💍", + "QCid": "128141", + "AQLid": "66", + "QDes": "/戒指", + "QHide": "1", + "EMCode": "400615" + }, + { + "QSid": "💣", + "QCid": "128163", + "AQLid": "67", + "QDes": "/炸弹", + "EMCode": "400637" + }, + { + "QSid": "👑", + "QCid": "128081", + "AQLid": "68", + "QDes": "/皇冠", + "QHide": "1", + "EMCode": "400432" + }, + { + "QSid": "🔔", + "QCid": "128276", + "AQLid": "69", + "QDes": "/铃铛", + "QHide": "1", + "EMCode": "400751" + }, + { + "QSid": "⭐", + "QCid": "11088", + "AQLid": "70", + "QDes": "/星星", + "QHide": "1", + "EMCode": "401686" + }, + { + "QSid": "✨", + "QCid": "10024", + "AQLid": "71", + "QDes": "/闪光", + "EMCode": "401137" + }, + { + "QSid": "💨", + "QCid": "128168", + "AQLid": "72", + "QDes": "/吹气", + "EMCode": "400642" + }, + { + "QSid": "💦", + "QCid": "128166", + "AQLid": "73", + "QDes": "/水", + "EMCode": "400640" + }, + { + "QSid": "🔥", + "QCid": "128293", + "AQLid": "74", + "QDes": "/火", + "EMCode": "400768" + }, + { + "QSid": "🏆", + "QCid": "127942", + "AQLid": "75", + "QDes": "/奖杯", + "QHide": "1", + "EMCode": "400256" + }, + { + "QSid": "💰", + "QCid": "128176", + "AQLid": "76", + "QDes": "/钱", + "QHide": "1", + "EMCode": "400655" + }, + { + "QSid": "💤", + "QCid": "128164", + "AQLid": "77", + "QDes": "/睡觉", + "EMCode": "400638" + }, + { + "QSid": "⚡", + "QCid": "9889", + "AQLid": "78", + "QDes": "/闪电", + "QHide": "1", + "EMCode": "401685" + }, + { + "QSid": "👣", + "QCid": "128099", + "AQLid": "79", + "QDes": "/脚印", + "QHide": "1", + "EMCode": "400450" + }, + { + "QSid": "💩", + "QCid": "128169", + "AQLid": "80", + "QDes": "/便便", + "EMCode": "400643" + }, + { + "QSid": "💉", + "QCid": "128137", + "AQLid": "81", + "QDes": "/打针", + "EMCode": "400611" + }, + { + "QSid": "♨", + "QCid": "9832", + "AQLid": "82", + "QDes": "/热", + "QHide": "1", + "EMCode": "401287" + }, + { + "QSid": "📫", + "QCid": "128235", + "AQLid": "83", + "QDes": "/邮箱", + "EMCode": "400714" + }, + { + "QSid": "🔑", + "QCid": "128273", + "AQLid": "84", + "QDes": "/钥匙", + "QHide": "1", + "EMCode": "400748" + }, + { + "QSid": "🔒", + "QCid": "128274", + "AQLid": "85", + "QDes": "/锁", + "QHide": "1", + "EMCode": "400749" + }, + { + "QSid": "✈", + "QCid": "9992", + "AQLid": "86", + "QDes": "/飞机", + "QHide": "1", + "EMCode": "401298" + }, + { + "QSid": "🚄", + "QCid": "128644", + "AQLid": "87", + "QDes": "/列车", + "QHide": "1", + "EMCode": "400942" + }, + { + "QSid": "🚗", + "QCid": "128663", + "AQLid": "88", + "QDes": "/汽车", + "QHide": "1", + "EMCode": "400961" + }, + { + "QSid": "🚤", + "QCid": "128676", + "AQLid": "89", + "QDes": "/快艇", + "QHide": "1", + "EMCode": "400979" + }, + { + "QSid": "🚲", + "QCid": "128690", + "AQLid": "90", + "QDes": "/自行车", + "QHide": "1", + "EMCode": "400993" + }, + { + "QSid": "🐎", + "QCid": "128014", + "AQLid": "91", + "QDes": "/骑马", + "EMCode": "400302" + }, + { + "QSid": "🚀", + "QCid": "128640", + "AQLid": "92", + "QDes": "/火箭", + "QHide": "1", + "EMCode": "400938" + }, + { + "QSid": "🚌", + "QCid": "128652", + "AQLid": "93", + "QDes": "/公交", + "QHide": "1", + "EMCode": "400950" + }, + { + "QSid": "⛵", + "QCid": "9973", + "AQLid": "94", + "QDes": "/船", + "QHide": "1", + "EMCode": "401294" + }, + { + "QSid": "👩", + "QCid": "128105", + "AQLid": "95", + "QDes": "/妈妈", + "QHide": "1", + "EMCode": "400482" + }, + { + "QSid": "👨", + "QCid": "128104", + "AQLid": "96", + "QDes": "/爸爸", + "QHide": "1", + "EMCode": "400465" + }, + { + "QSid": "👧", + "QCid": "128103", + "AQLid": "97", + "QDes": "/女孩", + "EMCode": "400459" + }, + { + "QSid": "👦", + "QCid": "128102", + "AQLid": "98", + "QDes": "/男孩", + "EMCode": "400453" + }, + { + "QSid": "🐵", + "QCid": "128053", + "AQLid": "99", + "QDes": "/猴", + "EMCode": "400341" + }, + { + "QSid": "🐙", + "QCid": "128025", + "AQLid": "100", + "QDes": "/章鱼", + "QHide": "1", + "EMCode": "400313" + }, + { + "QSid": "🐷", + "QCid": "128055", + "AQLid": "101", + "QDes": "/猪", + "EMCode": "400343" + }, + { + "QSid": "💀", + "QCid": "128128", + "AQLid": "102", + "QDes": "/骷髅", + "QHide": "1", + "EMCode": "400572" + }, + { + "QSid": "🐤", + "QCid": "128036", + "AQLid": "103", + "QDes": "/小鸡", + "QHide": "1", + "EMCode": "400324" + }, + { + "QSid": "🐨", + "QCid": "128040", + "AQLid": "104", + "QDes": "/树懒", + "QHide": "1", + "EMCode": "400328" + }, + { + "QSid": "🐮", + "QCid": "128046", + "AQLid": "105", + "QDes": "/牛", + "EMCode": "400334" + }, + { + "QSid": "🐔", + "QCid": "128020", + "AQLid": "106", + "QDes": "/公鸡", + "EMCode": "400308" + }, + { + "QSid": "🐸", + "QCid": "128056", + "AQLid": "107", + "QDes": "/青蛙", + "EMCode": "400344" + }, + { + "QSid": "👻", + "QCid": "128123", + "AQLid": "108", + "QDes": "/幽灵", + "EMCode": "400562" + }, + { + "QSid": "🐛", + "QCid": "128027", + "AQLid": "109", + "QDes": "/虫", + "EMCode": "400315" + }, + { + "QSid": "🐠", + "QCid": "128032", + "AQLid": "110", + "QDes": "/鱼", + "QHide": "1", + "EMCode": "400320" + }, + { + "QSid": "🐶", + "QCid": "128054", + "AQLid": "111", + "QDes": "/狗", + "EMCode": "400342" + }, + { + "QSid": "🐯", + "QCid": "128047", + "AQLid": "112", + "QDes": "/老虎", + "QHide": "1", + "EMCode": "400335" + }, + { + "QSid": "👼", + "QCid": "128124", + "AQLid": "113", + "QDes": "/天使", + "QHide": "1", + "EMCode": "400563" + }, + { + "QSid": "🐧", + "QCid": "128039", + "AQLid": "114", + "QDes": "/企鹅", + "QHide": "1", + "EMCode": "400327" + }, + { + "QSid": "🐳", + "QCid": "128051", + "AQLid": "115", + "QDes": "/鲸鱼", + "EMCode": "400339" + }, + { + "QSid": "🐭", + "QCid": "128045", + "AQLid": "116", + "QDes": "/老鼠", + "QHide": "1", + "EMCode": "400333" + }, + { + "QSid": "👒", + "QCid": "128082", + "AQLid": "117", + "QDes": "/帽子", + "QHide": "1", + "EMCode": "400433" + }, + { + "QSid": "👗", + "QCid": "128087", + "AQLid": "118", + "QDes": "/连衣裙", + "QHide": "1", + "EMCode": "400438" + }, + { + "QSid": "💄", + "QCid": "128132", + "AQLid": "119", + "QDes": "/口红", + "QHide": "1", + "EMCode": "400591" + }, + { + "QSid": "👠", + "QCid": "128096", + "AQLid": "120", + "QDes": "/高跟鞋", + "QHide": "1", + "EMCode": "400447" + }, + { + "QSid": "👢", + "QCid": "128098", + "AQLid": "121", + "QDes": "/靴子", + "EMCode": "400449" + }, + { + "QSid": "🌂", + "QCid": "127746", + "AQLid": "122", + "QDes": "/雨伞", + "QHide": "1", + "EMCode": "400077" + }, + { + "QSid": "👜", + "QCid": "128092", + "AQLid": "123", + "QDes": "/包", + "QHide": "1", + "EMCode": "400443" + }, + { + "QSid": "👙", + "QCid": "128089", + "AQLid": "124", + "QDes": "/内衣", + "QHide": "1", + "EMCode": "400440" + }, + { + "QSid": "👕", + "QCid": "128085", + "AQLid": "125", + "QDes": "/衣服", + "QHide": "1", + "EMCode": "400436" + }, + { + "QSid": "👟", + "QCid": "128095", + "AQLid": "126", + "QDes": "/鞋子", + "QHide": "1", + "EMCode": "400446" + }, + { + "QSid": "☁", + "QCid": "9729", + "AQLid": "127", + "QDes": "/云朵", + "QHide": "1", + "EMCode": "401329" + }, + { + "QSid": "☀", + "QCid": "9728", + "AQLid": "128", + "QDes": "/晴天", + "EMCode": "401328" + }, + { + "QSid": "☔", + "QCid": "9748", + "AQLid": "129", + "QDes": "/雨天", + "QHide": "1", + "EMCode": "401342" + }, + { + "QSid": "🌙", + "QCid": "127769", + "AQLid": "130", + "QDes": "/月亮", + "QHide": "1", + "EMCode": "400100" + }, + { + "QSid": "⛄", + "QCid": "9924", + "AQLid": "131", + "QDes": "/雪人", + "QHide": "1", + "EMCode": "401346" + }, + { + "QSid": "⭕", + "QCid": "11093", + "AQLid": "132", + "QDes": "/正确", + "QHide": "1", + "EMCode": "401687" + }, + { + "QSid": "❌", + "QCid": "10060", + "AQLid": "133", + "QDes": "/错误", + "QHide": "1", + "EMCode": "401142" + }, + { + "QSid": "❔", + "QCid": "10068", + "AQLid": "134", + "QDes": "/问号", + "EMCode": "401145" + }, + { + "QSid": "❕", + "QCid": "10069", + "AQLid": "135", + "QDes": "/叹号", + "QHide": "1", + "EMCode": "401146" + }, + { + "QSid": "☎", + "QCid": "9742", + "AQLid": "136", + "QDes": "/电话", + "QHide": "1", + "EMCode": "401398" + }, + { + "QSid": "📷", + "QCid": "128247", + "AQLid": "137", + "QDes": "/相机", + "QHide": "1", + "EMCode": "400726" + }, + { + "QSid": "📱", + "QCid": "128241", + "AQLid": "138", + "QDes": "/手机", + "QHide": "1", + "EMCode": "400720" + }, + { + "QSid": "📠", + "QCid": "128224", + "AQLid": "139", + "QDes": "/传真", + "QHide": "1", + "EMCode": "400703" + }, + { + "QSid": "💻", + "QCid": "128187", + "AQLid": "140", + "QDes": "/电脑", + "QHide": "1", + "EMCode": "400666" + }, + { + "QSid": "🎥", + "QCid": "127909", + "AQLid": "141", + "QDes": "/摄影机", + "QHide": "1", + "EMCode": "400214" + }, + { + "QSid": "🎤", + "QCid": "127908", + "AQLid": "142", + "QDes": "/话筒", + "QHide": "1", + "EMCode": "400213" + }, + { + "QSid": "🔫", + "QCid": "128299", + "AQLid": "143", + "QDes": "/手枪", + "EMCode": "400774" + }, + { + "QSid": "💿", + "QCid": "128191", + "AQLid": "144", + "QDes": "/光碟", + "QHide": "1", + "EMCode": "400670" + }, + { + "QSid": "💓", + "QCid": "128147", + "AQLid": "145", + "QDes": "/爱心", + "EMCode": "400621" + }, + { + "QSid": "♣", + "QCid": "9827", + "AQLid": "146", + "QDes": "/扑克", + "QHide": "1", + "EMCode": "401385" + }, + { + "QSid": "🀄", + "QCid": "126980", + "AQLid": "147", + "QDes": "/麻将", + "QHide": "1", + "EMCode": "401386" + }, + { + "QSid": "〽", + "QCid": "12349", + "AQLid": "148", + "QDes": "/股票", + "QHide": "1", + "EMCode": "401691" + }, + { + "QSid": "🎰", + "QCid": "127920", + "AQLid": "149", + "QDes": "/老虎机", + "QHide": "1", + "EMCode": "400225" + }, + { + "QSid": "🚥", + "QCid": "128677", + "AQLid": "150", + "QDes": "/信号灯", + "QHide": "1", + "EMCode": "400980" + }, + { + "QSid": "🚧", + "QCid": "128679", + "AQLid": "151", + "QDes": "/路障", + "QHide": "1", + "EMCode": "400982" + }, + { + "QSid": "🎸", + "QCid": "127928", + "AQLid": "152", + "QDes": "/吉他", + "QHide": "1", + "EMCode": "400233" + }, + { + "QSid": "💈", + "QCid": "128136", + "AQLid": "153", + "QDes": "/理发厅", + "QHide": "1", + "EMCode": "400610" + }, + { + "QSid": "🛀", + "QCid": "128704", + "AQLid": "154", + "QDes": "/浴缸", + "QHide": "1", + "EMCode": "401022" + }, + { + "QSid": "🚽", + "QCid": "128701", + "AQLid": "155", + "QDes": "/马桶", + "QHide": "1", + "EMCode": "401019" + }, + { + "QSid": "🏠", + "QCid": "127968", + "AQLid": "156", + "QDes": "/家", + "QHide": "1", + "EMCode": "400271" + }, + { + "QSid": "⛪", + "QCid": "9962", + "AQLid": "157", + "QDes": "/教堂", + "QHide": "1", + "EMCode": "401281" + }, + { + "QSid": "🏦", + "QCid": "127974", + "AQLid": "158", + "QDes": "/银行", + "QHide": "1", + "EMCode": "400277" + }, + { + "QSid": "🏥", + "QCid": "127973", + "AQLid": "159", + "QDes": "/医院", + "QHide": "1", + "EMCode": "400276" + }, + { + "QSid": "🏨", + "QCid": "127976", + "AQLid": "160", + "QDes": "/酒店", + "QHide": "1", + "EMCode": "400279" + }, + { + "QSid": "🏧", + "QCid": "127975", + "AQLid": "161", + "QDes": "/取款机", + "QHide": "1", + "EMCode": "400278" + }, + { + "QSid": "🏪", + "QCid": "127978", + "AQLid": "162", + "QDes": "/便利店", + "EMCode": "400281" + }, + { + "QSid": "🚹", + "QCid": "128697", + "AQLid": "163", + "QDes": "/男性", + "QHide": "1", + "EMCode": "401015" + }, + { + "QSid": "🚺", + "QCid": "128698", + "AQLid": "164", + "QDes": "/女性", + "QHide": "1", + "EMCode": "401016" + } + ] +} \ No newline at end of file diff --git a/src/core/listeners/NodeIKernelBuddyListener.ts b/src/core/listeners/NodeIKernelBuddyListener.ts new file mode 100644 index 00000000..1a15bcc0 --- /dev/null +++ b/src/core/listeners/NodeIKernelBuddyListener.ts @@ -0,0 +1,102 @@ +import { BuddyCategoryType, FriendRequestNotify } from '@/core/entities'; + +export type OnBuddyChangeParams = BuddyCategoryType[] + +interface IBuddyListener { + onBuddyListChangedV2(arg: unknown): void,//V2版本 还没兼容 + + onBuddyListChange(arg: OnBuddyChangeParams): void, + + onBuddyInfoChange(arg: unknown): void, + + onBuddyDetailInfoChange(arg: unknown): void, + + onNickUpdated(arg: unknown): void, + + onBuddyRemarkUpdated(arg: unknown): void, + + onAvatarUrlUpdated(arg: unknown): void, + + onBuddyReqChange(arg: FriendRequestNotify): void, + + onBuddyReqUnreadCntChange(arg: unknown): void, + + onCheckBuddySettingResult(arg: unknown): void, + + onAddBuddyNeedVerify(arg: unknown): void, + + onSmartInfos(arg: unknown): void, + + onSpacePermissionInfos(arg: unknown): void, + + onDoubtBuddyReqChange(arg: unknown): void, + + onDoubtBuddyReqUnreadNumChange(arg: unknown): void, + + onBlockChanged(arg: unknown): void, + + onAddMeSettingChanged(arg: unknown): void, + + onDelBatchBuddyInfos(arg: unknown): void +} + +export interface NodeIKernelBuddyListener extends IBuddyListener { + // eslint-disable-next-line @typescript-eslint/no-misused-new + new(listener: IBuddyListener): NodeIKernelBuddyListener; +} + +export class BuddyListener implements IBuddyListener { + onBuddyListChangedV2(arg: unknown): void { + //throw new Error('Method not implemented.'); + } + onAddBuddyNeedVerify(arg: unknown) { + } + + onAddMeSettingChanged(arg: unknown) { + } + + onAvatarUrlUpdated(arg: unknown) { + } + + onBlockChanged(arg: unknown) { + } + + onBuddyDetailInfoChange(arg: unknown) { + } + + onBuddyInfoChange(arg: unknown) { + } + + onBuddyListChange(arg: OnBuddyChangeParams): void { + } + + onBuddyRemarkUpdated(arg: unknown): void { + } + + onBuddyReqChange(arg: FriendRequestNotify): void { + } + + onBuddyReqUnreadCntChange(arg: unknown): void { + } + + onCheckBuddySettingResult(arg: unknown): void { + } + + onDelBatchBuddyInfos(arg: unknown): void { + } + + onDoubtBuddyReqChange(arg: unknown): void { + } + + onDoubtBuddyReqUnreadNumChange(arg: unknown): void { + } + + onNickUpdated(arg: unknown): void { + } + + onSmartInfos(arg: unknown): void { + } + + onSpacePermissionInfos(arg: unknown): void { + } +} diff --git a/src/core/listeners/NodeIKernelFileAssistantListener.ts b/src/core/listeners/NodeIKernelFileAssistantListener.ts new file mode 100644 index 00000000..8d7a604f --- /dev/null +++ b/src/core/listeners/NodeIKernelFileAssistantListener.ts @@ -0,0 +1,27 @@ +export interface IKernelFileAssistantListener { + onFileStatusChanged(...args: unknown[]): unknown; + + onSessionListChanged(...args: unknown[]): unknown; + + onSessionChanged(...args: unknown[]): unknown; + + onFileListChanged(...args: unknown[]): unknown; + + onFileSearch(...args: unknown[]): unknown; +} +export interface NodeIKernelFileAssistantListener extends IKernelFileAssistantListener { + // eslint-disable-next-line @typescript-eslint/no-misused-new + new(adapter: IKernelFileAssistantListener): NodeIKernelFileAssistantListener; +} + +export class KernelFileAssistantListener implements IKernelFileAssistantListener { + onFileStatusChanged(...args: unknown[]) { } + + onSessionListChanged(...args: unknown[]) { } + + onSessionChanged(...args: unknown[]) { } + + onFileListChanged(...args: unknown[]) { } + + onFileSearch(...args: unknown[]) { } +} \ No newline at end of file diff --git a/src/core/listeners/NodeIKernelGroupListener.ts b/src/core/listeners/NodeIKernelGroupListener.ts new file mode 100644 index 00000000..9434d4e4 --- /dev/null +++ b/src/core/listeners/NodeIKernelGroupListener.ts @@ -0,0 +1,240 @@ +import { Group, GroupListUpdateType, GroupMember, GroupNotify } from '@/core/entities'; + +interface IGroupListener { + onGroupListUpdate(updateType: GroupListUpdateType, groupList: Group[]): void; + + onGroupExtListUpdate(...args: unknown[]): void; + + onGroupSingleScreenNotifies(doubt: boolean, seq: string, notifies: GroupNotify[]): void; + + onGroupNotifiesUpdated(dboubt: boolean, notifies: GroupNotify[]): void; + + onGroupNotifiesUnreadCountUpdated(...args: unknown[]): void; + + onGroupDetailInfoChange(...args: unknown[]): void; + + onGroupAllInfoChange(...args: unknown[]): void; + + onGroupsMsgMaskResult(...args: unknown[]): void; + + onGroupConfMemberChange(...args: unknown[]): void; + + onGroupBulletinChange(...args: unknown[]): void; + + onGetGroupBulletinListResult(...args: unknown[]): void; + + onMemberListChange(arg: { + sceneId: string, + ids: string[], + infos: Map, + finish: boolean, + hasRobot: boolean + }): void; + + onMemberInfoChange(groupCode: string, changeType: number, members: Map): void; + + onSearchMemberChange(...args: unknown[]): void; + + onGroupBulletinRichMediaDownloadComplete(...args: unknown[]): void; + + onGroupBulletinRichMediaProgressUpdate(...args: unknown[]): void; + + onGroupStatisticInfoChange(...args: unknown[]): void; + + onJoinGroupNotify(...args: unknown[]): void; + + onShutUpMemberListChanged(...args: unknown[]): void; + + onGroupBulletinRemindNotify(...args: unknown[]): void; + + onGroupFirstBulletinNotify(...args: unknown[]): void; + + onJoinGroupNoVerifyFlag(...args: unknown[]): void; + + onGroupArkInviteStateResult(...args: unknown[]): void; + // 发现于Win 9.9.9 23159 + onGroupMemberLevelInfoChange(...args: unknown[]): void; +} + +export interface NodeIKernelGroupListener extends IGroupListener { + // eslint-disable-next-line @typescript-eslint/no-misused-new + new(listener: IGroupListener): NodeIKernelGroupListener; +} + +export class GroupListener implements IGroupListener { + // 发现于Win 9.9.9 23159 + onGroupMemberLevelInfoChange(...args: unknown[]): void { + + } + onGetGroupBulletinListResult(...args: unknown[]) { + } + + onGroupAllInfoChange(...args: unknown[]) { + } + + onGroupBulletinChange(...args: unknown[]) { + } + + onGroupBulletinRemindNotify(...args: unknown[]) { + } + + onGroupArkInviteStateResult(...args: unknown[]) { + } + + onGroupBulletinRichMediaDownloadComplete(...args: unknown[]) { + } + + onGroupConfMemberChange(...args: unknown[]) { + } + + onGroupDetailInfoChange(...args: unknown[]) { + } + + onGroupExtListUpdate(...args: unknown[]) { + } + + onGroupFirstBulletinNotify(...args: unknown[]) { + } + + onGroupListUpdate(updateType: GroupListUpdateType, groupList: Group[]) { + } + + onGroupNotifiesUpdated(dboubt: boolean, notifies: GroupNotify[]) { + } + + onGroupBulletinRichMediaProgressUpdate(...args: unknown[]) { + } + + onGroupNotifiesUnreadCountUpdated(...args: unknown[]) { + } + + onGroupSingleScreenNotifies(doubt: boolean, seq: string, notifies: GroupNotify[]) { + } + + onGroupsMsgMaskResult(...args: unknown[]) { + } + + onGroupStatisticInfoChange(...args: unknown[]) { + } + + onJoinGroupNotify(...args: unknown[]) { + } + + onJoinGroupNoVerifyFlag(...args: unknown[]) { + } + + onMemberInfoChange(groupCode: string, changeType: number, members: Map) { + } + + onMemberListChange(arg: { + sceneId: string, + ids: string[], + infos: Map, // uid -> GroupMember + finish: boolean, + hasRobot: boolean + }) { + } + + onSearchMemberChange(...args: unknown[]) { + } + + onShutUpMemberListChanged(...args: unknown[]) { + } +} + +export class DebugGroupListener implements IGroupListener { + onGroupMemberLevelInfoChange(...args: unknown[]): void { + console.log('onGroupMemberLevelInfoChange:', ...args); + } + onGetGroupBulletinListResult(...args: unknown[]) { + console.log('onGetGroupBulletinListResult:', ...args); + } + + onGroupAllInfoChange(...args: unknown[]) { + console.log('onGroupAllInfoChange:', ...args); + } + + onGroupBulletinChange(...args: unknown[]) { + console.log('onGroupBulletinChange:', ...args); + } + + onGroupBulletinRemindNotify(...args: unknown[]) { + console.log('onGroupBulletinRemindNotify:', ...args); + } + + onGroupArkInviteStateResult(...args: unknown[]) { + console.log('onGroupArkInviteStateResult:', ...args); + } + + onGroupBulletinRichMediaDownloadComplete(...args: unknown[]) { + console.log('onGroupBulletinRichMediaDownloadComplete:', ...args); + } + + onGroupConfMemberChange(...args: unknown[]) { + console.log('onGroupConfMemberChange:', ...args); + } + + onGroupDetailInfoChange(...args: unknown[]) { + console.log('onGroupDetailInfoChange:', ...args); + } + + onGroupExtListUpdate(...args: unknown[]) { + console.log('onGroupExtListUpdate:', ...args); + } + + onGroupFirstBulletinNotify(...args: unknown[]) { + console.log('onGroupFirstBulletinNotify:', ...args); + } + + onGroupListUpdate(...args: unknown[]) { + console.log('onGroupListUpdate:', ...args); + } + + onGroupNotifiesUpdated(...args: unknown[]) { + console.log('onGroupNotifiesUpdated:', ...args); + } + + onGroupBulletinRichMediaProgressUpdate(...args: unknown[]) { + console.log('onGroupBulletinRichMediaProgressUpdate:', ...args); + } + + onGroupNotifiesUnreadCountUpdated(...args: unknown[]) { + console.log('onGroupNotifiesUnreadCountUpdated:', ...args); + } + + onGroupSingleScreenNotifies(doubt: boolean, seq: string, notifies: GroupNotify[]) { + console.log('onGroupSingleScreenNotifies:'); + } + + onGroupsMsgMaskResult(...args: unknown[]) { + console.log('onGroupsMsgMaskResult:', ...args); + } + + onGroupStatisticInfoChange(...args: unknown[]) { + console.log('onGroupStatisticInfoChange:', ...args); + } + + onJoinGroupNotify(...args: unknown[]) { + console.log('onJoinGroupNotify:', ...args); + } + + onJoinGroupNoVerifyFlag(...args: unknown[]) { + console.log('onJoinGroupNoVerifyFlag:', ...args); + } + + onMemberInfoChange(groupCode: string, changeType: number, members: Map) { + console.log('onMemberInfoChange:', groupCode, changeType, members); + } + + onMemberListChange(...args: unknown[]) { + console.log('onMemberListChange:', ...args); + } + + onSearchMemberChange(...args: unknown[]) { + console.log('onSearchMemberChange:', ...args); + } + + onShutUpMemberListChanged(...args: unknown[]) { + console.log('onShutUpMemberListChanged:', ...args); + } +} diff --git a/src/core/listeners/NodeIKernelLoginListener.ts b/src/core/listeners/NodeIKernelLoginListener.ts new file mode 100644 index 00000000..4c799ebf --- /dev/null +++ b/src/core/listeners/NodeIKernelLoginListener.ts @@ -0,0 +1,108 @@ +export interface IKernelLoginListener { + onLoginConnected(...args: any[]): void; + + onLoginDisConnected(...args: any[]): void; + + onLoginConnecting(...args: any[]): void; + + onQRCodeGetPicture(...args: any[]): void; + + onQRCodeLoginPollingStarted(...args: any[]): void; + + onQRCodeSessionUserScaned(...args: any[]): void; + + onQRCodeLoginSucceed(...args: any[]): void; + + onQRCodeSessionFailed(...args: any[]): void; + + onLoginFailed(...args: any[]): void; + + onLogoutSucceed(...args: any[]): void; + + onLogoutFailed(...args: any[]): void; + + onUserLoggedIn(...args: any[]): void; + + onQRCodeSessionQuickLoginFailed(...args: any[]): void; + + onPasswordLoginFailed(...args: any[]): void; + + OnConfirmUnusualDeviceFailed(...args: any[]): void; + + onQQLoginNumLimited(...args: any[]): void; + + onLoginState(...args: any[]): void; +} + +export interface NodeIKernelLoginListener { + // eslint-disable-next-line @typescript-eslint/no-misused-new + new(listener: IKernelLoginListener): NodeIKernelLoginListener; +} + +export class LoginListener implements IKernelLoginListener { + onLoginConnected(...args: any[]): void { + } + + onLoginDisConnected(...args: any[]): void { + } + + onLoginConnecting(...args: any[]): void { + } + + onQRCodeGetPicture(arg: { pngBase64QrcodeData: string, qrcodeUrl: string }): void { + // let base64Data: string = arg.pngBase64QrcodeData + // base64Data = base64Data.split("data:image/png;base64,")[1] + // let buffer = Buffer.from(base64Data, 'base64') + // console.log("onQRCodeGetPicture", arg); + } + + onQRCodeLoginPollingStarted(...args: any[]): void { + } + + onQRCodeSessionUserScaned(...args: any[]): void { + } + + onQRCodeLoginSucceed(arg: QRCodeLoginSucceedResult): void { + } + + onQRCodeSessionFailed(...args: any[]): void { + } + + onLoginFailed(...args: any[]): void { + } + + onLogoutSucceed(...args: any[]): void { + } + + onLogoutFailed(...args: any[]): void { + } + + onUserLoggedIn(...args: any[]): void { + } + + onQRCodeSessionQuickLoginFailed(...args: any[]): void { + } + + onPasswordLoginFailed(...args: any[]): void { + } + + OnConfirmUnusualDeviceFailed(...args: any[]): void { + } + + onQQLoginNumLimited(...args: any[]): void { + } + + onLoginState(...args: any[]): void { + } +} + +export interface QRCodeLoginSucceedResult { + account: string; + mainAccount: string; + uin: string; //拿UIN + uid: string; //拿UID + nickName: string; //一般是空的 拿不到 + gender: number; + age: number; + faceUrl: string;//一般是空的 拿不到 +} diff --git a/src/core/listeners/NodeIKernelMsgListener.ts b/src/core/listeners/NodeIKernelMsgListener.ts new file mode 100644 index 00000000..31e962f1 --- /dev/null +++ b/src/core/listeners/NodeIKernelMsgListener.ts @@ -0,0 +1,512 @@ +import { ChatType, RawMessage } from '@/core/entities'; + +export interface OnRichMediaDownloadCompleteParams { + fileModelId: string, + msgElementId: string, + msgId: string, + fileId: string, + fileProgress: string, // '0' + fileSpeed: string, // '0' + fileErrCode: string, // '0' + fileErrMsg: string, + fileDownType: number, // 暂时未知 + thumbSize: number, + filePath: string, + totalSize: string, + trasferStatus: number, + step: number, + commonFileInfo: unknown | null, + fileSrvErrCode: string, + clientMsg: string, + businessId: number, + userTotalSpacePerDay: unknown | null, + userUsedSpacePerDay: unknown | null +} +export interface onGroupFileInfoUpdateParamType { + retCode: number + retMsg: string + clientWording: string + isEnd: boolean + item: Array + allFileCount: string + nextIndex: string + reqId: string +} +// { +// sessionType: 1, +// chatType: 100, +// peerUid: 'u_PVQ3tl6K78xxxx', +// groupCode: '809079648', +// fromNick: '拾xxxx, +// sig: '0x' +// } +export interface TempOnRecvParams { + sessionType: number,//1 + chatType: ChatType,//100 + peerUid: string,//uid + groupCode: string,//gc + fromNick: string,//gc name + sig: string, + +} +export interface IKernelMsgListener { + onAddSendMsg(msgRecord: RawMessage): void; + + onBroadcastHelperDownloadComplete(broadcastHelperTransNotifyInfo: unknown): void; + + onBroadcastHelperProgressUpdate(broadcastHelperTransNotifyInfo: unknown): void; + + onChannelFreqLimitInfoUpdate(contact: unknown, z: unknown, freqLimitInfo: unknown): void; + + onContactUnreadCntUpdate(hashMap: unknown): void; + + onCustomWithdrawConfigUpdate(customWithdrawConfig: unknown): void; + + onDraftUpdate(contact: unknown, arrayList: unknown, j2: unknown): void; + + onEmojiDownloadComplete(emojiNotifyInfo: unknown): void; + + onEmojiResourceUpdate(emojiResourceInfo: unknown): void; + + onFeedEventUpdate(firstViewDirectMsgNotifyInfo: unknown): void; + + onFileMsgCome(arrayList: unknown): void; + + onFirstViewDirectMsgUpdate(firstViewDirectMsgNotifyInfo: unknown): void; + + onFirstViewGroupGuildMapping(arrayList: unknown): void; + + onGrabPasswordRedBag(i2: unknown, str: unknown, i3: unknown, recvdOrder: unknown, msgRecord: unknown): void; + + onGroupFileInfoAdd(groupItem: unknown): void; + + onGroupFileInfoUpdate(groupFileListResult: onGroupFileInfoUpdateParamType): void; + + onGroupGuildUpdate(groupGuildNotifyInfo: unknown): void; + + onGroupTransferInfoAdd(groupItem: unknown): void; + + onGroupTransferInfoUpdate(groupFileListResult: unknown): void; + + onGuildInteractiveUpdate(guildInteractiveNotificationItem: unknown): void; + + onGuildMsgAbFlagChanged(guildMsgAbFlag: unknown): void; + + onGuildNotificationAbstractUpdate(guildNotificationAbstractInfo: unknown): void; + + onHitCsRelatedEmojiResult(downloadRelateEmojiResultInfo: unknown): void; + + onHitEmojiKeywordResult(hitRelatedEmojiWordsResult: unknown): void; + + onHitRelatedEmojiResult(relatedWordEmojiInfo: unknown): void; + + onImportOldDbProgressUpdate(importOldDbMsgNotifyInfo: unknown): void; + + onInputStatusPush(inputStatusInfo: unknown): void; + + onKickedOffLine(kickedInfo: unknown): void; + + onLineDev(arrayList: unknown): void; + + onLogLevelChanged(j2: unknown): void; + + onMsgAbstractUpdate(arrayList: unknown): void; + + onMsgBoxChanged(arrayList: unknown): void; + + onMsgDelete(contact: unknown, arrayList: unknown): void; + + onMsgEventListUpdate(hashMap: unknown): void; + + onMsgInfoListAdd(arrayList: unknown): void; + + onMsgInfoListUpdate(msgList: RawMessage[]): void; + + onMsgQRCodeStatusChanged(i2: unknown): void; + + onMsgRecall(i2: unknown, str: unknown, j2: unknown): void; + + onMsgSecurityNotify(msgRecord: unknown): void; + + onMsgSettingUpdate(msgSetting: unknown): void; + + onNtFirstViewMsgSyncEnd(): void; + + onNtMsgSyncEnd(): void; + + onNtMsgSyncStart(): void; + + onReadFeedEventUpdate(firstViewDirectMsgNotifyInfo: unknown): void; + + onRecvGroupGuildFlag(i2: unknown): void; + + onRecvMsg(...arrayList: unknown[]): void; + + onRecvMsgSvrRspTransInfo(j2: unknown, contact: unknown, i2: unknown, i3: unknown, str: unknown, bArr: unknown): void; + + onRecvOnlineFileMsg(arrayList: unknown): void; + + onRecvS2CMsg(arrayList: unknown): void; + + onRecvSysMsg(arrayList: unknown): void; + + onRecvUDCFlag(i2: unknown): void; + + onRichMediaDownloadComplete(fileTransNotifyInfo: OnRichMediaDownloadCompleteParams): void; + + onRichMediaProgerssUpdate(fileTransNotifyInfo: unknown): void; + + onRichMediaUploadComplete(fileTransNotifyInfo: unknown): void; + + onSearchGroupFileInfoUpdate(searchGroupFileResult: + { + result: { + retCode: number, + retMsg: string, + clientWording: string + }, + syncCookie: string, + totalMatchCount: number, + ownerMatchCount: number, + isEnd: boolean, + reqId: number, + item: Array<{ + groupCode: string, + groupName: string, + uploaderUin: string, + uploaderName: string, + matchUin: string, + matchWords: Array, + fileNameHits: Array<{ + start: number, + end: number + }>, + fileModelId: string, + fileId: string, + fileName: string, + fileSize: string, + busId: number, + uploadTime: number, + modifyTime: number, + deadTime: number, + downloadTimes: number, + localPath: string + }> + }): void; + + onSendMsgError(j2: unknown, contact: unknown, i2: unknown, str: unknown): void; + + onSysMsgNotification(i2: unknown, j2: unknown, j3: unknown, arrayList: unknown): void; + + onTempChatInfoUpdate(tempChatInfo: TempOnRecvParams): void; + + onUnreadCntAfterFirstView(hashMap: unknown): void; + + onUnreadCntUpdate(hashMap: unknown): void; + + onUserChannelTabStatusChanged(z: unknown): void; + + onUserOnlineStatusChanged(z: unknown): void; + + onUserTabStatusChanged(arrayList: unknown): void; + + onlineStatusBigIconDownloadPush(i2: unknown, j2: unknown, str: unknown): void; + + onlineStatusSmallIconDownloadPush(i2: unknown, j2: unknown, str: unknown): void; + + // 第一次发现于Linux + onUserSecQualityChanged(...args: unknown[]): void; + + onMsgWithRichLinkInfoUpdate(...args: unknown[]): void; + + onRedTouchChanged(...args: unknown[]): void; + + // 第一次发现于Win 9.9.9 23159 + onBroadcastHelperProgerssUpdate(...args: unknown[]): void; + +} + +export interface NodeIKernelMsgListener extends IKernelMsgListener { + // eslint-disable-next-line @typescript-eslint/no-misused-new + new(listener: IKernelMsgListener): NodeIKernelMsgListener; +} + + +export class MsgListener implements IKernelMsgListener { + onAddSendMsg(msgRecord: RawMessage) { + + } + + onBroadcastHelperDownloadComplete(broadcastHelperTransNotifyInfo: unknown) { + + } + + onBroadcastHelperProgressUpdate(broadcastHelperTransNotifyInfo: unknown) { + + } + + onChannelFreqLimitInfoUpdate(contact: unknown, z: unknown, freqLimitInfo: unknown) { + + } + + onContactUnreadCntUpdate(hashMap: unknown) { + + } + + onCustomWithdrawConfigUpdate(customWithdrawConfig: unknown) { + + } + + onDraftUpdate(contact: unknown, arrayList: unknown, j2: unknown) { + + } + + onEmojiDownloadComplete(emojiNotifyInfo: unknown) { + + } + + onEmojiResourceUpdate(emojiResourceInfo: unknown) { + + } + + onFeedEventUpdate(firstViewDirectMsgNotifyInfo: unknown) { + + } + + onFileMsgCome(arrayList: unknown) { + + } + + onFirstViewDirectMsgUpdate(firstViewDirectMsgNotifyInfo: unknown) { + + } + + onFirstViewGroupGuildMapping(arrayList: unknown) { + + } + + onGrabPasswordRedBag(i2: unknown, str: unknown, i3: unknown, recvdOrder: unknown, msgRecord: unknown) { + + } + + onGroupFileInfoAdd(groupItem: unknown) { + + } + + onGroupFileInfoUpdate(groupFileListResult: onGroupFileInfoUpdateParamType) { + + } + + onGroupGuildUpdate(groupGuildNotifyInfo: unknown) { + + } + + + onGroupTransferInfoAdd(groupItem: unknown) { + + } + + onGroupTransferInfoUpdate(groupFileListResult: unknown) { + + } + + onGuildInteractiveUpdate(guildInteractiveNotificationItem: unknown) { + + } + + onGuildMsgAbFlagChanged(guildMsgAbFlag: unknown) { + + } + + onGuildNotificationAbstractUpdate(guildNotificationAbstractInfo: unknown) { + + } + + onHitCsRelatedEmojiResult(downloadRelateEmojiResultInfo: unknown) { + + } + + onHitEmojiKeywordResult(hitRelatedEmojiWordsResult: unknown) { + + } + + onHitRelatedEmojiResult(relatedWordEmojiInfo: unknown) { + + } + + onImportOldDbProgressUpdate(importOldDbMsgNotifyInfo: unknown) { + + } + + onInputStatusPush(inputStatusInfo: unknown) { + + } + + onKickedOffLine(kickedInfo: unknown) { + + } + + onLineDev(arrayList: unknown) { + + } + + onLogLevelChanged(j2: unknown) { + + } + + onMsgAbstractUpdate(arrayList: unknown) { + + } + + onMsgBoxChanged(arrayList: unknown) { + + } + + onMsgDelete(contact: unknown, arrayList: unknown) { + + } + + onMsgEventListUpdate(hashMap: unknown) { + + } + + onMsgInfoListAdd(arrayList: unknown) { + + } + + onMsgInfoListUpdate(msgList: RawMessage[]) { + + } + + onMsgQRCodeStatusChanged(i2: unknown) { + + } + + onMsgRecall(i2: unknown, str: unknown, j2: unknown) { + + } + + onMsgSecurityNotify(msgRecord: unknown) { + + } + + onMsgSettingUpdate(msgSetting: unknown) { + + } + + onNtFirstViewMsgSyncEnd() { + + } + + onNtMsgSyncEnd() { + + } + + onNtMsgSyncStart() { + + } + + onReadFeedEventUpdate(firstViewDirectMsgNotifyInfo: unknown) { + + } + + onRecvGroupGuildFlag(i2: unknown) { + + } + + onRecvMsg(arrayList: RawMessage[]) { + + } + + onRecvMsgSvrRspTransInfo(j2: unknown, contact: unknown, i2: unknown, i3: unknown, str: unknown, bArr: unknown) { + + } + + onRecvOnlineFileMsg(arrayList: unknown) { + + } + + onRecvS2CMsg(arrayList: unknown) { + + } + + onRecvSysMsg(arrayList: unknown) { + + } + + onRecvUDCFlag(i2: unknown) { + + } + + onRichMediaDownloadComplete(fileTransNotifyInfo: OnRichMediaDownloadCompleteParams) { + } + + onRichMediaProgerssUpdate(fileTransNotifyInfo: unknown) { + + } + + onRichMediaUploadComplete(fileTransNotifyInfo: unknown) { + + } + + onSearchGroupFileInfoUpdate(searchGroupFileResult: unknown) { + + } + + onSendMsgError(j2: unknown, contact: unknown, i2: unknown, str: unknown) { + + } + + onSysMsgNotification(i2: unknown, j2: unknown, j3: unknown, arrayList: unknown) { + + } + + onTempChatInfoUpdate(tempChatInfo: TempOnRecvParams) { + + } + + onUnreadCntAfterFirstView(hashMap: unknown) { + + } + + onUnreadCntUpdate(hashMap: unknown) { + + } + + onUserChannelTabStatusChanged(z: unknown) { + + } + + onUserOnlineStatusChanged(z: unknown) { + + } + + onUserTabStatusChanged(arrayList: unknown) { + + } + + onlineStatusBigIconDownloadPush(i2: unknown, j2: unknown, str: unknown) { + + } + + onlineStatusSmallIconDownloadPush(i2: unknown, j2: unknown, str: unknown) { + + } + + // 第一次发现于Linux + onUserSecQualityChanged(...args: unknown[]) { + + } + + onMsgWithRichLinkInfoUpdate(...args: unknown[]) { + + } + + onRedTouchChanged(...args: unknown[]) { + + } + // 第一次发现于Win 9.9.9-23159 + onBroadcastHelperProgerssUpdate(...args: unknown[]) { + + } +} diff --git a/src/core/listeners/NodeIKernelProfileListener.ts b/src/core/listeners/NodeIKernelProfileListener.ts new file mode 100644 index 00000000..10212d07 --- /dev/null +++ b/src/core/listeners/NodeIKernelProfileListener.ts @@ -0,0 +1,43 @@ +import { User, UserDetailInfoListenerArg } from '@/core/entities'; + +interface IProfileListener { + onProfileSimpleChanged(...args: unknown[]): void; + onUserDetailInfoChanged(arg: UserDetailInfoListenerArg): void; + onProfileDetailInfoChanged(profile: User): void; + + onStatusUpdate(...args: unknown[]): void; + + onSelfStatusChanged(...args: unknown[]): void; + + onStrangerRemarkChanged(...args: unknown[]): void; +} + +export interface NodeIKernelProfileListener extends IProfileListener { + // eslint-disable-next-line @typescript-eslint/no-misused-new + new(listener: IProfileListener): NodeIKernelProfileListener; +} + +export class ProfileListener implements IProfileListener { + onUserDetailInfoChanged(arg: UserDetailInfoListenerArg): void { + + } + onProfileSimpleChanged(...args: unknown[]) { + + } + + onProfileDetailInfoChanged(profile: User) { + + } + + onStatusUpdate(...args: unknown[]) { + + } + + onSelfStatusChanged(...args: unknown[]) { + + } + + onStrangerRemarkChanged(...args: unknown[]) { + + } +} diff --git a/src/core/listeners/NodeIKernelRecentContactListener.ts b/src/core/listeners/NodeIKernelRecentContactListener.ts new file mode 100644 index 00000000..0c03904b --- /dev/null +++ b/src/core/listeners/NodeIKernelRecentContactListener.ts @@ -0,0 +1,44 @@ +interface IKernelRecentContactListener { + onDeletedContactsNotify(...args: unknown[]): unknown; + + onRecentContactNotification(...args: unknown[]): unknown; + + onMsgUnreadCountUpdate(...args: unknown[]): unknown; + + onGuildDisplayRecentContactListChanged(...args: unknown[]): unknown; + + onRecentContactListChanged(...args: unknown[]): unknown; + + onRecentContactListChangedVer2(...args: unknown[]): unknown; +} + +export interface NodeIKernelRecentContactListener extends IKernelRecentContactListener { + // eslint-disable-next-line @typescript-eslint/no-misused-new + new(listener: IKernelRecentContactListener): NodeIKernelRecentContactListener; +} + +export class KernelRecentContactListener implements IKernelRecentContactListener { + onDeletedContactsNotify(...args: unknown[]) { + + } + + onRecentContactNotification(...args: unknown[]) { + + } + + onMsgUnreadCountUpdate(...args: unknown[]) { + + } + + onGuildDisplayRecentContactListChanged(...args: unknown[]) { + + } + + onRecentContactListChanged(...args: unknown[]) { + + } + + onRecentContactListChangedVer2(...args: unknown[]) { + + } +} diff --git a/src/core/listeners/NodeIKernelRobotListener.ts b/src/core/listeners/NodeIKernelRobotListener.ts new file mode 100644 index 00000000..9c319fee --- /dev/null +++ b/src/core/listeners/NodeIKernelRobotListener.ts @@ -0,0 +1,28 @@ + + +export interface IKernelRobotListener { + onRobotFriendListChanged(...args: unknown[]): void; + + onRobotListChanged(...args: unknown[]): void; + + onRobotProfileChanged(...args: unknown[]): void; +} + +export interface NodeIKernelRobotListener extends IKernelRobotListener { + // eslint-disable-next-line @typescript-eslint/no-misused-new + new(adapter: IKernelRobotListener): NodeIKernelRobotListener; +} + +export class KernelRobotListener implements IKernelRobotListener { + onRobotFriendListChanged(...args: unknown[]){ + + } + + onRobotListChanged(...args: unknown[]){ + + } + + onRobotProfileChanged(...args: unknown[]){ + + } +} diff --git a/src/core/listeners/NodeIKernelSessionListener.ts b/src/core/listeners/NodeIKernelSessionListener.ts new file mode 100644 index 00000000..4653a484 --- /dev/null +++ b/src/core/listeners/NodeIKernelSessionListener.ts @@ -0,0 +1,44 @@ +export interface ISessionListener { + onNTSessionCreate(args: unknown): void; + + onGProSessionCreate(args: unknown): void; + + onSessionInitComplete(args: unknown): void; + + onOpentelemetryInit(args: unknown): void; + + onUserOnlineResult(args: unknown): void; + + onGetSelfTinyId(args: unknown): void; +} + +export interface NodeIKernelSessionListener extends ISessionListener { + // eslint-disable-next-line @typescript-eslint/no-misused-new + new(adapter: ISessionListener): NodeIKernelSessionListener; +} + +export class SessionListener implements ISessionListener { + onNTSessionCreate(args: unknown) { + + } + + onGProSessionCreate(args: unknown) { + + } + + onSessionInitComplete(args: unknown) { + + } + + onOpentelemetryInit(args: unknown) { + + } + + onUserOnlineResult(args: unknown) { + + } + + onGetSelfTinyId(args: unknown) { + + } +} diff --git a/src/core/listeners/NodeIKernelStorageCleanListener.ts b/src/core/listeners/NodeIKernelStorageCleanListener.ts new file mode 100644 index 00000000..ed872d88 --- /dev/null +++ b/src/core/listeners/NodeIKernelStorageCleanListener.ts @@ -0,0 +1,37 @@ +export interface IStorageCleanListener { + onCleanCacheProgressChanged(args: unknown): void; + + onScanCacheProgressChanged(args: unknown): void; + + onCleanCacheStorageChanged(args: unknown): void; + + onFinishScan(args: unknown): void; + + onChatCleanDone(args: unknown): void; + +} +export interface NodeIKernelStorageCleanListener extends IStorageCleanListener { + // eslint-disable-next-line @typescript-eslint/no-misused-new + new(adapter: IStorageCleanListener): NodeIKernelStorageCleanListener; +} + +export class StorageCleanListener implements IStorageCleanListener { + onCleanCacheProgressChanged(args: unknown) { + + } + + onScanCacheProgressChanged(args: unknown) { + + } + + onCleanCacheStorageChanged(args: unknown) { + + } + onFinishScan(args: unknown) { + + } + + onChatCleanDone(args: unknown) { + + } +} \ No newline at end of file diff --git a/src/core/listeners/NodeIKernelTicketListener.ts b/src/core/listeners/NodeIKernelTicketListener.ts new file mode 100644 index 00000000..1fe32a15 --- /dev/null +++ b/src/core/listeners/NodeIKernelTicketListener.ts @@ -0,0 +1,9 @@ +export interface IKernelTicketListener { +} +export interface NodeIKernelTicketListener extends IKernelTicketListener { + // eslint-disable-next-line @typescript-eslint/no-misused-new + new(adapter: IKernelTicketListener): NodeIKernelTicketListener; +} + +export class KernelTicketListener implements IKernelTicketListener { +} \ No newline at end of file diff --git a/src/core/listeners/index.ts b/src/core/listeners/index.ts new file mode 100644 index 00000000..cc8ad4a2 --- /dev/null +++ b/src/core/listeners/index.ts @@ -0,0 +1,12 @@ + +export * from './NodeIKernelSessionListener'; +export * from './NodeIKernelLoginListener'; +export * from './NodeIKernelMsgListener'; +export * from './NodeIKernelGroupListener'; +export * from './NodeIKernelBuddyListener'; +export * from './NodeIKernelProfileListener'; +export * from './NodeIKernelRobotListener'; +export * from './NodeIKernelTicketListener'; +export * from './NodeIKernelStorageCleanListener'; +export * from './NodeIKernelFileAssistantListener'; + diff --git a/src/core/services/NodeIKernelAlbumService.ts b/src/core/services/NodeIKernelAlbumService.ts new file mode 100644 index 00000000..651f764b --- /dev/null +++ b/src/core/services/NodeIKernelAlbumService.ts @@ -0,0 +1,46 @@ +export interface NodeIKernelAlbumService { + setAlbumServiceInfo(...args: any[]): unknown;// needs 3 arguments + + getMainPage(...args: any[]): unknown;// needs 2 arguments + + getAlbumList(...args: any[]): unknown;// needs 1 arguments + + getAlbumInfo(...args: any[]): unknown;// needs 1 arguments + + deleteAlbum(...args: any[]): unknown;// needs 3 arguments + + addAlbum(...args: any[]): unknown;// needs 2 arguments + + deleteMedias(...args: any[]): unknown;// needs 4 arguments + + modifyAlbum(...args: any[]): unknown;// needs 3 arguments + + getMediaList(...args: any[]): unknown;// needs 1 arguments + + quoteToQzone(...args: any[]): unknown;// needs 1 arguments + + quoteToQunAlbum(...args: any[]): unknown;// needs 1 arguments + + queryQuoteToQunAlbumStatus(...args: any[]): unknown;// needs 1 arguments + + getQunFeeds(...args: any[]): unknown;//needs 1 arguments + + getQunFeedDetail(...args: any[]): unknown;// needs 1 arguments + + getQunNoticeList(...args: any[]): unknown;// needs 4 arguments + + getQunComment(...args: any[]): unknown;// needs 1 arguments + + getQunLikes(...args: any[]): unknown;// needs 4 arguments + + deleteQunFeed(...args: any[]): unknown;// needs 1 arguments + + doQunComment(...args: any[]): unknown;// needs 6 arguments + + doQunReply(...args: any[]): unknown;// needs 7 arguments + + doQunLike(...args: any[]): unknown;// needs 5 arguments + + getRedPoints(...args: any[]): unknown;// needs 3 arguments + +} \ No newline at end of file diff --git a/src/core/services/NodeIKernelAvatarService.ts b/src/core/services/NodeIKernelAvatarService.ts new file mode 100644 index 00000000..e8541846 --- /dev/null +++ b/src/core/services/NodeIKernelAvatarService.ts @@ -0,0 +1,31 @@ +export interface NodeIKernelAvatarService { + addAvatarListener(arg: unknown): unknown; + + removeAvatarListener(arg: unknown): unknown; + + getAvatarPath(arg1: unknown, arg2: unknown): unknown; + + forceDownloadAvatar(uid: string, useCache: number): Promise; + + getGroupAvatarPath(arg1: unknown, arg2: unknown): unknown; + + getConfGroupAvatarPath(arg: unknown): unknown; + + forceDownloadGroupAvatar(arg1: unknown, arg2: unknown): unknown; + + getGroupPortraitPath(arg1: unknown, arg2: unknown, arg3: unknown): unknown; + + forceDownloadGroupPortrait(arg1: unknown, arg2: unknown, arg3: unknown): unknown; + + getAvatarPaths(arg1: unknown, arg2: unknown): unknown; + + getGroupAvatarPaths(arg1: unknown, arg2: unknown): unknown; + + getConfGroupAvatarPaths(arg: unknown): unknown; + + getAvatarPathByUin(arg1: unknown, arg2: unknown): unknown; + + forceDownloadAvatarByUin(arg1: unknown, arg2: unknown): unknown; + + isNull(): boolean; +} \ No newline at end of file diff --git a/src/core/services/NodeIKernelBuddyService.ts b/src/core/services/NodeIKernelBuddyService.ts new file mode 100644 index 00000000..1d28a300 --- /dev/null +++ b/src/core/services/NodeIKernelBuddyService.ts @@ -0,0 +1,128 @@ +import { Friend } from '@/core/entities'; +import { GeneralCallResult } from '@/core/services/common'; +import { NodeIKernelBuddyListener } from '@/core/listeners'; +export enum BuddyListReqType { + KNOMAL, + KLETTER +} +export interface NodeIKernelBuddyService { + // 26702 以上 + getBuddyListV2(callFrom: string, reqType: BuddyListReqType): Promise + }> + }>; + //26702 以上 + getBuddyListFromCache(callFrom: string): Promise//Uids + }>>; + // 以下为原生方法 + addKernelBuddyListener(listener: NodeIKernelBuddyListener): number; + + getAllBuddyCount(): number; + + removeKernelBuddyListener(listener: unknown): void; + + /** + * @deprecated + * @param nocache 使用缓存 + */ + 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/core/services/NodeIKernelCollectionService.ts b/src/core/services/NodeIKernelCollectionService.ts new file mode 100644 index 00000000..74ed399f --- /dev/null +++ b/src/core/services/NodeIKernelCollectionService.ts @@ -0,0 +1,91 @@ +import { GeneralCallResult } from "./common"; + +export interface NodeIKernelCollectionService { + addKernelCollectionListener(...args: any[]): unknown;//needs 1 arguments + + removeKernelCollectionListener(...args: any[]): unknown;//needs 1 arguments + + getCollectionItemList(param: { + category: number, + groupId: number, + forceSync: boolean, + forceFromDb: boolean, + timeStamp: string, + count: number, + searchDown: boolean + }): Promise, + hasMore: boolean, + bottomTimeStamp: string + } + } + >;//needs 1 arguments + + getCollectionContent(...args: any[]): unknown;//needs 5 arguments + + getCollectionCustomGroupList(...args: any[]): unknown;//needs 0 arguments + + getCollectionUserInfo(...args: any[]): unknown;//needs 0 arguments + + searchCollectionItemList(...args: any[]): unknown;//needs 2 arguments + + addMsgToCollection(...args: any[]): unknown;//needs 2 arguments + + collectionArkShare(...args: any[]): unknown;//needs 1 arguments + + collectionFileForward(...args: any[]): unknown;//needs 3 arguments + + downloadCollectionFile(...args: any[]): unknown;//needs 4 arguments + + downloadCollectionFileThumbPic(...args: any[]): unknown;//needs 4 arguments + + downloadCollectionPic(...args: any[]): unknown;//needs 3 arguments + + cancelDownloadCollectionFile(...args: any[]): unknown;//needs 1 arguments + + deleteCollectionItemList(...args: any[]): unknown;//needs 1 arguments + + editCollectionItem(...args: any[]): unknown;//needs 2 arguments + + getEditPicInfoByPath(...args: any[]): unknown;//needs 1 arguments + + collectionFastUpload(...args: any[]): unknown;//needs 1 arguments + + editCollectionItemAfterFastUpload(...args: any[]): unknown;//needs 2 arguments + + createNewCollectionItem(...args: any[]): unknown;//needs 1 arguments +} \ No newline at end of file diff --git a/src/core/services/NodeIKernelDbToolsService.ts b/src/core/services/NodeIKernelDbToolsService.ts new file mode 100644 index 00000000..7c2b3ceb --- /dev/null +++ b/src/core/services/NodeIKernelDbToolsService.ts @@ -0,0 +1,5 @@ +export interface NodeIKernelDbToolsService { + depositDatabase(...args: unknown[]): unknown; + backupDatabase(...args: unknown[]): unknown; + retrieveDatabase(...args: unknown[]): unknown; +} diff --git a/src/core/services/NodeIKernelECDHService.ts b/src/core/services/NodeIKernelECDHService.ts new file mode 100644 index 00000000..8196b269 --- /dev/null +++ b/src/core/services/NodeIKernelECDHService.ts @@ -0,0 +1,3 @@ +export interface NodeIKernelECDHService{ + +} \ No newline at end of file diff --git a/src/core/services/NodeIKernelFileAssistantService.ts b/src/core/services/NodeIKernelFileAssistantService.ts new file mode 100644 index 00000000..66037223 --- /dev/null +++ b/src/core/services/NodeIKernelFileAssistantService.ts @@ -0,0 +1,35 @@ +export interface NodeIKernelFileAssistantService { + addKernelFileAssistantListener(arg1: unknown[]): unknown; + + removeKernelFileAssistantListener(arg1: unknown[]): unknown; + + getFileAssistantList(arg1: unknown[]): unknown; + + getMoreFileAssistantList(arg1: unknown[]): unknown; + + getFileSessionList(): unknown; + + searchFile(arg1: unknown, arg2: unknown, arg3: unknown): unknown; + + resetSearchFileSortType(arg1: unknown, arg2: unknown, arg3: unknown): unknown; + + searchMoreFile(arg1: unknown[]): unknown; + + cancelSearchFile(arg1: unknown, arg2: unknown, arg3: unknown): unknown; + + downloadFile(arg1: unknown[]): unknown; + + forwardFile(arg1: unknown, arg2: unknown, arg3: unknown): unknown; + + cancelFileAction(arg1: unknown[]): unknown; + + retryFileAction(arg1: unknown[]): unknown; + + deleteFile(arg1: unknown[]): unknown; + + saveAs(arg1: unknown, arg2: unknown): unknown; + + saveAsWithRename(arg1: unknown, arg2: unknown, arg3: unknown): unknown; + + isNull(): boolean; +} \ No newline at end of file diff --git a/src/core/services/NodeIKernelGroupService.ts b/src/core/services/NodeIKernelGroupService.ts new file mode 100644 index 00000000..a8c23a2f --- /dev/null +++ b/src/core/services/NodeIKernelGroupService.ts @@ -0,0 +1,249 @@ +import { NodeIKernelGroupListener } from '@/core/listeners/NodeIKernelGroupListener'; +import { + GroupExtParam, + GroupMember, + GroupMemberRole, + GroupNotifyTypes, + GroupRequestOperateTypes, +} from '@/core/entities'; +import { GeneralCallResult } from '@/core/services/common'; + +//高版本的接口不应该随意使用 使用应该严格进行pr审核 同时部分ipc中未出现的接口不要过于依赖 应该做好数据兜底 + +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; + + getUinByUids(uins: string[]): Promise<{ + errCode: number, + errMsg: string, + uins: Map + }>; + + getUidByUins(uins: string[]): Promise<{ + 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; + //26702(其实更早 但是我不知道) + isEssenceMsg(Req: { groupCode: string, msgRandom: number, msgSeq: number }): Promise; + //26702(其实更早 但是我不知道) + queryCachedEssenceMsg(Req: { groupCode: string, msgRandom: number, msgSeq: number }): Promise; + //26702(其实更早 但是我不知道) + 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: {}, + finish: true, + hasRobot: false + } + }>; + + setHeader(uid: string, path: string): unknown; + + addKernelGroupListener(listener: NodeIKernelGroupListener): number; + + removeKernelGroupListener(listenerId: unknown): void; + + createMemberListScene(groupCode: string, scene: string): string; + + destroyMemberListScene(SceneId:string): void; + //About Arg (a) name: lastId 根据手Q来看为object {index:?(number),uid:string} + getNextMemberList(sceneId: string, a: undefined, num: number): Promise<{ + errCode: number, errMsg: string, + result: { ids: string[], infos: Map, finish: boolean, hasRobot: boolean } + }>; + + 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; + + operateSysNotify( + doubt: boolean, + operateMsg: { + operateType: GroupRequestOperateTypes, // 2 拒绝 + targetMsg: { + seq: string, // 通知序列号 + type: GroupNotifyTypes, + groupCode: string, + postscript: string + } + }): Promise; + + setTop(groupCode: string, isTop: boolean): void; + + getGroupBulletin(groupCode: string): unknown; + + deleteGroupBulletin(groupCode: string, seq: string): void; + + publishGroupBulletin(groupCode: string, pskey: string, data: any): Promise; + + publishInstructionForNewcomers(groupCode: string, arg: unknown): void; + + uploadGroupBulletinPic(groupCode: string, pskey: string, imagePath: string): Promise; + + 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; + + setGroupShutUp(groupCode: string, shutUp: boolean): void; + + getGroupShutUpMemberList(groupCode: string): unknown[]; + + setMemberShutUp(groupCode: string, memberTimes: { uid: string, timeStamp: number }[]): Promise; + + getGroupRecommendContactArkJson(groupCode: string): unknown; + + getJoinGroupLink(groupCode: string): unknown; + + 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; +} diff --git a/src/core/services/NodeIKernelLoginService.ts b/src/core/services/NodeIKernelLoginService.ts new file mode 100644 index 00000000..d3941f6b --- /dev/null +++ b/src/core/services/NodeIKernelLoginService.ts @@ -0,0 +1,82 @@ +import { NodeIKernelLoginListener } from '@/core/listeners/NodeIKernelLoginListener'; + +export interface LoginInitConfig { + machineId: ''; + appid: string; + platVer: string; + commonPath: string; + clientVer: string; + hostName: string; +} + +export interface passwordLoginRetType { + result: string, + loginErrorInfo: { + step: number; + errMsg: string; + proofWaterUrl: string; + newDevicePullQrCodeSig: string; + jumpUrl: string, + jumpWord: string; + tipsTitle: string; + tipsContent: string; + } +} + +export interface passwordLoginArgType { + uin: string; + passwordMd5: string;//passwMD5 + step: number;//猜测是需要二次认证 参数 一次为0 + newDeviceLoginSig: string; + proofWaterSig: string; + proofWaterRand: string; + proofWaterSid: string; +} + +export interface LoginListItem { + uin: string; + uid: string; + nickName: string; + faceUrl: string; + facePath: string; + loginType: 1; // 1是二维码登录? + isQuickLogin: boolean; // 是否可以快速登录 + isAutoLogin: boolean; // 是否可以自动登录 +} + +export interface QuickLoginResult{ + result: string + loginErrorInfo: { + step: number, + errMsg: string, + proofWaterUrl: string, + newDevicePullQrCodeSig: string, + jumpUrl: string, + jumpWord: string, + tipsTitle: string, + tipsContent: string + } +} + +export interface NodeIKernelLoginService { + // eslint-disable-next-line @typescript-eslint/no-misused-new + new(): NodeIKernelLoginService; + + addKernelLoginListener(listener: NodeIKernelLoginListener): number; + removeKernelLoginListener(listener: number): void; + + initConfig(config: LoginInitConfig): void; + + getLoginMiscData(cb: (r: unknown) => void): void; + + getLoginList(): Promise<{ + result: number, // 0是ok + LocalLoginInfoList: LoginListItem[] + }>; + + quickLoginWithUin(uin: string): Promise; + + passwordLogin(param: passwordLoginArgType): Promise; + + getQRCodePicture(): boolean; +} diff --git a/src/core/services/NodeIKernelMSFService.ts b/src/core/services/NodeIKernelMSFService.ts new file mode 100644 index 00000000..fe63ed60 --- /dev/null +++ b/src/core/services/NodeIKernelMSFService.ts @@ -0,0 +1,3 @@ +export interface NodeIKernelMSFService { + getServerTime(): string; +} \ No newline at end of file diff --git a/src/core/services/NodeIKernelMsgBackupService.ts b/src/core/services/NodeIKernelMsgBackupService.ts new file mode 100644 index 00000000..aef276fc --- /dev/null +++ b/src/core/services/NodeIKernelMsgBackupService.ts @@ -0,0 +1,27 @@ +export interface NodeIKernelMsgBackupService { + addKernelMsgBackupListener(...args: any[]): unknown;// needs 1 arguments + + removeKernelMsgBackupListener(...args: any[]): unknown;// needs 1 arguments + + getMsgBackupLocation(...args: any[]): unknown;// needs 0 arguments + + setMsgBackupLocation(...args: any[]): unknown;// needs 1 arguments + + requestMsgBackup(...args: any[]): unknown;// needs 0 arguments + + requestMsgRestore(...args: any[]): unknown;// needs 1 arguments + + requestMsgMigrate(...args: any[]): unknown;// needs 1 arguments + + getLocalStorageBackup(...args: any[]): unknown;// needs 0 arguments + + deleteLocalBackup(...args: any[]): unknown;// needs 1 arguments + + clearCache(...args: any[]): unknown;// needs 0 arguments + + start(...args: any[]): unknown;// needs 1 arguments + + stop(...args: any[]): unknown;// needs 1 arguments + + pause(...args: any[]): unknown;// needs 2 arguments +} \ No newline at end of file diff --git a/src/core/services/NodeIKernelMsgService.ts b/src/core/services/NodeIKernelMsgService.ts new file mode 100644 index 00000000..61c01d7c --- /dev/null +++ b/src/core/services/NodeIKernelMsgService.ts @@ -0,0 +1,727 @@ +import { ElementType, MessageElement, Peer, RawMessage, SendMessageElement } from '@/core/entities'; +import { NodeIKernelMsgListener } from '@/core/listeners/NodeIKernelMsgListener'; +import { GeneralCallResult } from '@/core/services/common'; + +export interface QueryMsgsParams { + chatInfo: Peer, + filterMsgType: [], + filterSendersUid: string[], + filterMsgFromTime: string, + filterMsgToTime: string, + pageLimit: number, + isReverseOrder: boolean, + isIncludeCurrent: boolean +} +export interface NodeIKernelMsgService { + + generateMsgUniqueId(chatType: number, time: string): string; + + addKernelMsgListener(nodeIKernelMsgListener: NodeIKernelMsgListener): number; + + sendMsg(msgId: string, peer: Peer, msgElements: SendMessageElement[], map: Map): Promise; + + recallMsg(peer: Peer, msgIds: string[]): Promise; + + addKernelMsgImportToolListener(arg: Object): 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: Object): 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: Object): unknown; + + switchForeGround(): unknown; + + switchBackGround(arg: Object): 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; + + recallMsg(...args: unknown[]): unknown; + + reeditRecallMsg(...args: unknown[]): unknown; + + forwardMsg(...args: unknown[]): Promise; + + forwardMsgWithComment(...args: unknown[]): unknown; + + 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; + + 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): unknown; + + 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; + + 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; + + 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; + //cnt clientSeq?并不是吧 + 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; + + /** + * @deprecated 该函数已被标记为废弃,请使用新的替代方法。 + * 使用过滤条件查询消息列表的版本2接口。 + * + * 该函数通过一系列过滤条件来查询特定聊天中的消息列表。这些条件包括消息类型、发送者、时间范围等。 + * 函数返回一个Promise,解析为查询结果的未知类型对象。 + * + * @param MsgId 消息ID,用于特定消息的查询。 + * @param MsgTime 消息时间,用于指定消息的时间范围。 + * @param param 查询参数对象,包含详细的过滤条件和分页信息。 + * @param param.chatInfo 聊天信息,包括聊天类型和对方用户ID。 + * @param param.filterMsgType 需要过滤的消息类型数组,留空表示不过滤。 + * @param param.filterSendersUid 需要过滤的发送者用户ID数组。 + * @param param.filterMsgFromTime 查询消息的起始时间。 + * @param param.filterMsgToTime 查询消息的结束时间。 + * @param param.pageLimit 每页的消息数量限制。 + * @param param.isReverseOrder 是否按时间顺序倒序返回消息。 + * @param param.isIncludeCurrent 是否包含当前页码。 + * @returns 返回一个Promise,解析为查询结果的未知类型对象。 + */ + queryMsgsWithFilterVer2(MsgId: string, MsgTime: string, param: QueryMsgsParams): Promise; + + // 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, + file_uuid: '' + }): string; + + assembleMobileQQRichMediaFilePath(...args: unknown[]): unknown; + + getFileThumbSavePathForSend(...args: unknown[]): unknown; + + getFileThumbSavePath(...args: unknown[]): unknown; + //猜测居多 + translatePtt2Text(MsgId: string, Peer: {}, MsgElement: {}): 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: any/*joinDragonGroupEmojiReq*/): 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<{ + result: number, + errMsg: string, + emojiLikesList: + Array<{ + tinyId: string, + nickName: string, + headUrl: string + }>, + cookie: string, + isLastPage: boolean, + 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; + + //chattype,uid->Promise + getTempChatInfo(ChatType: number, Uid: string): unknown; + + 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: Object): 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;//这是嘛啊 + +} diff --git a/src/core/services/NodeIKernelNodeMiscService.ts b/src/core/services/NodeIKernelNodeMiscService.ts new file mode 100644 index 00000000..150c2a69 --- /dev/null +++ b/src/core/services/NodeIKernelNodeMiscService.ts @@ -0,0 +1,12 @@ +import { GeneralCallResult } from "./common"; + +//没扒干净 因为用不着 +export interface NodeIKernelNodeMiscService { + getMiniAppPath(): unknown; + setMiniAppVersion(version:string): unknown; + wantWinScreenOCR(imagepath: string): Promise; + SendMiniAppMsg(arg1: string, arg2: string, arg3: string): unknown; + startNewMiniApp(appfile: string, params: string): unknown; + // 我的计划是转发给一个新程序避免吃掉Electron_AS_Node的环境 然后重写启动MiniApp 挂载相应JS脚本 这样有个问题 + // 需要自己转发ipc参数 然后必须处在gui环境 且完成校验破解 才能实现发包 有点抽象了 +} \ No newline at end of file diff --git a/src/core/services/NodeIKernelOnlineStatusService.ts b/src/core/services/NodeIKernelOnlineStatusService.ts new file mode 100644 index 00000000..b89f5e01 --- /dev/null +++ b/src/core/services/NodeIKernelOnlineStatusService.ts @@ -0,0 +1,36 @@ +export interface NodeIKernelOnlineStatusService { + + addKernelOnlineStatusListener(listener: unknown): void; + + removeKernelOnlineStatusListener(listenerId: unknown): void; + + getShouldShowAIOStatusAnimation(arg: unknown): unknown; + + setReadLikeList(arg: unknown): unknown; + + getLikeList(arg: unknown): unknown; + + setLikeStatus(arg: unknown): unknown; + + getAggregationPageEntrance(): unknown; + + didClickAggregationPageEntrance(): unknown; + + getAggregationGroupModels(): unknown; + + // { + // "businessType": 1, + // "uins": [ + // "1627126029", + // "66600000", + // "71702575" + // ] + // } + + checkLikeStatus(param: { + businessType: number, + uins: string[] + }): Promise; + + isNull(): boolean; +} diff --git a/src/core/services/NodeIKernelProfileLikeService.ts b/src/core/services/NodeIKernelProfileLikeService.ts new file mode 100644 index 00000000..fa765695 --- /dev/null +++ b/src/core/services/NodeIKernelProfileLikeService.ts @@ -0,0 +1,22 @@ +import { BuddyProfileLikeReq } from "../entities/user"; +import { GeneralCallResult } from "./common"; + +export interface NodeIKernelProfileLikeService { + addKernelProfileLikeListener(listener: NodeIKernelProfileLikeService): void; + + removeKernelProfileLikeListener(listener: unknown): void; + + setBuddyProfileLike(...args: unknown[]): { result: number, errMsg: string, succCounts: number }; + + getBuddyProfileLike(req: BuddyProfileLikeReq): Promise, + "friendMaxVotes": number, + "start": number + } + }>; + + getProfileLikeScidResourceInfo(...args: unknown[]): void; + + isNull(): boolean; +} diff --git a/src/core/services/NodeIKernelProfileService.ts b/src/core/services/NodeIKernelProfileService.ts new file mode 100644 index 00000000..e626a332 --- /dev/null +++ b/src/core/services/NodeIKernelProfileService.ts @@ -0,0 +1,103 @@ +import { AnyCnameRecord } from 'node:dns'; +import { BaseInfo, BizKey, CoreInfo, ModifyProfileParams, SimpleInfo, UserDetailInfoByUin } from '../entities'; +import { NodeIKernelProfileListener } from '../listeners'; +import { GeneralCallResult } from '@/core/services/common'; +export enum UserDetailSource { + KDB, + KSERVER +} +export enum ProfileBizType { + KALL, + KBASEEXTEND, + KVAS, + KQZONE, + KOTHER +} +export interface NodeIKernelProfileService { + + getUidByUin(callfrom: string, uin: Array): Promise>;//uin->uid + + 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: NodeIKernelProfileListener): 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: ModifyProfileParams): 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: BizKey[]): 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: any[]): unknown; + //m429253e12.getOtherFlag("FriendListInfoCache_getKernelDataAndPutCache", new ArrayList<>()); + isNull(): boolean; +} diff --git a/src/core/services/NodeIKernelRecentContactService.ts b/src/core/services/NodeIKernelRecentContactService.ts new file mode 100644 index 00000000..ffe8cc96 --- /dev/null +++ b/src/core/services/NodeIKernelRecentContactService.ts @@ -0,0 +1,99 @@ +import { ChatType, Peer } from "../entities"; +import { NodeIKernelRecentContactListener } from "../listeners/NodeIKernelRecentContactListener"; +import { GeneralCallResult } from "./common"; +export interface FSABRecentContactParams { + anchorPointContact: { + contactId: string; + sortField: string; + pos: number; + }, + relativeMoveCount: number; + listType: number; + count: number; + fetchOld: boolean; +} +// { +// "anchorPointContact": { +// "contactId": "", +// "sortField": "", +// "pos": 0 +// }, +// "relativeMoveCount": 0, +// "listType": 1, +// "count": 200, +// "fetchOld": true +// } +export interface NodeIKernelRecentContactService { + setGuildDisplayStatus(...args: unknown[]): unknown; // 2 arguments + + setContactListTop(...args: unknown[]): unknown; // 2 arguments + + updateRecentContactExtBufForUI(...args: unknown[]): unknown; // 2 arguments + + upsertRecentContactManually(...args: unknown[]): unknown; // 1 arguments + + enterOrExitMsgList(...args: unknown[]): unknown; // 1 arguments + + /*!---!*/getRecentContactListSnapShot(count: number): Promise, + changedList: Array<{ + remark: any; + peerName: any; + sendMemberName: any; + sendNickName: any; + peerUid: string; peerUin: string, msgTime: string, chatType: ChatType, msgId: string + }> + } + }>; // 1 arguments + + clearMsgUnreadCount(...args: unknown[]): unknown; // 1 arguments + + getRecentContactListSyncLimit(count: number): unknown; + + jumpToSpecifyRecentContact(...args: unknown[]): unknown; // 1 arguments + + /*!---!*/fetchAndSubscribeABatchOfRecentContact(params: FSABRecentContactParams): unknown; // 1 arguments + + addRecentContact(peer: Peer): unknown; + + deleteRecentContacts(peer: Peer): unknown; // 猜测 + + getContacts(peers: Peer[]): Promise; + + setThirdPartyBusinessInfos(...args: unknown[]): unknown; // 1 arguments + + updateGameMsgConfigs(...args: unknown[]): unknown; // 1 arguments + + removeKernelRecentContactListener(listenerid: number): unknown; // 1 arguments + + addKernelRecentContactListener(listener: NodeIKernelRecentContactListener): void; + + clearRecentContactsByChatType(...args: unknown[]): unknown; // 1 arguments + + upInsertModule(...args: unknown[]): unknown; // 1 arguments + + jumpToSpecifyRecentContactVer2(...args: unknown[]): unknown; // 1 arguments + + deleteRecentContactsVer2(...args: unknown[]): unknown; // 1 arguments + + getRecentContactList(): Promise; + + getMsgUnreadCount(): unknown; + + clearRecentContacts(): unknown; + + getServiceAssistantRecentContactInfos(): unknown; + + getRecentContactInfos(): unknown; + + getUnreadDetailsInfos(): unknown; + + cleanAllModule(): unknown; + + setAllGameMsgRead(): unknown; + + getRecentContactListSync(): unknown; +} \ No newline at end of file diff --git a/src/core/services/NodeIKernelRichMediaService.ts b/src/core/services/NodeIKernelRichMediaService.ts new file mode 100644 index 00000000..b9bd321a --- /dev/null +++ b/src/core/services/NodeIKernelRichMediaService.ts @@ -0,0 +1,266 @@ +import { GetFileListParam, MessageElement, Peer, SendMessageElement } from "../entities"; +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; + + // 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; + + createGroupFolder(arg1: unknown, arg2: unknown): unknown; + + downloadGroupFolder(arg1: unknown, arg2: unknown, arg3: unknown): unknown; + + renameGroupFolder(arg1: unknown, arg2: unknown, arg3: unknown): unknown; + + deleteGroupFolder(arg1: unknown, arg2: 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; + + 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 + 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/core/services/NodeIKernelRobotService.ts b/src/core/services/NodeIKernelRobotService.ts new file mode 100644 index 00000000..9df5cdce --- /dev/null +++ b/src/core/services/NodeIKernelRobotService.ts @@ -0,0 +1,35 @@ +import { NodeIKernelRobotListener } from "@/core/listeners"; + +export interface NodeIKernelRobotService { + fetchGroupRobotStoreDiscovery(arg: unknown): unknown; + + sendGroupRobotStoreSearch(arg: unknown): unknown; + + fetchGroupRobotStoreCategoryList(arg: unknown): unknown; + + FetchSubscribeMsgTemplate(arg: unknown): unknown; + + FetchSubcribeMsgTemplateStatus(arg: unknown): unknown; + + SubscribeMsgTemplateSet(arg1: unknown, arg2: unknown): unknown; + + fetchRecentUsedRobots(arg: unknown): unknown; + + fetchShareArkInfo(arg: unknown): unknown; + + addKernelRobotListener(Listener: NodeIKernelRobotListener): number; + + removeKernelRobotListener(ListenerId: number): unknown; + + getAllRobotFriendsFromCache(): Promise; + + fetchAllRobots(arg1: unknown, arg2: unknown): unknown; + + removeAllRecommendCache(): unknown; + + setRobotPickTts(arg1: unknown, arg2: unknown): unknown; + + getRobotUinRange(data: any): Promise<{ response: { robotUinRanges: any } }> + + isNull(): boolean; +} diff --git a/src/core/services/NodeIKernelSearchService.ts b/src/core/services/NodeIKernelSearchService.ts new file mode 100644 index 00000000..3f91a0e3 --- /dev/null +++ b/src/core/services/NodeIKernelSearchService.ts @@ -0,0 +1,129 @@ +import { ChatType } from "../entities"; + +export interface NodeIKernelSearchService { + addKernelSearchListener(...args: any[]): unknown;// needs 1 arguments + + removeKernelSearchListener(...args: any[]): unknown;// needs 1 arguments + + searchStranger(...args: any[]): unknown;// needs 3 arguments + + searchGroup(...args: any[]): unknown;// needs 1 arguments + + searchLocalInfo(keywords: string, unknown: number/*4*/): unknown; + + cancelSearchLocalInfo(...args: any[]): unknown;// needs 3 arguments + + searchBuddyChatInfo(...args: any[]): unknown;// needs 2 arguments + + searchMoreBuddyChatInfo(...args: any[]): unknown;// needs 1 arguments + + cancelSearchBuddyChatInfo(...args: any[]): unknown;// needs 3 arguments + + searchContact(...args: any[]): unknown;// needs 2 arguments + + searchMoreContact(...args: any[]): unknown;// needs 1 arguments + + cancelSearchContact(...args: any[]): unknown;// needs 3 arguments + + searchGroupChatInfo(...args: any[]): unknown;// needs 3 arguments + + resetSearchGroupChatInfoSortType(...args: any[]): unknown;// needs 3 arguments + + resetSearchGroupChatInfoFilterMembers(...args: any[]): unknown;// needs 3 arguments + + searchMoreGroupChatInfo(...args: any[]): unknown;// needs 1 arguments + + cancelSearchGroupChatInfo(...args: any[]): unknown;// needs 3 arguments + + searchChatsWithKeywords(...args: any[]): unknown;// needs 3 arguments + + searchMoreChatsWithKeywords(...args: any[]): unknown;// needs 1 arguments + + cancelSearchChatsWithKeywords(...args: any[]): unknown;// needs 3 arguments + + searchChatMsgs(...args: any[]): unknown;// needs 2 arguments + + searchMoreChatMsgs(...args: any[]): unknown;// needs 1 arguments + + cancelSearchChatMsgs(...args: any[]): unknown;// needs 3 arguments + + searchMsgWithKeywords(...args: any[]): unknown;// needs 2 arguments + + searchMoreMsgWithKeywords(...args: any[]): unknown;// needs 1 arguments + + cancelSearchMsgWithKeywords(...args: any[]): unknown;// needs 3 arguments + + searchFileWithKeywords(keywords: string[], source: number): Promise;// needs 2 arguments + + searchMoreFileWithKeywords(...args: any[]): unknown;// needs 1 arguments + + cancelSearchFileWithKeywords(...args: any[]): unknown;// needs 3 arguments + + searchAtMeChats(...args: any[]): unknown;// needs 3 arguments + + searchMoreAtMeChats(...args: any[]): unknown;// needs 1 arguments + + cancelSearchAtMeChats(...args: any[]): unknown;// needs 3 arguments + + searchChatAtMeMsgs(...args: any[]): unknown;// needs 1 arguments + + searchMoreChatAtMeMsgs(...args: any[]): unknown;// needs 1 arguments + + cancelSearchChatAtMeMsgs(...args: any[]): 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: any[]): unknown;// needs 1 arguments + + searchCache(...args: any[]): unknown;// needs 3 arguments + + clearSearchCache(...args: any[]): unknown;// needs 1 arguments +} diff --git a/src/core/services/NodeIKernelStorageCleanService.ts b/src/core/services/NodeIKernelStorageCleanService.ts new file mode 100644 index 00000000..34c26714 --- /dev/null +++ b/src/core/services/NodeIKernelStorageCleanService.ts @@ -0,0 +1,41 @@ +import { NodeIKernelStorageCleanListener } from "@/core/listeners"; +import { GeneralCallResult } from "./common"; + +export interface NodeIKernelStorageCleanService { + + addKernelStorageCleanListener(Listener: NodeIKernelStorageCleanListener): number; + + removeKernelStorageCleanListener(ListenerId: number): void; + + addCacheScanedPaths(arg: unknown): unknown; + + addFilesScanedPaths(arg: unknown): unknown; + + scanCache(): Promise; + + addReportData(arg: unknown): unknown; + + reportData(): unknown; + + getChatCacheInfo(arg1: unknown, arg2: unknown, arg3: unknown, arg4: unknown): unknown; + + getFileCacheInfo(arg1: unknown, arg2: unknown, arg3: unknown, arg44: unknown, args5: unknown): unknown; + + clearChatCacheInfo(arg1: unknown, arg2: unknown): unknown; + + clearCacheDataByKeys(arg: unknown): unknown; + + setSilentScan(arg: unknown): unknown; + + closeCleanWindow(): unknown; + + clearAllChatCacheInfo(): unknown; + + endScan(arg: unknown): unknown; + + addNewDownloadOrUploadFile(arg: unknown): unknown; + + isNull(): boolean; +} diff --git a/src/core/services/NodeIKernelTianShuService.ts b/src/core/services/NodeIKernelTianShuService.ts new file mode 100644 index 00000000..48622c7e --- /dev/null +++ b/src/core/services/NodeIKernelTianShuService.ts @@ -0,0 +1,10 @@ +export interface NodeIKernelTianShuService { + addKernelTianShuListener(...args: any[]): unknown;// needs 1 arguments + + removeKernelTianShuListener(...args: any[]): unknown;// needs 1 arguments + + requesTianShuNumeralRe(...args: any[]): unknown;//d needs 1 arguments + + reportTianShuNumeralRed(...args: any[]): unknown;// needs 1 arguments + +} \ No newline at end of file diff --git a/src/core/services/NodeIKernelTicketService.ts b/src/core/services/NodeIKernelTicketService.ts new file mode 100644 index 00000000..0178f755 --- /dev/null +++ b/src/core/services/NodeIKernelTicketService.ts @@ -0,0 +1,12 @@ +import { forceFetchClientKeyRetType } 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 diff --git a/src/core/services/NodeIKernelTipOffService.ts b/src/core/services/NodeIKernelTipOffService.ts new file mode 100644 index 00000000..7071f893 --- /dev/null +++ b/src/core/services/NodeIKernelTipOffService.ts @@ -0,0 +1,20 @@ +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 diff --git a/src/core/services/NodeIKernelUixConvertService.ts b/src/core/services/NodeIKernelUixConvertService.ts new file mode 100644 index 00000000..b203c481 --- /dev/null +++ b/src/core/services/NodeIKernelUixConvertService.ts @@ -0,0 +1,5 @@ +export interface NodeIKernelUixConvertService { + getUin(uid: string[]): Promise<{ uinInfo: Map }>; + + getUid(uin: string[]): Promise<{ uidInfo: Map }>; +} \ No newline at end of file diff --git a/src/core/services/NodeIKernelUnitedConfigService.ts b/src/core/services/NodeIKernelUnitedConfigService.ts new file mode 100644 index 00000000..f96a4f0e --- /dev/null +++ b/src/core/services/NodeIKernelUnitedConfigService.ts @@ -0,0 +1,15 @@ +export interface NodeIKernelUnitedConfigService{ + addKernelUnitedConfigListener(...args: any[]): unknown;// needs 1 arguments + + removeKernelUnitedConfigListener(...args: any[]): unknown;// needs 1 arguments + + fetchUnitedCommendConfig(...args: any[]): unknown;// needs 1 arguments + + fetchUnitedSwitchConfig(...args: any[]): unknown;// needs 1 arguments + + loadUnitedConfig(...args: any[]): unknown;// needs 1 arguments + + isUnitedConfigSwitchOn(...args: any[]): unknown;// needs 1 arguments + + registerUnitedConfigPushGroupList(...args: any[]): unknown;// needs 1 arguments +} diff --git a/src/core/services/NodeIYellowFaceService.ts b/src/core/services/NodeIYellowFaceService.ts new file mode 100644 index 00000000..31ef0ff6 --- /dev/null +++ b/src/core/services/NodeIYellowFaceService.ts @@ -0,0 +1,5 @@ +// public interface IYellowFaceForManagerService extends QRouteApi { +// void download(@NotNull String resourceConfigJson, @NotNull String resourceDir, @NotNull String cacheDir, boolean force, @NotNull IKernelYellowFaceDownloadCallback callback); + +// void setHistory(@NotNull String fullMd5, @NotNull IOperateCallback callback); +// } \ No newline at end of file diff --git a/src/core/services/NodeIkernelTestPerformanceService.ts b/src/core/services/NodeIkernelTestPerformanceService.ts new file mode 100644 index 00000000..ae774898 --- /dev/null +++ b/src/core/services/NodeIkernelTestPerformanceService.ts @@ -0,0 +1,14 @@ +import { MessageElement, Peer } from "../entities"; + +export interface NodeIkernelTestPerformanceService { + insertMsg(MsgParam: { + peer: Peer + msgTime: string + msgId: string + msgSeq: string + batchNums: number + timesPerBatch: number + numPerTime: number + }, msg: Array): Promise; + +} \ No newline at end of file diff --git a/src/core/services/common.ts b/src/core/services/common.ts new file mode 100644 index 00000000..68ffc48c --- /dev/null +++ b/src/core/services/common.ts @@ -0,0 +1,14 @@ +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/core/services/index.ts b/src/core/services/index.ts new file mode 100644 index 00000000..efab2edd --- /dev/null +++ b/src/core/services/index.ts @@ -0,0 +1,16 @@ +export * from './common'; +export * from './NodeIKernelAvatarService'; +export * from './NodeIKernelBuddyService'; +export * from './NodeIKernelFileAssistantService'; +export * from './NodeIKernelGroupService'; +export * from './NodeIKernelLoginService'; +export * from './NodeIKernelMsgService'; +export * from './NodeIKernelOnlineStatusService'; +export * from './NodeIKernelProfileLikeService'; +export * from './NodeIKernelProfileService'; +export * from './NodeIKernelTicketService'; +export * from './NodeIKernelStorageCleanService'; +export * from './NodeIKernelRobotService'; +export * from './NodeIKernelRichMediaService'; +export * from './NodeIKernelDbToolsService'; +export * from './NodeIKernelTipOffService' \ No newline at end of file diff --git a/tsconfig.json b/tsconfig.json index 94f51e96..cc8bbfd0 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -27,12 +27,10 @@ "./src*" ], "@/core": [ - "./src/core/src/index", - "./src/core.lib/src/index" + "./src/core/index", ], "@/core/*": [ - "./src/core/src/*", - "./src/core.lib/src/*" + "./src/core/*" ] } },