2013-03-06 3 views
3

У меня есть бот Skype, подключенный к рабочему экземпляру Skype в X (Linux). Проблема в том, что событие messageStatusChanged не всегда срабатывает при поступлении входящего сообщения. Это происходит в большинстве случаев, но иногда сообщения просто «теряются». Я вижу, что они появляются в клиенте Skype, но событие Skype4Py не запускается по какой-то причине. Для этих сообщений нет никакой разницы в том, что они содержат.Skype4Py: messageStatusChanged не всегда называется

Почему это может произойти?

+0

Это известная проблема для некоторых платформ, которые нам не удалось установить. Можете ли вы включить ведение журнала отладки Skype4Py Python и посмотреть, действительно ли ваше приложение получает сообщения, и оно не потеряно в маршрутизации X11/dbus? –

ответ

2

Решение не было, но я исследовал это немного дальше, потому что задаю себе тот же вопрос. Вы можете использовать dbus-монитор, чтобы увидеть, было ли сообщение о передаче по dbus, когда вы видите messageStatusChanged в вашем приложении.

$ 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" 

во втором примере он не только показывает CHAT от thesender к thereceiver но это на самом деле показывает, что CHATMESSAGE с серийным 3535369 и STATUS был RECEIVED. Только последний, кажется, вызывает messageStatusChanged.

Вопрос: Является первым сообщением, которое должно создать CHATMESSAGE {serial} STATUS RECEIVED? Если да: это ошибка в клиенте Skype? Если нет: если CHATMESSAGE отправляется только в случае обновления в установленный чат, вы должны слушать другое событие?

Я еще не знаю ответа, но, возможно, это помогает.

+0

Я думаю, что правильное место для решения этой проблемы - это форумы по разработке Skype. Они не поддерживают Skype4Py, но они могут отвечать на общие вопросы API Skype. Поскольку Skype является черным ящиком, если сам Skype не отвечает, мы делаем только догадки. –