skypeにはさまざまな既製のボットがありますが、代表的なものの1つがSevabotです。 それらはすべてSkype APIを使用しており、Microsoftはこれを削除しようとしているため、これらすべてのボットの動作はすぐに不可能になる可能性があります。 そして、私はこれを望んでいません-私はいくつかの場所でそれらを使用して展開を開始します。
どうする?
現在ライブになっているすべてのボットは、デスクトップバージョンのskypeの側で動作します。 すべてを同じ方法で整理しますが、API経由ではなくSkypeにクロールします。
何かを開始するために一方的にゴーサインを送信するには、Skypeからメッセージを抽出するだけで、きしみ音を立てることができます。 Skypeは、データディレクトリのsqlite3データベース内にメッセージを保存します。 待ち伏せして座ります。
import sys import signal from time import sleep import sqlite3 if len(sys.argv) != 3: sys.stderr.write("Usage: %s <path to skype `main.db` file> <watch interval in seconds>\n" % sys.argv[0]) sys.exit(1) def int_handler(signum, frame): sys.exit(0) signal.signal(signal.SIGINT, int_handler) dbfilename = sys.argv[1] interval = float(sys.argv[2]) conn = sqlite3.connect(dbfilename) c = conn.cursor() c.execute("select id from Messages where id = (select max(id) from Messages);") (last_msg_id,) = c.fetchone() while True: sleep(interval) for id, body in c.execute("select id, body_xml from Messages where id > ?;", (last_msg_id,)): last_msg_id = max(id, last_msg_id) print body
実行:
./skype-watch.py ~/.Skype/skype_login/main.db 1
標準出力では、クライアントが送受信するメッセージは少し遅れて実行されます。 要求を変更することにより、処理コードを変更することにより、送信者によるフィルタリングを追加できます-反応。 その考えは明確だと思います。
それで何?
私はそれを二国間にする方法についてのアイデアを聞きたいです。 これまでのところ、Skypeが送信するデータベースに「未送信」メッセージを添付するだけです。送信が失敗してクライアントが終了した場合、Skypeは転送する必要があるものを記憶しているためです。
長所:
- APIは必要ありません。
- Justのように、いくつかの依存関係。
短所:
- レセプションでのみ機能します。
- sqlite3フックを使用しません。
Githubラップ