【问题标题】:skype main.db - difference between Chats and Conversationsskype main.db - 聊天和对话之间的区别
【发布时间】:2013-05-29 00:18:41
【问题描述】:

我已经剖析 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表映射到消息日志(Messages表的行)所属的Chats表。

ChatsConversations 共享一个外键,Conversations 表有一个名为 chat_dbid 的列连接到 Chats 表。但是Conversations 表中的某些行有一个空的chat_dbid 字段,并且并非Chats 中的所有行都有id 字段对应于chat_dbid 表中的chat_dbid 字段。

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

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

当我疯狂地寻找这个时,我只能找到one like that talked about main.db structure,它并没有多大帮助。

根据链接Chats

提供用户参与的聊天。

Conversations

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

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

这让我发疯了。

【问题讨论】:

    标签: database sqlite skype


    【解决方案1】:

    昨天我也在 Skype 中查看 main.db 表。以下是我的发现。

    对话表唯一标识与特定联系人(或您创建的组联系人)的对话。对话涉及所有通信:聊天消息、语音消息、文件传输、与特定联系人进行的通话。大多数表都引用了该表中的条目。 消息表有 convo__id, 聊天表有 conv_dbid, Transfers 有 convo_id 等。

    消息表:消息条目并不总是聊天。如果条目是聊天,则填充其聊天名称字段。 聊天和消息似乎是一对多的关系。聊天是根据某个标识符维护的消息集合(很可能是不确定的一天。)。 “type=61”似乎是正常消息:用户键入的消息。其他类型似乎是自动生成的消息,例如。通话中断时会收到消息。

    希望这会有所帮助。

    【讨论】:

      【解决方案2】:

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

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

      ChatId 似乎没有任何特定含义,并且在不同的 PC 上可能会有所不同。

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

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

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

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

      Contacts - 这是所有在数据库中提及其 Skype 名称的人,甚至是您不认识的人(在您当时正在收听的群聊中说了一些话)。 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,或者有时不提及。规则不明确,不可靠。

      【讨论】:

        猜你喜欢
        • 2017-11-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-05-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多