PythonでQQロボットを開発する方法

PythonでQQロボットを開発する方法

序文

  • この記事の目的は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 を終了し、コマンドラインで次のコマンドを実行してパッケージを追加します。
  1. 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 を設定します。

  • 以下は参考です。ご自身で合わせてみて下さい。
  1. # ファイル: mcl-1.0.3/config/net.mamoe.mirai.api.http/setting.yml  
  2. authKey: graia-mirai-api-http-authkey # 自分で設定することもできます。こちらがデモです 
  3. # オプション、キャッシュサイズ、デフォルトは 4096。キャッシュが小さすぎると、参照応答とメッセージ取り消しの失敗が発生します。  
  4. キャッシュサイズ: 4096  
  5. enableWebsocket: true # Websocket モードを有効にするかどうか。Websocket モードを使用して対話すると、パフォーマンスが向上します。  
  6. host: '0.0.0.0' # httpapi サービスがリッスンするアドレス。設定が間違っていると、Graia アプリケーションが対話できなくなります。  
  7. port: 8080 # httpapi サービスがリッスンするポート。設定が間違っていると、Graia アプリケーションが対話できなくなります。
  • mclを再起動して設定を更新します
  • 次に、mirai-api-httpインターフェースを操作するためのPythonモジュールをインストールします: graia-application-mirai

pip で graia-application-mirai をインストールします

  • 次のコードを bot.py にコピーし、コメントに従って、先ほどの mirai-api-http の設定に基づいていくつか変更を加えます。そして実行
  1. graia.broadcast からブロードキャストをインポート 
  2. graia.application から GraiaMiraiApplication、Session をインポートします。  
  3. graia.application.message.chain から MessageChain をインポートします 
  4. 非同期インポート 
  5. graia.application.message.elements.internal からプレーンをインポート 
  6. graia.application.friend から Friend をインポート 
  7. ループ= asyncio.get_event_loop ()  
  8. bcc =ブロードキャスト(ループループ=ループ)  
  9. アプリ= GraiaMiraiApplication (  
  10. ブロードキャスト= bcc  
  11. connect_info =セッション(  
  12. host = "http://localhost:8080" , # httpapi サービスが実行されているアドレスを入力します 
  13. authKey = "graia-mirai-api-http-authkey" , # authKeyを入力してください
  14. account = 5234120587 、# ロボットのQQ番号 
  15. websocket = True # Graia は、設定されたメッセージ受信方法に従って、メッセージ受信部分の正常な動作をすでに保証できます。  
  16.  
  17.  
  18. @bcc.receiver("友達メッセージ")  
  19. 非同期def friend_message_listener(アプリ: GraiaMiraiApplication、フレンド: Friend):  
  20. app.sendFriendMessage(friend, MessageChain.create([ を待ちます。  
  21. プレーン("Hello, World!")  
  22. ]))   
  23. app.launch_blocking()
  • 次に、QQ ロボットにメッセージを送信します。Hello, World! と返信があった場合、操作は成功したことを意味します。
  • 成功例は以下の通りです。

結論

上記のすべての操作は、mirai を使用して QQ ロボットを開発するための入門チュートリアルにすぎません。さらに詳しく知りたい場合は、公式ドキュメントを読んで、より多くの API を学習できます。

<<:  自動運転タクシーの分野では競争が激しく、中国では百度がリードしています。

>>:  AI イニシアチブを成功させるために必要な 10 のこと

ブログ    

推薦する

ルカンのリーダーシップの下、自己監督に賭けるMeta AI

自己教師学習は本当に AGI への重要なステップなのでしょうか? Metaの主任AI科学者であるヤン...

人工知能の開発においてセキュリティは無視できない

世界的な科学技術革命と産業変革の新たな局面が本格化している。人工知能は、新たな科学技術革命と産業変革...

AIバブルが崩壊したら

今日の午後、友人とチャットをしていて、人工知能バブルの問題について話しました。この問題に関する私の意...

業界の未来を牽引する8つのデジタル変革トレンド

さらに、2024 年までに、産業企業は自己管理テクノロジーと再設計された運用プロセスを組み合わせるこ...

...

...

認知AIの台頭:2025年にAIは質的に飛躍する

[[441939]] AIの概念が初めて提唱されたのは1956年なので、60年以上の歴史があります。...

2022 年のビジネス インテリジェンスの 7 つのトレンド

ビジネス インテリジェンスは AI に置き換えられることはありません。BI は今でも存在し、役立って...

...

AIの導入は増加しているが、障壁は残っている

AI の可能性は魅力的ですが、導入までの道のりには課題がないわけではありません。企業は、急速に変化す...

...

...

2020年のコロナウイルスがロボット経済をいかに後押ししたか

致命的なコロナウイルスによって引き起こされた経済不況は、さまざまな業界に大きな混乱を引き起こしました...

宇宙全体が巨大なニューラルネットワークなのだろうか?科学者はこう説明する

[[385301]]核となる考え方は、次のように簡単にまとめることができます。ニューラル ネットワー...