关于wx数据库,如何查看群聊中具体群成员的ID?
EDWINCHENC opened this issue · 2 comments
根据MSG数据库的解析,似乎我们只能获得群聊的ID也就是StrTalker, 那么如果要定位某一位群成员的聊天记录,似乎没有记录?
群成员的固定ID和聊天记录能定位到吗?请问如何定位和查找?
现在要分析聊天记录,只能分析整个群的,每个群成员的发言没法区分开来?
MSG
localId:字面意思消息在本地的 ID,暂未发现其功用
TalkerId:消息所在房间的 ID(该信息为猜测,猜测原因见 StrTalker 字段),与Name2ID对应。
MsgSvrID:猜测 Srv 可能是 Server 的缩写,代指服务器端存储的消息 ID
Type:消息类型,具体对照见表1
SubType:消息类型子分类,暂时未见其实际用途
IsSender:是否是自己发出的消息,也就是标记消息展示在对话页左边还是右边,取值0或1
CreateTime:消息创建时间的秒级时间戳。此处需要进一步实验来确认该时间具体标记的是哪个时间节点,个人猜测的规则如下:
从这台电脑上发出的消息:标记代表的是每个消息点下发送按钮的那一刻
从其它设备上发出的/收到的来自其它用户的消息:标记的是本地从服务器接收到这一消息的时间
Sequence:次序,虽然看起来像一个毫秒级时间戳但其实不是。这是CreateTime 字段末尾接上三位数字组成的,通常情况下为000,如果在出现两条CreateTime 相同的消息则最后三位依次递增。需要进一步确认不重复范围是在一个会话内还是所有会话。CreateTime 相同的消息则最后三位依次递增。需要进一步确认不重复范围是在一个会话内还是所有会话。
StatusEx、FlagEx、Status、MsgServerSeq、MsgSequence:这五个字段个人暂时没有分析出有效信息
StrTalker:消息发送者的微信号。特别说明,从这里来看的话,上面的TalkerId 字段大概率是指的消息所在的房间ID,而非发送者ID,当然也可能和TalkerId属于重复内容,这一点待确认。
StrContent:字符串格式的数据。特别说明的是,除了文本类型的消息外,别的大多类型这一字段都会是一段 XML 数据标记一些相关信息。通过解析xml可以得到更多的信息,例如图片的宽高、语音的时长等等。
DisplayContent:对于拍一拍,保存拍者和被拍者账号信息
Reserved0~6:这些字段也还没有分析出有效信息,也有的字段恒为空
CompressContent:字面意思是压缩的数据,实际上也就是微信任性不想存在 StrContent 里的数据在这里(例如带有引用的文本消息等;采用lz4压缩算法压缩)
BytesExtra:额外的二进制格式数据
BytesTrans:目前看这是一个恒为空的字段
我也正在找这个字段在哪里,暂时还没有找到。如果你找到后,可以帮忙修改pull
以下是目前能知道的一些线索:
1、找到StrTalker这个id,这个id只是群的id,到Chatroom表,你就可以对应到群名字;找到群名字那个记录,顺便把RoomData数据,可以拿到usernamelist (protobuf格式);
2、找到StrTalker同时,在MSG内对应的这条记录里面,还有个BytesExtra,这个是二进制的protobuf格式,把它解码,就拿到了群聊里面发送者id;
3、把第1步拿到的RoomData(也是protobuf格式)解码,得到每个人的微信群昵称?,把第2步拿到的发送者id到这个里面匹配,就匹配到群聊里面发送者id了;
以上基本能定位到,但还是有些许问题,需要项目主一起琢磨,例如群聊RoomData/usernamelist里面可能没有这个BytesExtra 内id对应信息,只能拿这个id去chatroom表里面查表找到NickName和Remark了;微信记录里面的BytesExtra和RoomData有时各种格式还是不一致的……等诸多问题.....
我也正在找这个字段在哪里,暂时还没有找到。如果你找到后,可以帮忙修改pull