Documentation
¶
Index ¶
- Constants
- func ParseBytesExtra(b []byte) (chatRoomSender string)
- type ChatRoom
- type ChatRoomDarwinV3
- type ChatRoomUser
- type ChatRoomV3
- type ChatRoomV4
- type Contact
- type ContactDarwinV3
- type ContactV3
- type ContactV4
- type Message
- type MessageDarwinV3
- type MessageV3
- type MessageV4
- type Session
- type SessionDarwinV3
- type SessionV3
- type SessionV4
Constants ¶
const ( // Source WeChatV3 = "wechatv3" WeChatV4 = "wechatv4" WeChatDarwinV3 = "wechatdarwinv3" )
Variables ¶
This section is empty.
Functions ¶
func ParseBytesExtra ¶
ParseBytesExtra 解析额外数据 按需解析
Types ¶
type ChatRoom ¶
type ChatRoom struct {
Name string `json:"name"`
Owner string `json:"owner"`
Users []ChatRoomUser `json:"users"`
// Extra From Contact
Remark string `json:"remark"`
NickName string `json:"nickName"`
User2DisplayName map[string]string `json:"-"`
}
func (*ChatRoom) DisplayName ¶
type ChatRoomDarwinV3 ¶
type ChatRoomDarwinV3 struct {
M_nsUsrName string `json:"m_nsUsrName"`
Nickname string `json:"nickname"`
M_nsRemark string `json:"m_nsRemark"`
M_nsChatRoomMemList string `json:"m_nsChatRoomMemList"`
M_nsChatRoomAdminList string `json:"m_nsChatRoomAdminList"`
}
CREATE TABLE GroupContact( m_nsUsrName TEXT PRIMARY KEY ASC, m_uiConType INTEGER, nickname TEXT, m_nsFullPY TEXT, m_nsShortPY TEXT, m_nsRemark TEXT, m_nsRemarkPYFull TEXT, m_nsRemarkPYShort TEXT, m_uiCertificationFlag INTEGER, m_uiSex INTEGER, m_uiType INTEGER, m_nsImgStatus TEXT, m_uiImgKey INTEGER, m_nsHeadImgUrl TEXT, m_nsHeadHDImgUrl TEXT, m_nsHeadHDMd5 TEXT, m_nsChatRoomMemList TEXT, m_nsChatRoomAdminList TEXT, m_uiChatRoomStatus INTEGER, m_nsChatRoomDesc TEXT, m_nsDraft TEXT, m_nsBrandIconUrl TEXT, m_nsGoogleContactName TEXT, m_nsAliasName TEXT, m_nsEncodeUserName TEXT, m_uiChatRoomVersion INTEGER, m_uiChatRoomMaxCount INTEGER, m_uiChatRoomType INTEGER, m_patSuffix TEXT, richChatRoomDesc TEXT, _packed_WCContactData BLOB, openIMInfo BLOB )
type ChatRoomUser ¶
type ChatRoomUser struct {
UserName string `json:"userName"`
DisplayName string `json:"displayName"`
}
func ParseRoomData ¶
func ParseRoomData(b []byte) (users []ChatRoomUser)
type ChatRoomV3 ¶
type ChatRoomV3 struct {
ChatRoomName string `json:"ChatRoomName"`
Reserved2 string `json:"Reserved2"` // Creator
RoomData []byte `json:"RoomData"`
}
CREATE TABLE ChatRoom( ChatRoomName TEXT PRIMARY KEY, UserNameList TEXT, DisplayNameList TEXT, ChatRoomFlag int Default 0, Owner INTEGER DEFAULT 0, IsShowName INTEGER DEFAULT 0, SelfDisplayName TEXT, Reserved1 INTEGER DEFAULT 0, Reserved2 TEXT, Reserved3 INTEGER DEFAULT 0, Reserved4 TEXT, Reserved5 INTEGER DEFAULT 0, Reserved6 TEXT, RoomData BLOB, Reserved7 INTEGER DEFAULT 0, Reserved8 TEXT )
func (*ChatRoomV3) Wrap ¶
func (c *ChatRoomV3) Wrap() *ChatRoom
type ChatRoomV4 ¶
type ChatRoomV4 struct {
ID int `json:"id"`
UserName string `json:"username"`
Owner string `json:"owner"`
ExtBuffer []byte `json:"ext_buffer"`
}
CREATE TABLE chat_room( id INTEGER PRIMARY KEY, username TEXT, owner TEXT, ext_buffer BLOB )
func (*ChatRoomV4) Wrap ¶
func (c *ChatRoomV4) Wrap() *ChatRoom
type Contact ¶
type Contact struct {
UserName string `json:"userName"`
Alias string `json:"alias"`
Remark string `json:"remark"`
NickName string `json:"nickName"`
IsFriend bool `json:"isFriend"`
}
func (*Contact) DisplayName ¶
type ContactDarwinV3 ¶
type ContactDarwinV3 struct {
M_nsUsrName string `json:"m_nsUsrName"`
Nickname string `json:"nickname"`
M_nsRemark string `json:"m_nsRemark"`
M_uiSex int `json:"m_uiSex"`
M_nsAliasName string `json:"m_nsAliasName"`
}
CREATE TABLE WCContact( m_nsUsrName TEXT PRIMARY KEY ASC, m_uiConType INTEGER, nickname TEXT, m_nsFullPY TEXT, m_nsShortPY TEXT, m_nsRemark TEXT, m_nsRemarkPYFull TEXT, m_nsRemarkPYShort TEXT, m_uiCertificationFlag INTEGER, m_uiSex INTEGER, m_uiType INTEGER, m_nsImgStatus TEXT, m_uiImgKey INTEGER, m_nsHeadImgUrl TEXT, m_nsHeadHDImgUrl TEXT, m_nsHeadHDMd5 TEXT, m_nsChatRoomMemList TEXT, m_nsChatRoomAdminList TEXT, m_uiChatRoomStatus INTEGER, m_nsChatRoomDesc TEXT, m_nsDraft TEXT, m_nsBrandIconUrl TEXT, m_nsGoogleContactName TEXT, m_nsAliasName TEXT, m_nsEncodeUserName TEXT, m_uiChatRoomVersion INTEGER, m_uiChatRoomMaxCount INTEGER, m_uiChatRoomType INTEGER, m_patSuffix TEXT, richChatRoomDesc TEXT, _packed_WCContactData BLOB, openIMInfo BLOB )
func (*ContactDarwinV3) Wrap ¶
func (c *ContactDarwinV3) Wrap() *Contact
type ContactV3 ¶
type ContactV3 struct {
UserName string `json:"UserName"`
Alias string `json:"Alias"`
Remark string `json:"Remark"`
NickName string `json:"NickName"`
Reserved1 int `json:"Reserved1"` // 1 自己好友或自己加入的群聊; 0 群聊成员(非好友)
}
CREATE TABLE Contact( UserName TEXT PRIMARY KEY , Alias TEXT, EncryptUserName TEXT, DelFlag INTEGER DEFAULT 0, Type INTEGER DEFAULT 0, VerifyFlag INTEGER DEFAULT 0, Reserved1 INTEGER DEFAULT 0, Reserved2 INTEGER DEFAULT 0, Reserved3 TEXT, Reserved4 TEXT, Remark TEXT, NickName TEXT, LabelIDList TEXT, DomainList TEXT, ChatRoomType int, PYInitial TEXT, QuanPin TEXT, RemarkPYInitial TEXT, RemarkQuanPin TEXT, BigHeadImgUrl TEXT, SmallHeadImgUrl TEXT, HeadImgMd5 TEXT, ChatRoomNotify INTEGER DEFAULT 0, Reserved5 INTEGER DEFAULT 0, Reserved6 TEXT, Reserved7 TEXT, ExtraBuf BLOB, Reserved8 INTEGER DEFAULT 0, Reserved9 INTEGER DEFAULT 0, Reserved10 TEXT, Reserved11 TEXT )
type ContactV4 ¶
type ContactV4 struct {
UserName string `json:"username"`
Alias string `json:"alias"`
Remark string `json:"remark"`
NickName string `json:"nick_name"`
LocalType int `json:"local_type"` // 2 群聊; 3 群聊成员(非好友); 5,6 企业微信;
}
CREATE TABLE contact( id INTEGER PRIMARY KEY, username TEXT, local_type INTEGER, alias TEXT, encrypt_username TEXT, flag INTEGER, delete_flag INTEGER, verify_flag INTEGER, remark TEXT, remark_quan_pin TEXT, remark_pin_yin_initial TEXT, nick_name TEXT, pin_yin_initial TEXT, quan_pin TEXT, big_head_url TEXT, small_head_url TEXT, head_img_md5 TEXT, chat_room_notify INTEGER, is_in_chat_room INTEGER, description TEXT, extra_buffer BLOB, chat_room_type INTEGER )
type Message ¶
type Message struct {
Sequence int64 `json:"sequence"` // 消息序号,10位时间戳 + 3位序号
CreateTime time.Time `json:"createTime"` // 消息创建时间,10位时间戳
TalkerID int `json:"talkerID"` // 聊天对象,Name2ID 表序号,索引值
Talker string `json:"talker"` // 聊天对象,微信 ID or 群 ID
IsSender int `json:"isSender"` // 是否为发送消息,0 接收消息,1 发送消息
Type int `json:"type"` // 消息类型
SubType int `json:"subType"` // 消息子类型
Content string `json:"content"` // 消息内容,文字聊天内容 或 XML
CompressContent []byte `json:"compressContent"` // 非文字聊天内容,如图片、语音、视频等
IsChatRoom bool `json:"isChatRoom"` // 是否为群聊消息
ChatRoomSender string `json:"chatRoomSender"` // 群聊消息发送人
// Fill Info
// 从联系人等信息中填充
DisplayName string `json:"-"` // 显示名称
ChatRoomName string `json:"-"` // 群聊名称
Version string `json:"-"` // 消息版本,内部判断
}
type MessageDarwinV3 ¶
type MessageDarwinV3 struct {
MesCreateTime int64 `json:"mesCreateTime"`
MesContent string `json:"mesContent"`
MesType int `json:"mesType"`
MesDes int `json:"mesDes"` // 0: 发送, 1: 接收
MesSource string `json:"mesSource"`
}
CREATE TABLE Chat_md5(talker)( mesLocalID INTEGER PRIMARY KEY AUTOINCREMENT, mesSvrID INTEGER,msgCreateTime INTEGER, msgContent TEXT,msgStatus INTEGER, msgImgStatus INTEGER, messageType INTEGER, mesDes INTEGER, msgSource TEXT, IntRes1 INTEGER, IntRes2 INTEGER, StrRes1 TEXT, StrRes2 TEXT, msgVoiceText TEXT, msgSeq INTEGER, CompressContent BLOB, ConBlob BLOB )
func (*MessageDarwinV3) Wrap ¶
func (m *MessageDarwinV3) Wrap(talker string) *Message
type MessageV3 ¶
type MessageV3 struct {
Sequence int64 `json:"Sequence"` // 消息序号,10位时间戳 + 3位序号
CreateTime int64 `json:"CreateTime"` // 消息创建时间,10位时间戳
TalkerID int `json:"TalkerId"` // 聊天对象,Name2ID 表序号,索引值
StrTalker string `json:"StrTalker"` // 聊天对象,微信 ID or 群 ID
IsSender int `json:"IsSender"` // 是否为发送消息,0 接收消息,1 发送消息
Type int `json:"Type"` // 消息类型
SubType int `json:"SubType"` // 消息子类型
StrContent string `json:"StrContent"` // 消息内容,文字聊天内容 或 XML
CompressContent []byte `json:"CompressContent"` // 非文字聊天内容,如图片、语音、视频等
BytesExtra []byte `json:"BytesExtra"` // protobuf 额外数据,记录群聊发送人等信息
}
CREATE TABLE MSG ( localId INTEGER PRIMARY KEY AUTOINCREMENT, TalkerId INT DEFAULT 0, MsgSvrID INT, Type INT, SubType INT, IsSender INT, CreateTime INT, Sequence INT DEFAULT 0, StatusEx INT DEFAULT 0, FlagEx INT, Status INT, MsgServerSeq INT, MsgSequence INT, StrTalker TEXT, StrContent TEXT, DisplayContent TEXT, Reserved0 INT DEFAULT 0, Reserved1 INT DEFAULT 0, Reserved2 INT DEFAULT 0, Reserved3 INT DEFAULT 0, Reserved4 TEXT, Reserved5 TEXT, Reserved6 TEXT, CompressContent BLOB, BytesExtra BLOB, BytesTrans BLOB )
type MessageV4 ¶
type MessageV4 struct {
SortSeq int64 `json:"sort_seq"` // 消息序号,10位时间戳 + 3位序号
LocalType int `json:"local_type"` // 消息类型
RealSenderID int `json:"real_sender_id"` // 发送人 ID,对应 Name2Id 表序号
CreateTime int64 `json:"create_time"` // 消息创建时间,10位时间戳
MessageContent []byte `json:"message_content"` // 消息内容,文字聊天内容 或 zstd 压缩内容
PackedInfoData []byte `json:"packed_info_data"` // 额外数据,类似 proto,格式与 v3 有差异
Status int `json:"status"` // 消息状态,2 是已发送,4 是已接收,可以用于判断 IsSender(猜测)
}
CREATE TABLE Msg_md5(talker)( local_id INTEGER PRIMARY KEY AUTOINCREMENT, server_id INTEGER, local_type INTEGER, sort_seq INTEGER, real_sender_id INTEGER, create_time INTEGER, status INTEGER, upload_status INTEGER, download_status INTEGER, server_seq INTEGER, origin_source INTEGER, source TEXT, message_content TEXT, compress_content TEXT, packed_info_data BLOB, WCDB_CT_message_content INTEGER DEFAULT NULL, WCDB_CT_source INTEGER DEFAULT NULL )
type Session ¶
type SessionDarwinV3 ¶
type SessionDarwinV3 struct {
M_nsUserName string `json:"m_nsUserName"`
M_uLastTime int `json:"m_uLastTime"`
}
CREATE TABLE SessionAbstract( m_nsUserName TEXT PRIMARY KEY, m_uUnReadCount INTEGER, m_bShowUnReadAsRedDot INTEGER, m_bMarkUnread INTEGER, m_uLastTime INTEGER, strRes1 TEXT, strRes2 TEXT, strRes3 TEXT, intRes1 INTEGER, intRes2 INTEGER, intRes3 INTEGER, _packed_MMSessionInfo BLOB )
func (*SessionDarwinV3) Wrap ¶
func (s *SessionDarwinV3) Wrap() *Session
type SessionV3 ¶
type SessionV3 struct {
StrUsrName string `json:"strUsrName"`
NOrder int `json:"nOrder"`
StrNickName string `json:"strNickName"`
StrContent string `json:"strContent"`
NTime int64 `json:"nTime"`
}
CREATE TABLE Session( strUsrName TEXT PRIMARY KEY, nOrder INT DEFAULT 0, nUnReadCount INTEGER DEFAULT 0, parentRef TEXT, Reserved0 INTEGER DEFAULT 0, Reserved1 TEXT, strNickName TEXT, nStatus INTEGER, nIsSend INTEGER, strContent TEXT, nMsgType INTEGER, nMsgLocalID INTEGER, nMsgStatus INTEGER, nTime INTEGER, editContent TEXT, othersAtMe INT, Reserved2 INTEGER DEFAULT 0, Reserved3 TEXT, Reserved4 INTEGER DEFAULT 0, Reserved5 TEXT, bytesXml BLOB )
type SessionV4 ¶
type SessionV4 struct {
Username string `json:"username"`
Summary string `json:"summary"`
LastTimestamp int `json:"last_timestamp"`
LastMsgSender string `json:"last_msg_sender"`
LastSenderDisplayName string `json:"last_sender_display_name"`
}
注意,v4 session 是独立数据库文件 CREATE TABLE SessionTable( username TEXT PRIMARY KEY, type INTEGER, unread_count INTEGER, unread_first_msg_srv_id INTEGER, is_hidden INTEGER, summary TEXT, draft TEXT, status INTEGER, last_timestamp INTEGER, sort_timestamp INTEGER, last_clear_unread_timestamp INTEGER, last_msg_locald_id INTEGER, last_msg_type INTEGER, last_msg_sub_type INTEGER, last_msg_sender TEXT, last_sender_display_name TEXT, last_msg_ext_type INTEGER )