export enum AtType { notAt = 0, atUser = 2 } export type GroupMemberInfo = { avatarPath: string; cardName: string; cardType: number; isDelete: boolean; nick: string; qid: string; remark: string; role: number; // 群主:4, 管理员:3,群员:2 shutUpTime: number; // 禁言时间,单位是什么暂时不清楚 uid: string; // 加密的字符串 uin: string; // QQ号 } export const OnebotGroupMemberRole = { 4: 'owner', 3: 'admin', 2: 'member' } export type SelfInfo = { user_id: string; nickname: string; } export type User = { avatarUrl?: string; bio?: string; // 签名 nickName: string; uid?: string; // 加密的字符串 uin: string; // QQ号 } export type Group = { uid: string; // 群号 name: string; members?: GroupMemberInfo[]; } export type Peer = { chatType: "private" | "group" name: string uid: string // qq号 } export type MessageElement = { raw: { msgId: string, msgSeq: string, elements: { replyElement: { senderUid: string, // 原消息发送者QQ号 sourceMsgIsIncPic: boolean; // 原消息是否有图片 sourceMsgText: string; replayMsgSeq: string; // 源消息的msgSeq,可以通过这个找到源消息的msgId }, textElement: { atType: AtType atUid: string, content: string, atNtUid: string }, picElement: { sourcePath: string // 图片本地路径 picWidth: number picHeight: number fileSize: number fileName: string fileUuid: string }, pttElement: { canConvert2Text: boolean duration: number // 秒数 fileBizId: null fileId: number // 0 fileName: string // "e4d09c784d5a2abcb2f9980bdc7acfe6.amr" filePath: string // "/Users/C5366155/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[] } }[] } peer: Peer, sender: { uid: string // 一串加密的字符串 memberName: string nickname: string } } export type SendMessage = { type: "text", content: string, data?: { text: string, // 纯文本 } } | { type: "image" | "voice" | "record", file: string, // 本地路径 data?: { file: string // 本地路径 } } | { type: "at", atType?: AtType, content?: string, atUid?: string, atNtUid?: string, data?: { qq: string // at的qq号 } } | { type: "reply", msgId: string, msgSeq: string, senderUin: string, data: { id: string, } } export type PostDataAction = "send_private_msg" | "send_group_msg" | "get_group_list" | "get_friend_list" | "delete_msg" | "get_login_info" | "get_group_member_list" | "get_group_member_info" export type PostDataSendMsg = { action: PostDataAction message_type?: "private" | "group" params?: { user_id: string, group_id: string, message: SendMessage[]; }, user_id: string, group_id: string, message: SendMessage[]; } export type Config = { port: number, hosts: string[], }