Skype4Py: messageStatusChanged не всегда вызывается
У меня бот Skype подключен к работающему экземпляру Skype в X (Linux). Проблема в том, что событие messageStatusChanged не всегда срабатывает при поступлении входящего сообщения. В большинстве случаев это так, но иногда сообщения просто "теряются". Я вижу их появление в клиенте Skype, но событие Skype4Py по какой-то причине не вызывается. Для этих сообщений нет никакой разницы в том, что они содержат.
Почему это может происходить?
1 ответ
Никакого решения, но я исследовал это немного дальше, потому что я задаю себе тот же вопрос. Вы можете использовать dbus-monitor, чтобы видеть, было ли входящее сообщение сигнализировано по 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
отправляется только в случае обновления установленного чата, следует ли прослушивать другое событие?
Я пока не знаю ответа, но, возможно, это поможет.