この文は 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 \ # 次のNoneBotに接続するためにhostネットワークを使用することをお勧めします
--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"
}
}
]
}'
一部のアプリケーションはshoutrrrを Webhook の実装として使用することがあり、以下の設定を参考にできます:
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#
未完待続、まずはドキュメントを参考にしてください。