我有一个Skype机器人连接到X(Linux)中正在运行的Skype实例。问题是当传入消息到来时,并不总是触发 messageStatusChanged 事件。它在大多数情况下都有,但有时消息只是“丢失”。我可以看到它们出现在Skype客户端中,但Skype4Py的事件由于某种原因没有被触发。这些消息包含的内容没有任何区别。
为什么会发生这种情况?
答案 0 :(得分:2)
没有解决方案,但我进一步调查了这一点,因为我问自己同样的问题。当您在应用程序中看到messageStatusChanged
丢失时,您可以使用dbus-monitor查看是否已通过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"
在第二个示例中,它不仅显示从CHAT
到thesender
的{{1}},而且实际上显示了thereceiver
与序列CHATMESSAGE
和{ {1}}已3535369
。只有后者似乎会触发STATUS
。
问题是:第一条消息是否应该创建RECEIVED
?如果是:这是Skype客户端中的错误吗?如果否:如果仅在已建立的聊天更新的情况下发送messageStatusChanged
,您是否应该收听其他活动?
我还不知道答案,但也许这会有所帮助。