この文は Mix Space によって xLog に同期更新されています
最適なブラウジング体験を得るために、元のリンクを訪れることをお勧めします
https://www.do1e.cn/posts/code/building-your-own-qq-bot
前言#
最近、NapCatQQ の WebUI が完成しており、新人にとって非常に適していることに気づいたので、この文章を書きました。
この記事では基本的な使用方法のみを扱い、いくつかの高度な機能が欠けている可能性があります。しかし、以下の基本知識を理解しておく必要があります:コマンドライン、HTTP プロトコル、Docker、Python、完全なゼロベースではありません。(Webhook を使用して通知を行うだけであれば、または既存のNoneBotプラグインを使用するだけであれば、Python プログラミングは必要ありません)
使用するツールはNapCatQQとNoneBotで、前者は QQ を実行し、OneBot11などのプロトコルに接続し、後者は Python を基にしたプロトコル呼び出しのフレームワークです。問題が発生した場合は公式ドキュメントを参照できます。(Webhook を使用して通知を行うだけであれば、NapCatQQ を構築するだけで済みます。)
準備作業#
- サーバー 1 台、内網と外網は問わない。
- QQ ボットとして使用する QQ 番号、メインアカウントの使用は推奨しない。
QQ はプラグインの使用を検出でき、あなたのアカウントに以下の問題が発生する可能性があります:強制ログアウト、ログイン制限、凍結。
各自の実際の状況に基づいて、使用を続けるかどうかを自己評価して決定してください。著者はこの記事を参考にして構築したボットの結果について責任を負いません。
NapCatQQ#
インストール#
NapCatQQのインストール方法は多くありますが、サービスとして使用するので、Docker を使用して Shell バージョンをインストールすることをお勧めします: https://napneko.github.io/guide/boot/Shell#napcat-docker-linux 容器化部署
Docker コンテナには NTQQ 本体が含まれており、対応するバージョンの QQ を別途インストールする必要はありません。
docker run -d \
-v /data/napcat/QQdata:/app/.config/QQ \ # QQデータディレクトリ
-v /data/napcat/logs:/app/napcat/logs \ # ログディレクトリ
-v /data/napcat/config:/app/napcat/config \ # 設定ディレクトリ
-v /etc/localtime:/etc/localtime:ro \
--net=host \ # hostネットワークを使用することをお勧めします、次のNoneBotに接続するため
--name napcat \
--restart=always \
mlikiowa/napcat-docker:latest
この時、 http://[IP]:6099/webui にアクセスすると NTQQ の Web ページが表示され、ログインと設定が可能です。ログインパスワードはログファイルで確認できます(デフォルトは:napcat
)、ログイン後に変更することをお勧めします。
またはdocker logs napcat
でログを確認し、QQ にスキャンしてログインすることもできます。
スキャンしてログインする際は、後続の携帯電話認証が不要になるようにチェックを入れることをお勧めします。
http プロトコルの有効化#
WebUI でネットワーク設定->新規作成->HTTPサーバー
を見つけ、名前、Host、ポートは自由に設定し、メッセージ形式はArray
を選択することをお勧めします。実際のテストではString
とも互換性があり、テキストと画像を混合したメッセージを送信でき、悪意のあるリクエストを防ぐために Token を記入することを強くお勧めします。
有効化後はインターフェースデバッグ->HTTP
または他の使いやすい API テストツールでテストできます。API の参考: https://napcat.apifox.cn/
Token の使用方法は 2 つあります:
- リクエストヘッダーに
Authorization: [Token]
を追加します。
curl -X GET 'http://[IP]:3000/get_friend_list' -H 'Authorization: [Token]'
- URL に
?access_token=[Token]
を追加します。
curl -X GET 'http://[IP]:3000/get_friend_list?access_token=[Token]'
Webhook を使用して通知を行う#
ここで最も重要なインターフェースは、プライベートメッセージの送信とグループメッセージの送信です。インターフェースデバッグ->HTTP
で対応する API を見つけることができ、メッセージを構築する機能もあり、非常に簡単です。
プライベートメッセージを送信する例を示します:
curl -X POST 'http://[IP]:3000/send_private_msg' -H 'Content-Type: application/json' -H 'Authorization: [Token]' -d '{
"user_id": "[TargetQQ]",
"message": [
{
"type": "text",
"data": {
"text": "Hello World!"
}
},
{
"type": "face",
"data": {
"id": "63"
}
},
{
"type": "image",
"data": {
"file": "https://napneko.github.io/assets/newlogo.png"
}
}
]
}'
一部のアプリケーションは、Webhook の実装としてshoutrrrを使用することがあります。以下の設定を参考にしてください:
generic://[IP]:3000/send_private_msg?access_token=[Token]&template=json&titleKey=user_id&messageKey=message&@Content-Type=application/json&$user_id=[TargetQQ]
一部のアプリケーションはすでに OneBot11 プロトコルをサポートしている場合があり、その場合はhttp://[IP]:3000
、Token、ターゲット QQ 番号を入力するだけで済みます。
nginx リバースプロキシ#
ドメインを持っている場合は、以下の NapCatQQ の nginx 設定例を参考にしてください:
server {
listen 80;
listen [::]:80;
listen 443 ssl;
listen [::]:443 ssl;
server_name qq.example.cn;
access_log /var/log/nginx/access.qq.log;
error_log /var/log/nginx/error.qq.log;
location /webui {
proxy_pass http://127.0.0.1:6099$request_uri;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Real-PORT $remote_port;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location /api {
proxy_pass http://127.0.0.1:6099$request_uri;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Real-PORT $remote_port;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location /files {
proxy_pass http://127.0.0.1:6099$request_uri;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Real-PORT $remote_port;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location / {
if ($request_method = POST) {
access_log /var/log/nginx/post.qq.log postdata;
}
proxy_pass http://127.0.0.1:3000$request_uri;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Real-PORT $remote_port;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
NoneBot#
ドキュメントはすでに非常に充実しているので、ここでは詳しく説明しません。