create database fortern_qqnt; -- https://docs.aaqwq.top/view/db_file_analysis/nt_msg.db.html -- group_msg_table create table fortern_qqnt.group_msg_table ( -- 40001 消息ID,具有唯一性 id bigint not null primary key, -- 40002 消息随机值,用于对消息去重 msg_random bigint not null, -- 40003 群聊消息ID,在每个聊天中依次递增 msg_seq integer not null, -- 40010 聊天类型,私聊为1,群聊为2,频道为4,公众号为103,企业客服为102,临时会话为100 chat_type integer not null, -- 40011 消息类型,详见下表 msg_type integer not null, -- 40012 pb消息类型,详见下表 sub_msg_type integer not null, -- 40013 发送标志,本机发送的消息为1,其他客户端发送的为2,别人发的消息为0 ,转发消息为5,在已退出或被封禁的消息中为当日整点时间戳 send_type integer not null, -- 40020 nt_uid, 对应 nt_uid_mapping_table sender_uid varchar(200) not null, -- 40026 未知 q40026 integer, -- 40021 会话ID peer_uid varchar(200) not null, -- 40027 会话ID peer_uin bigint not null, -- 40040 未知 q40040 integer, -- 40041 发送状态,2为成功,0为发送被阻止(如不是对方好友),1为尚未发送成功(比如网络问题),3为消息被和谐 send_status integer not null, -- 40050 发送消息时的时间戳(精确到秒) msg_time integer not null, -- 40052 未知 q40052 integer, -- 40090 发送者群名片,旧版 QQ 迁移数据中格式为 name(12345) 或 name, QQNT 中为群名片 send_member_name varchar(200), -- 40093 发送者昵称,旧版 QQ 此字段为空,QQNT 中未设置群名片时才有此字段 send_nick_name varchar(200) not null, -- 40800 聊天消息,最为复杂 msg_content mediumblob, -- 40900 不同情况下存在不一样的数据(以列40011为区分)。 值为8时,列40900存贮转发聊天的缓存;值为9时,列40900存贮引用的消息 msg_quote mediumblob, -- 40105 未知 q40105 integer, -- 40005 只知道自己发的消息一定概率存在数值,正常情况为0 q40005 integer, -- 40058 当日 0 时整的时间戳格式,精确到秒,时区为 UTC+08:00 midnight_timestamp integer not null, -- 40006 未知 elem_id bigint not null, -- 40100 @状态 at_status integer, -- 40600 十六进制。值为 14 00 时,为回复消息,为 6 代表有人回复自己,为2代表他人回复他人,值为c2e91304a8d114****时(不唯一),为撤回消息 msg_status blob, -- 40060 已退出或已解散的群聊标志 disband_flag integer, -- 40850 该消息所回复的消息的序号,默认为 0 或 NULL reply_to bigint, -- 40851 未知,默认为 0 q40851 integer, -- 40601 未知,默认为 NULL q40601 blob, -- 40801 未知,默认为 NULL q40801 blob, -- 40605 未知,默认为 NULL q40605 blob, -- 40030 群号 group_no bigint not null, -- 40033 消息发送者QQ号 qq_no bigint not null, -- 40062 存贮详细表态信息(包括表态表情和表态数量),其数字与 QQBOT 中表情编号对应(超级表情不在此列表中) emoji blob, -- 40083 表态表情数量总和? emoji_num integer, -- 40084 表态表情数量总和? emoji_num_2 integer not null, -- 发送者QQ号索引 index qq_no_index (qq_no), -- 群号与QQ号联合索引 index group_no_index (group_no, qq_no), -- 时间索引 index msg_time_index (msg_time), -- 群号与时间的联合索引 index group_msg_time_index (group_no, msg_time), -- 群号与消息类型的联合索引 index group_msg_type_index (group_no, msg_type, sub_msg_type) ); -- 40011 msg_type 消息类型 -- 无消息(消息损坏?多见于已退出群聊且时间久远):0 -- 消息空白(msgid存在,应该是没加载出来):1 -- text文本消息:2 -- 群文件:3 -- 我的聊天记录里没有4~大佬带带>︿< -- 系统(灰字)消息:5 -- 语音消息:6 -- 视频文件:7 -- 合并转发消息:8 -- 回复类型消息:9 -- 红包:10 -- 应用消息:11 -- 40012 sub_msg_type 区分pb消息类型 -- 非常规text消息:0 -- 普通文本消息:1 -- 群文件其他类型消息:1 -- 图片消息:2 -- 群文件图片消息:2 -- 群公告:3 -- 群文件视频消息:4 -- 撤回消息提醒:4 -- 群文件音频消息:8 -- 原创表情包:8 -- 射精消息:11 -- 拍一拍消息:12 -- 群文件docx消息:16 -- 平台文本消息:32 -- 群文件pptx消息:32 -- 回复类型消息:33 -- 群文件xlsx消息:64 -- 存在链接:161 -- 群文件zip消息:512 -- 群文件exe消息:2048 -- 表情消息:4096 -- msg_type(40011) 与 sub_msg_type(40012) 组合可判断消息类型 -- 由于优先级问题(特别是2类别的信息),部分消息不满足以下规则 -- 空消息:0,0 -- 已撤回消息:1,0 -- 普通文本类消息:2,1 -- 图片消息:2,2 -- 只带图片的纯文本消息:2,3 -- 纯表情消息:2,16 -- 带表情的纯文本消息:2,17 -- 带图片带表情的纯文本消息:2,19 -- 纯链接消息:2,129 -- 带表情链接消息:2,145 -- 机器人消息:2,577 -- 机器人Markdown消息:2,65 -- @消息:2,35 -- 回复引用消息(不带表情):2,33 -- 回复引用消息(带表情):2,49 -- 收藏表情:2,2 -- 收藏表情包:2,4096 -- 群文件其他类型消息:3,1 -- 群文件图片(png,jpg)消息:3,2 -- 群文件视频消息:3,4 -- 群文件音频(mp3,flac)消息:3,8 -- 群文件docx消息:3,16 -- 群文件pptx消息:3,32 -- 群文件xlsx消息:3,64 -- 群文件zip消息:3,512 -- 群文件exe消息:3,2048 -- 拍一拍消息:5,12 -- 撤回消息提醒:5,4 -- amr语音文件消息:6,0 -- 视频文件消息:7,0 -- 合并转发消息:8,0 -- 回复消息:9,33 -- 回复带图片消息(无@):9,34 -- 回复带图片消息(有@):9,35 -- 回复带图片带@:9,35 -- 回复卡片引用消息:9,49 -- 带表情回复:9,49 -- 带表情带图片带@:9,51 -- 回复存在链接的消息:9,161 -- 红包:10,0 -- 应用消息(如小程序):11,0 -- 群公告:11,3 -- 表情包:17,8 -- 原创表情:17,8 -- c2c_msg_table create table fortern_qqnt.c2c_msg_table ( -- 40001 消息ID,具有唯一性 id bigint not null primary key, -- 40002 消息随机值,用于对消息去重 msg_random bigint not null, -- 40003 位置 q40003 integer not null, -- 40010 聊天类型,私聊为1,群聊为2,频道为4,公众号为103,企业客服为102,临时会话为100 chat_type integer not null, -- 40011 消息类型,详见上表 msg_type integer not null, -- 40012 pb消息类型,详见上表 sub_msg_type integer not null, -- 40013 发送标志,可能? send_type integer not null, -- 40020 未知 q40020 varchar(200) not null, -- 40026 未知 q40026 integer not null, -- 40021 未知 q40021 varchar(200) not null, -- 40027 未知 q40027 integer not null, -- 40040 未知 q40040 integer not null, -- 40041 未知 q40041 integer not null, -- 40050 发送消息时的时间戳(精确到秒) msg_time integer not null, -- 40052 未知 q40052 integer not null, -- 40090 未知 q40090 text, -- 40093 消息发送者的 QQ 昵称或是备注名 q40093 varchar(200) not null, -- 40080 消息内容 q40800 mediumblob, -- 40900 未知 q40900 mediumblob, -- 40105 未知 q40105 integer not null, -- 40005 未知 q40005 integer not null, -- 40058 当日 0 时整的时间戳格式,精确到秒,时区为 UTC+08:00 midnight_timestamp integer not null, -- 40006 未知 q40006 bigint not null, -- 40010 未知 q40100 integer not null, -- 40600 未知 q40600 mediumblob, -- 40060 未知 q40060 integer not null, -- 40850 未知 q40850 integer not null, -- 40851 未知 q40851 integer not null, -- 40601 未知 q40601 mediumblob, -- 40801 未知 q40801 mediumblob, -- 40605 未知 q40605 mediumblob, -- 40030 对方 QQ 号(无论是对方还是自己发送的消息) peer_qq_no bigint not null, -- 40033 发送者的 QQ 号 sender_qq_no bigint not null, -- 40062 未知 q40062 mediumblob, -- 40083 未知 q40083 integer not null, -- 40084 未知 q40084 integer not null, -- 时间索引 index msg_time_index (msg_time), -- 私聊者 QQ 号与时间的索引 index qq_no_msg_time_index (peer_qq_no, msg_time) ); -- group_msg_fts create table fortern_qqnt.group_msg_fts ( -- 主键id id bigint primary key, -- 消息内容 msg_text mediumtext, -- 文件名 file_name varchar(250), -- 41703 未知 q41703 varchar(50), -- 41704 未知 q41704 varchar(50), -- 41705 未知 q41705 varchar(50), -- 41706 未知 q41706 varchar(50), -- 41707 未知 q41707 varchar(50), -- 41701 group_msg_table的id的外键 msg_id bigint unique, -- 40050 发送消息时的时间戳(精确到秒) msg_time integer not null, -- 40003 群聊消息ID,在每个聊天中依次递增 msg_seq integer not null, -- 40010 聊天类型,私聊为1,群聊为2,频道为4,公众号为103,企业客服为102,临时会话为100 chat_type integer not null, -- 40021 会话ID peer_uid varchar(200) not null, -- 40027 会话ID peer_uin bigint not null, -- 40020 nt_uid, 对应 nt_uid_mapping_table sender_uid varchar(200) not null, -- 时间索引 index msg_time_index (msg_time), -- 群号与时间的联合索引 index group_msg_time_index (peer_uin, msg_time) );