まず、一部のオンラインゲームでは、特定のプレーヤーに不当な利点を与える可能性があるため、ボットを禁止していることに注意してください。MTGOの利用規約は、サービスに悪影響を与える可能性のあるものには制限を設けていますが、これについては何も述べていないようです。また、将来的にAPIを追加する可能性もあるとのことで、自動化の考え方に反することはないようですが、現時点ではサポートしていません。ここでは注意深く踏みますが、有害または虐待的でない限り、ボットを作成しても問題ないようです。これは法律上のアドバイスではありません。MTGOを実行している人々に許可を求めることをお勧めします。編集これを書いた時から、すでにボットがたくさんあることが指摘されているので、ボットを書くのに問題はないはずです。
利用規約で禁止されていないが、APIがない場合は、何が起こっているのかを検出し、ゲームを自動的に制御する方法を見つける必要があります。ポーカーボット(アーカイブされたコピー)の作成に関するかなり優れた一連の記事があります。これには、DLLをアプリケーションに挿入し、画面をスクレイプし、アプリケーションを制御する方法に関する優れた情報が含まれています。それはあなたにこの種のことをするための出発点を提供するかもしれません。
また、他の人がこれを行うためにすでに作成したツールを探すこともできます。既存のMTGOボットがいくつかあるように見えますが、それらはすべて少し大雑把に見えます(パスワードを盗んだという報告がいくつかあります)ので、そこで注意してください。
編集
この回答はまだ賛成票を集めているように思われるので、おそらくもっと役立つ情報で更新する必要があります。これを書いた後、私はSikuliと呼ばれる素晴らしいUI自動化システムを見つけました。これにより、GUIを自動化するプログラムをPythonで作成できます。ボタン、カード、その他のUI要素を非常に簡単に認識できるようにする画像認識機能が含まれています。スクリーンショットを撮り、それを切り取って興味のあるものだけを含め、ファジーな画像マッチングを行います(背景などを変更してもマッチングが失敗しないようにします)。これらのスクリーンショットをソースコードに直接埋め込むことができるカスタムIDEも含まれているため、コードが探しているものを正確に確認できます。これが例ですドキュメントから(コードフォーマットの謝罪、StackOverflowの制限されたHTMLのサブセットを考えると、コード内で画像をインラインで実行することは簡単ではありません):
def resizeApp(app, dx, dy):
switchApp(app)
corner = find(Pattern(
).targetOffset(3,14))
drop_point = corner.getTarget().offset(dx, dy)
dragDrop(corner, drop_point)
resizeApp("Safari", 50, 50)
これは、デバッグしているプロセスにDLLを挿入するという、上記のリンク先の記事で説明されている手法よりもはるかに簡単に開始できます。Sikuliは完全にUIレベルで実行されるため、自動化するプログラムを変更したり、内部の変更によってスクリプトが破損したりする心配はありません。
少し苦手なのは、テキストの処理です。OCR機能を備えていますが、それほど優れているわけではありません。ただし、テキストが選択可能な場合は、テキストを選択してコピーし、クリップボードを直接見ることができます。
優れたAPIやテキストベースのインターフェースなしで何かを自動化するボットを作成する場合、Sikuliはおそらく私が到達する最初のツールです。