Do1e

Do1e

github
email

搭建你自己的QQ機器人

此文由 Mix Space 同步更新至 xLog
為獲得最佳瀏覽體驗,建議訪問原始鏈接
https://www.do1e.cn/posts/code/building-your-own-qq-bot


前言#

最近發現NapCatQQ的 WebUI 已經完善了,相當適合新手入門,因此寫下這篇文章。

本文只涉及基礎的使用方法,可能缺少一些進階功能。但同時也需要了解以下的基礎知識:命令行、HTTP 協議、Docker、Python,並非完全零基礎。(如果只想使用 Webhook 進行通知或者使用現有的NoneBot插件,不需要進行 Python 編程)

所使用到工具有NapCatQQNoneBot,前者運行 QQ 並接入OneBot11等協議,後者是基於 Python 調用協議實現的框架,遇到問題時可以查看官方文檔。(如果只想使用 Webhook 進行通知,搭建完 NapCatQQ 即可。)

準備工作#

  1. 一台伺服器,不限內網和外網。
  2. 一個 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 有兩種使用方法:

  1. 在請求頭中添加Authorization: [Token]
curl -X GET 'http://[IP]:3000/get_friend_list' -H 'Authorization: [Token]'
  1. 在 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"
      }
    }
  ]
}'

image

有些應用會使用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#

未完待續,可以先參考文檔

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。