我有一個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