3

我有一个 Skype 机器人连接到 X (Linux) 中的工作 Skype 实例。问题是messageStatusChanged事件并不总是在传入消息时触发。在大多数情况下确实如此,但有时消息只是“丢失”。我可以看到它们出现在 Skype 客户端中,但由于某种原因,Skype4Py 的事件没有被触发。这些消息包含的内容没有任何区别。

为什么会发生这种情况?

4

1 回答 1

2

没有解决方案,但我对此进行了进一步调查,因为我问自己同样的问题。您可以使用 dbus-monitor 来查看当您messageStatusChanged在应用程序中看到缺失时,传入消息是否已通过 dbus 发出信号。

$ dbus-monitor "interface=com.Skype.API.Client"

我的印象是,如果 Skype 长时间处于“沉默”状态,第一次状态更改通常会丢失。

具体来说,“第一条”消息在 dbus-monitor 中显示了这种模式(是的,成对出现,不知道为什么会这样):

method call sender=:1.1036 -> dest=:1.1028 serial=5088 path=/com/Skype/Client; interface=com.Skype.API.Client; member=Notify
   string "CHAT #thesender/$thereceiver;2c328ad79b074208 ACTIVITY_TIMESTAMP 1362696242"
method call sender=:1.1036 -> dest=:1.1232 serial=5089 path=/com/Skype/Client; interface=com.Skype.API.Client; member=Notify
   string "CHAT #thesender/$thereceiver;2c328ad79b074208 ACTIVITY_TIMESTAMP 1362696242"

上面的消息不会触发messageStatusChanged,但下一个会触发(再次成对):

method call sender=:1.1036 -> dest=:1.1028 serial=5090 path=/com/Skype/Client; interface=com.Skype.API.Client; member=Notify
   string "CHAT #thesender/$thereceiver;2c328ad79b074208 ACTIVITY_TIMESTAMP 1362696353"
method call sender=:1.1036 -> dest=:1.1232 serial=5091 path=/com/Skype/Client; interface=com.Skype.API.Client; member=Notify
   string "CHAT #thesender/$thereceiver;2c328ad79b074208 ACTIVITY_TIMESTAMP 1362696353"
method call sender=:1.1036 -> dest=:1.1028 serial=5092 path=/com/Skype/Client; interface=com.Skype.API.Client; member=Notify
   string "CHATMESSAGE 3535369 STATUS RECEIVED"
method call sender=:1.1036 -> dest=:1.1232 serial=5093 path=/com/Skype/Client; interface=com.Skype.API.Client; member=Notify
   string "CHATMESSAGE 3535369 STATUS RECEIVED"

在第二个示例中,它不仅显示了CHATfrom thesenderto ,thereceiver而且实际上显示了 aCHATMESSAGE与 serial3535369STATUShas been RECEIVED。似乎只有后者触发了messageStatusChanged

问题是:第一条消息是否应该创建一个CHATMESSAGE {serial} STATUS RECEIVED?如果是:这是 Skype 客户端中的错误吗?如果不是:如果CHATMESSAGE仅在已建立的聊天更新的情况下发送,您是否应该监听不同的事件?

我还不知道答案,但也许这会有所帮助。

于 2013-03-07T23:19:45.973 回答