を使用して基本的な Skype ボットを作成しようとしてSkype4Py
いますが、かなり深刻なエラーが発生しました。私は32ビットのPython 2.7.8で64ビットのWindows 7に取り組んでいます。Skype4Py の最新バージョンと共にインストールされます。
私の主な要求は、ボットが5
さまざまな Skype チャットの概要を持っていることです。4 人のユーザーとの 4 つの個別のチャットと、4 人のユーザー全員が参加する 1 つの共通のチャットです。そのために、個々の応答とグループ チャットを処理する 2 つの異なる関数を作成しました。
class SkypeBot(object):
def __init__(self):
self.skype = Skype4Py.Skype(Events=self)
self.skype.Attach()
self.active_chat = find_conference_chat()
def MessageStatus(self, msg, status):
if status == Skype4Py.cmsReceived:
if msg.Chat.Name == self.active_chat.Name:
msg.Chat.SendMessage(respond_to_group(msg))
else:
msg.Chat.SendMessage(respond_to_individual(msg))
bot = SkypeBot()
上記のコード (他にもたくさんありますが、その核心は書き留められています) は、ユーザーがプライベートまたはグループ チャットで送信する各メッセージに応答することになっています。
ただし、問題があります。通常、このコードは問題なく動作します。ボットは、個々のユーザーとグループ チャットに応答します。その後、時々 (10 チャットごとに 1 回)、ボットは個々のメッセージへの応答を停止します。この関数MessageStatus
は単純に起動しないため、キャッチする必要があるイベントが他にもあるのではないかと考えました。そこで、一般的なイベント キャッチャーを 1 つボットに追加しました。
def Notify(self, notification):
print "NOTIFICATION:"
print notification
print "=========================="
このコードの唯一の目的は、イベントが欠落しているかどうかを確認することでした。それでしばらく待って、ボットが応答しないときは、関数の出力を確認しました。
- 通常、メッセージが到着すると、ボットはいくつかの通知を受け取ります。チャット メッセージの受信通知、チャット アクティビティのタイムスタンプ通知などがあります。チャットメッセージの受信通知は、最終的に
MessageStatus
イベントをトリガーするものです。 - ボットが応答しなかった場合、通知が 1 つだけ届きました。お知らせでした
CHAT **** ACTIVITY_TIMESTAMP ******
。チャットメッセージが受信されたという通知はなかったので、応答するメッセージはありません。
Skype クライアントを手動でクリックし、受信したメッセージにウィンドウのフォーカスを合わせたところ、MessageStatus
最終的にイベントが発生し、ボットが応答しましたが、それでは遅すぎました。
私の質問にはいくつかの部分があります:
- 私の一般的なコードは正しいですか?
Skype4Py
問題なく動作する場合、コードは正常に動作するはずですか? - 特定のイベントが発生しなかったこのエラーに遭遇した人はいますか?
- 同様のエラーが発生した場合、解決しましたか? そうでない場合、少なくともこの問題を一貫して再現する方法を発見しましたか? 突然どこからともなく現れるので、デバッグすることさえできません...