序文- この記事の目的はPythonでMiraiロボットを開発することですが、最初のチュートリアル、特に環境設定には類似した操作が多く残っており、他のプログラミング言語を参考にする余地がまだあります。
- Java、Python、その他の必要な環境がすでにインストールされていることを前提としています。
ミライエコシステム- ミライ公式生態学文書[1]
- Mirai を使って QQ ロボットを開発するには、まずその生態をある程度理解する必要があります。複雑すぎて落とし穴も多いからです。そのため、知識が多ければ多いほど、問題に遭遇したときに早く解決できるようになります。
- Miraiエコシステムの概要
- 簡単に言えば、mirai エコシステムの中核は Mirai フレームワークであり、これには mirai-core と mirai-core-api の 2 つの部分が含まれます。
- 前者はプロトコル関連のコンテンツを担当し、後者は前者を操作するための外部インターフェイスの提供を担当します。そのため、プログラマが直接扱うのは mirai-core-api であり、mirai-core は私たちには見えません。
- QQロボットはmirai-core-apiを使用して開発できますが、初心者にとってはまだ難しすぎるため、mirai公式開発チームは、miraiフレームワークによって提供される基本機能をカプセル化し、さらに便利なオープンインターフェースを提供するQQロボットプログラム、mirai-consoleを作成しました。
- mirai-console を使用すると、mirai の QQ ロボットを直接開発する必要はなく、次のモードのような mirai-console プラグインを開発します。
- 恥ずかしいことに、mirai-console プラグインを開発するには、Java または Kotlin を使用する必要があります。私のようにそれらに精通していない場合は、別の公式プラグイン mirai-api-http でこの問題を解決できます。
- したがって、mirai-api-http を利用した QQ ロボットの開発は次のようになります。
- ご覧のとおり、mirai-api-http を使用すると、開発言語のオプションが増えます。ここではPythonを選択します。
はじめるmirai-console-loaderを使用してmirai-consoleを起動します- 上記の紹介によると、mirai QQロボットを開発するには、まずmirai-consoleを実行する必要がありますが、これを実行するのは困難です。たとえば、mirai-core、mirai-console、mirai-console-terminal を準備し、一連の長いコマンドを実行して起動する必要があります。
- 公式は明らかにこれを考慮しました。この高難易度の操作に落胆した初心者を取り戻すために、公式は mirai-console-loader (略して mcl) をリリースしました。これは mirai-console の公式ワンキーランチャーです。したがって、ダウンロードするだけです (最初のステップの 0.0 は無視してください)。 Githubリポジトリの場所: mirai-console-loader[2]
- mcl をダウンロードしたら、解凍し、cmd を開いて、mcl が配置されているディレクトリに切り替えて、mcl を実行します。以下のように表示されます。
- 何も問題がなければ、以下のように mirai-console は正常に起動します。
- しかし、公式サイトからプロジェクトをダウンロードしたところ、ランタイム 0.0 中にエラーが発生しました (エラーがない場合は、この手順を無視してください)。理由は、設定ファイルにエラーがあるからです(運が悪いですね - -)。変更方法は図の通りです。
- 次に、mcl を再実行します。予期しない事態が発生しなければ、正常に実行されます。
- 最初の大きなハードルは乗り越えられた…そしてまた別の大きなハードルがやってくる
mirai-login-solver-selenium を使用してスライダー認証補助ログインを処理する- 正常に起動したmclウィンドウで、QQにログインするためのコマンドを実行します:ログインアカウントパスワード
- ログイン時に mirai-console がスライダー検証を処理できないため、エラーが発生するはずです。
- そこでログインを支援するために別のmiraiプロジェクトmirai-login-solver-selenium[3]が必要になります。
- mirai-login-solver-selenium のインストール手順 (最初に Chrome ブラウザをインストールする必要があります)
- まず、以前実行していた mirai-console を終了し、コマンドラインで次のコマンドを実行してパッケージを追加します。
- mcl --update-package net.mamoe:mirai-login-solver-selenium --channel nightly --type plugin
- 次に、mcl を再実行して、mcl が mirai-login-solver-selenium のダウンロードを試行するようにします。
- ただし、このステップでも問題が発生しました (問題がない場合はスキップしてください)。 Selenium を使用するため、chromedriver を使用する必要があります。ただし、chromedriver は常にダウンロードに失敗するため、この手順では chromedriver を手動でダウンロードし、対応するディレクトリに置き換える必要があります。手順は次のとおりです。
1. cmdウィンドウをチェックして、ダウンロードしているchromedriver mclのバージョンを確認します。 2. 次に、chromedriverの別のミラーソースにアクセスしてダウンロードします。推奨:chromedriver[4] 3. ダウンロードしたいバージョン番号に近いバージョン番号を見つけます。たとえば、私は 86.0.4240.22 をダウンロードしました。 4. ダウンロードしたファイルを解凍し、コマンド ライン ウィンドウで確認したファイル名である chromedriver-86.0.4240.198.exe に名前を変更します。ダウンロードするファイル名と一致している必要があります。 5. 以前に実行したmclコマンドラインプログラムを終了し、準備したchromedriver-86.0.4240.198.exeを次のディレクトリに置き換えます。 6. mcl プログラムを再実行します。すべてがうまくいけば、前の手順を続行し、コマンド login account password を入力してログインを試行できます。次に、ブラウザ ウィンドウがポップアップ表示されるので、間違いのない方法でログイン認証を完了するだけです。ログインが成功した場合、その後のログインごとに再度確認する必要はありません。 - もう一つのハードルを乗り越えた...そして今度は別のハードルがやってくる
mirai-api-http を使用して言語の拡張性を高める(他の言語での開発を可能にする)- 以前から mirai-api-http について話してきましたが、これまでは使用していませんでした。前回の研究では2つのことを行った
1. mclを使用してmirai-consoleを実行する 2. mirai-login-solver-seleniumを使用してスライダー検証コードの通過を支援し、ログインを完了します。 - 次に、mirai-api-http の使用を開始します。まず、mirai-api-http プロジェクトアドレスから mirai-api-http をダウンロードします。
- 次に、ダウンロードしたjarパッケージを図のようにプラグインフォルダに配置します。
- その後、mcl を再起動して再度ログインします。これで準備作業は完了ですが、署名検証に問題があると思われるいくつかのエラーが発生しました。エラーは次のとおりです。
- いろいろ調べた結果、Oracle JDK に問題があることがわかったので、Oracle JDK を Open JDK に置き換えるだけで済みました。手順は次のとおりです。
1.オープンJDK[6]をダウンロードします。例えば、私は図に示すバージョンをダウンロードしました。 2. JDK を解凍し、適切と思われる場所に置きます。たとえば、次の図に示す場所に置きます。 3. 環境変数にjdkのパスを追加します。このコンピューター -> 右クリックしてプロパティ -> システムの詳細設定 -> 詳細設定 -> 環境変数、そして以下の手順に従います。 graia-application-mirai 経由で Python を使用して Mirai ロボットを開発する- ここまでの操作は、基本的にJava/Kotlin以外の言語を使用するすべてのプログラマーに共通です。以下の操作は、Python を使用するプログラマー専用です。
- graia-application-mirai 公式ドキュメント[7]
- まず、図に示すように、mirai-api-http を設定します。
- # ファイル: mcl-1.0.3/config/net.mamoe.mirai.api.http/setting.yml
- authKey: graia-mirai-api-http-authkey # 自分で設定することもできます。こちらがデモです
- # オプション、キャッシュサイズ、デフォルトは 4096。キャッシュが小さすぎると、参照応答とメッセージ取り消しの失敗が発生します。
- キャッシュサイズ: 4096
- enableWebsocket: true # Websocket モードを有効にするかどうか。Websocket モードを使用して対話すると、パフォーマンスが向上します。
- host: '0.0.0.0' # httpapi サービスがリッスンするアドレス。設定が間違っていると、Graia アプリケーションが対話できなくなります。
- port: 8080 # httpapi サービスがリッスンするポート。設定が間違っていると、Graia アプリケーションが対話できなくなります。
- mclを再起動して設定を更新します
- 次に、mirai-api-httpインターフェースを操作するためのPythonモジュールをインストールします: graia-application-mirai
pip で graia-application-mirai をインストールします - 次のコードを bot.py にコピーし、コメントに従って、先ほどの mirai-api-http の設定に基づいていくつか変更を加えます。そして実行
- graia.broadcast からブロードキャストをインポート
- graia.application から GraiaMiraiApplication、Session をインポートします。
- graia.application.message.chain から MessageChain をインポートします
- 非同期インポート
- graia.application.message.elements.internal からプレーンをインポート
- graia.application.friend から Friend をインポート
- ループ= asyncio.get_event_loop ()
- bcc =ブロードキャスト(ループループ=ループ)
- アプリ= GraiaMiraiApplication (
- ブロードキャスト= bcc 、
- connect_info =セッション(
- host = "http://localhost:8080" , # httpapi サービスが実行されているアドレスを入力します
- authKey = "graia-mirai-api-http-authkey" , # authKeyを入力してください
- account = 5234120587 、# ロボットのQQ番号
- websocket = True # Graia は、設定されたメッセージ受信方法に従って、メッセージ受信部分の正常な動作をすでに保証できます。
- )
- )
- @bcc.receiver("友達メッセージ")
- 非同期def friend_message_listener(アプリ: GraiaMiraiApplication、フレンド: Friend):
- app.sendFriendMessage(friend, MessageChain.create([ を待ちます。
- プレーン("Hello, World!")
- ]))
- app.launch_blocking()
- 次に、QQ ロボットにメッセージを送信します。Hello, World! と返信があった場合、操作は成功したことを意味します。
- 成功例は以下の通りです。
結論上記のすべての操作は、mirai を使用して QQ ロボットを開発するための入門チュートリアルにすぎません。さらに詳しく知りたい場合は、公式ドキュメントを読んで、より多くの API を学習できます。 |