此文由 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 即可。)
準備工作#
- 一台伺服器,不限內網和外網。
- 一個 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 有兩種使用方法:
- 在請求頭中添加
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#
未完待續,可以先參考文檔