我有一个Skype机器人连接到X(Linux)中正在运行的Skype实例。问题是当传入的消息到来时,并不总是触发事件messageStatusChanged事件。它在大多数情况下都可以使用,但有时候这些消息只是“丢失”。我可以看到它们出现在Skype客户端中,但由于某种原因,Skype4Py的事件没有被触发。这些消息中包含的信息没有任何区别。Skype4Py:messageStatusChanged不总是调用
为什么会发生这种情况?
我有一个Skype机器人连接到X(Linux)中正在运行的Skype实例。问题是当传入的消息到来时,并不总是触发事件messageStatusChanged事件。它在大多数情况下都可以使用,但有时候这些消息只是“丢失”。我可以看到它们出现在Skype客户端中,但由于某种原因,Skype4Py的事件没有被触发。这些消息中包含的信息没有任何区别。Skype4Py:messageStatusChanged不总是调用
为什么会发生这种情况?
没有解决办法,但我进一步调查了一下,因为我问自己同样的问题。当您的应用程序中看到messageStatusChanged
丢失时,您可以使用dbus-monitor来查看传入消息是否通过dbus发送了信号。
$ dbus-monitor "interface=com.Skype.API.Client"
我的印象是,如果有很多来自Skype的“沉寂”一段较长时间的第一状态改变经常去错过。
具体地,“第一”的消息显示在DBUS监视器此图案(是的,成对的,不知道这是为什么):
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"
在第二个例子,它不仅示出了从thesender
到thereceiver
一个CHAT
但它实际上示出了CHATMESSAGE
与串行3535369
和STATUS
已经是RECEIVED
。只有后者似乎触发messageStatusChanged
。
问题是:第一条消息是否应该创建CHATMESSAGE {serial} STATUS RECEIVED
?如果是:这是Skype客户端中的错误吗?如果不是:如果CHATMESSAGE
仅在更新已建立的聊天的情况下才会发送,您是否应该听取其他事件?
我还不知道答案,但也许这有助于。
我认为正确的地方解决这个问题将是Skype发展论坛。他们不支持Skype4Py,但他们可以回答一般的Skype API问题。由于Skype是黑匣子,除非Skype自己回应,否则我们只能在这里进行猜测。 – 2013-03-08 02:26:49
这是我们无法确定的某些平台的已知问题。你可以打开Skype4Py Python调试日志记录,看看你的应用程序是否收到消息,并且它不会在X11/dbus路由中丢失? – 2013-03-07 16:07:11