skype main.db - 聊天和对话之间的区别

时间:2013-06-02 19:57:05

标签: database sqlite skype

我已经解析了Skype数据库main.db几天了,这是我还没想到的。当然,这个问题将特别针对Skype main.db结构。(免责声明)

似乎我需要的所有必要信息都在表ConversationsMessagesParticipants中。

Message表包含已经说过的实际日志,收件人,时间戳和convo_id外键(虽然没有强制执行)以连接到Conversation消息属于。

Conversation用于保存Message和参与的联系人的汇总。

Participants表适用于Conversations表和Contacts表之间的多对多连接器表。

我得到的是ChatsChatmembers表。 Chatmembers适用于Chats Participants表对Conversations表的工作原理;连接联系人和对话 - 或“聊天”。

Chats中的内容与Conversations类似,只是它没有任何聚合到Message表。无法将Messages表映射到消息日志(Chats表的行)所属的Messages表。

ChatsConversations共享一个外键,Conversations表有一个名为chat_dbid的列,它连接到Chats表。但Conversations表中的行有chat_dbid字段,并且Chats中的所有行都没有id字段,对应{中的chat_dbid字段{1}}表。

Chats表格仍在更新中,我认识到最近我根据时间戳及其中的成员进行的一些聊天或对话。

有谁确切知道Chats表的作用是什么?或者更确切地说,Chats表和Chats表的区别和理由是什么?

当我疯狂地看着这个时,我只能找到one like that talked about main.db structure,而且它没有用处。

根据链接Conversations

  

提供用户参与的聊天。

Chats

  

提供用户参与的对话列表。

他们关于聊天和对话的术语是什么?他们有什么不同?

这让我发疯了。

2 个答案:

答案 0 :(得分:4)

昨天我也在浏览skype的main.db表。以下是我的发现。

对话表唯一标识与特定联系人(或您创建的群组联系人)的对话。会话需要所有通信:聊天消息,语音消息,文件传输,与特定联系人进行的呼叫。大多数表都引用了此表中的条目。         消息表有convo__id,         聊天表有conv_dbid,         转移有convo_id和同样。

消息表:消息条目并不总是聊天。如果条目是聊天,则填充其聊天名称字段。 聊天和消息似乎有一对多的关系。 chat是按照某些标识符维护的消息集合(很可能是一天不确定)。 “type = 61”似乎是正常消息:用户输入的消息。其他类型似乎是例如自动生成的消息。如果呼叫断开,你会收到消息。

希望这有帮助。

答案 1 :(得分:2)

看起来Chats是多余的。消息被分组为聊天作为一个思想,您可以在一个对话中有几个聊天,然后在任何聊天之外有一些消息。分组规则不清楚,可能是时间。

通过将一堆消息的chatname字段设置为相同的值来完成分组。聊天名称看起来像#SenderId/$TargetId;ChatId#SenderId/ChatId,用于聊天群聊。

ChatIds似乎没有任何特殊含义,可能在不同的PC上有所不同。

并非每个聊天都会在聊天表中获得一个条目:SELECT DISTINCT(chatname) FROM Messages提供的条目比SELECT * FROM Chats多得多。并非所有进入chatname的内容都是来自Chats的聊天名称。有时它是会话ID(== groupchat id或skypename)。

不同的Skype实例也会以不同的方式将相同的同步消息分组到聊天中。

所以基本上聊天并不重要,他们会随意分组消息,它们不包含任何关于谁发送给谁的关键数据。

这就是我理解其他表的工作方式:

Contacts - 这是每个人都在数据库中提到skypename,甚至是你从未知道的人(在你当时正在收听的群聊中说了些什么)。 is_permanent标记了您的联系人列表中的内容。

Conversations - 这是您加入的实际联系人和群聊的联盟。这应该被视为“联系人列表”。如果您需要联系人,但绝不会发送消息,请添加Contacts WHERE is_permanent=1。如果您只想要现有联系人,请按is_bookmarked或类似内容进行过滤。

似乎没有重复和分裂。一个联系人=一个会话,一个群聊=一个会话。如果你正在与一对一的联系人谈话并且你添加了另一方,那么以前的消息仍然保留在该联系人的对话中,并且以下消息会得到他们自己的对话。

Messages - 这是发送或接收的所有消息和事件:

  • convo_id - 始终设置,始终引用对话。这是您识别邮件发送的联系人/群组聊天的方式。

  • chatname - 总是设置,有时引用Chats的聊天,有时聊天不在Chats中,有时是来自Conversations的群聊ID或skypename。大多数情况下,这可以忽略,或者您可以通过视觉对该字段进行分组。

  • authorfrom_name - 当时发送此消息及其昵称的人,始终设置正确。

  • dialog_partner - 非常不可靠,不同PC上同一邮件的值不同

  • participant_count - 有时设置,有时不设置,与dialog_partner相同:不可靠。

  • identities - 提及与该事件相关的所有skypenames,有时则不提及。规则不明确,不可靠。