搭建你自己的QQ机器人

搭建你自己的QQ机器人

此文由 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。

Copydocker 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]。

Copycurl -X GET 'http://[IP]:3000/get_friend_list' -H 'Authorization: [Token]'

在 URL 中添加?access_token=[Token]。

Copycurl -X GET 'http://[IP]:3000/get_friend_list?access_token=[Token]'

使用 Webhook 进行通知#

这里最重要的的接口自然是发送私聊消息和发送群消息啦,可以在接口调试->HTTP中找到对应的 API,里面也有构造消息的功能,挺简单的。

这里给一个发送私聊消息的例子:

Copycurl -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 的实现,可以参考下述的配置:

Copygeneric://[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 配置示例:

Copyserver {

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#

文档 已经很完善了,这里不做赘述吧。

相关推荐

winform窗体控件(全)
365资讯下载安装

winform窗体控件(全)

📅 07-07 👁️ 3688
佛山南海狮山有什么好玩的地方 十大必去旅游景点推荐
正规365网址是多少

佛山南海狮山有什么好玩的地方 十大必去旅游景点推荐

📅 07-17 👁️ 5235
笔趣阁iOS版下载
365bet足球网址

笔趣阁iOS版下载

📅 10-09 👁️ 2496