基于go-cqhttp与Flask搭建定制机器人项目实战示例
作者:𝓼𝓲𝓭𝓲𝓸𝓽
前言
许久之前用 Mirai 搭建了 QQ 机器人,不过因为云服务器到期了,QQ 机器人被 迫下线,现如今,可能是意犹未尽,今天就基于 go-cqhttp 与 Flask 搭建定制机器人;
安装
1、前往 go-cqhttp 的下载地址,选择自己需要的版本,下载的话,一般下载这两个中的其中一个:
具体看自己的系统配置,可以通过 arch
指令进行查看:
博主这里是 x86_64
,所以选择下载第一个,也就是 go-cqhttp_linux_amd64.tar.gz
;
x86_64,x64,AMD64 可看做是同一个东西;
x86
是 intel 开发的一种32位指令集;x86_64
是一种64位的指令集,x86_64
是x86
指令的超集,在x86
上可以运行的程序,在x86_64
上也可以运行,x86_64
是AMD
发明的,也叫AMD64
;
现在用的 intel/amd 的桌面级 CPU 基本上都是 x86_64
,与之相对的 arm
等都不是 x86_64
;
2、创建并打开 go-cqhttp 文件夹:
cd /opt && mkdir go-cqhttp
3、然后把自己下载好的压缩包上传到此处,或者直接通过 wget
指令将压缩包下载到此处;
wget url
4、解压压缩包:
tar -zxvf go-cqhttp_linux_amd64.tar.gz
5、赋予 go-cqhttp
权限:
chmod 777 go-cqhttp
6、第一次运行,生成配置文件:
./go-cqhttp
7、修改配置文件,具体参考官方配置文档;
# go-cqhttp 默认配置文件 account: # 账号相关 uin: 1233456 # QQ账号 password: '' # 密码为空时使用扫码登录 encrypt: false # 是否开启密码加密 status: 0 # 在线状态 请参考 https://docs.go-cqhttp.org/guide/config.html#在线状态 relogin: # 重连设置 delay: 3 # 首次重连延迟, 单位秒 interval: 3 # 重连间隔 max-times: 0 # 最大重连次数, 0为无限制 # 是否使用服务器下发的新地址进行重连 # 注意, 此设置可能导致在海外服务器上连接情况更差 use-sso-address: true heartbeat: # 心跳频率, 单位秒 # -1 为关闭心跳 interval: 5 message: # 上报数据类型 # 可选: string,array post-format: string # 是否忽略无效的CQ码, 如果为假将原样发送 ignore-invalid-cqcode: false # 是否强制分片发送消息 # 分片发送将会带来更快的速度 # 但是兼容性会有些问题 force-fragment: false # 是否将url分片发送 fix-url: false # 下载图片等请求网络代理 proxy-rewrite: '' # 是否上报自身消息 report-self-message: false # 移除服务端的Reply附带的At remove-reply-at: false # 为Reply附加更多信息 extra-reply-data: false # 跳过 Mime 扫描, 忽略错误数据 skip-mime-scan: false output: # 日志等级 trace,debug,info,warn,error log-level: warn # 日志时效 单位天. 超过这个时间之前的日志将会被自动删除. 设置为 0 表示永久保留. log-aging: 15 # 是否在每次启动时强制创建全新的文件储存日志. 为 false 的情况下将会在上次启动时创建的日志文件续写 log-force-new: true # 是否启用 DEBUG debug: false # 开启调试模式 # 默认中间件锚点 default-middlewares: &default # 访问密钥, 强烈推荐在公网的服务器设置 access-token: '' # 事件过滤器文件目录 filter: '' # API限速设置 # 该设置为全局生效 # 原 cqhttp 虽然启用了 rate_limit 后缀, 但是基本没插件适配 # 目前该限速设置为令牌桶算法, 请参考: # https://baike.baidu.com/item/%E4%BB%A4%E7%89%8C%E6%A1%B6%E7%AE%97%E6%B3%95/6597000?fr=aladdin rate-limit: enabled: false # 是否启用限速 frequency: 1 # 令牌回复频率, 单位秒 bucket: 1 # 令牌桶大小 # 连接服务列表 servers: # HTTP 通信设置 - http: # 服务端监听地址 host: 127.0.0.1 # 服务端监听端口 port: 5700 # 反向HTTP超时时间, 单位秒 # 最小值为5,小于5将会忽略本项设置 timeout: 5 middlewares: <<: *default # 引用默认中间件 # 反向HTTP POST地址列表 post: #- url: '' # 地址 # secret: '' # 密钥 #- url: 127.0.0.1:5701 # 地址 # secret: '' # 密钥 # 正向WS设置 - ws: # 正向WS服务器监听地址 host: 127.0.0.1 # 正向WS服务器监听端口 port: 6700 middlewares: <<: *default # 引用默认中间件 - ws-reverse: # 反向WS Universal 地址 # 注意 设置了此项地址后下面两项将会被忽略 universal: ws://your_websocket_universal.server # 反向WS API 地址 api: ws://your_websocket_api.server # 反向WS Event 地址 event: ws://your_websocket_event.server # 重连间隔 单位毫秒 reconnect-interval: 3000 middlewares: <<: *default # 引用默认中间件 # pprof 性能分析服务器, 一般情况下不需要启用. # 如果遇到性能问题请上传报告给开发者处理 # 注意: pprof服务不支持中间件、不支持鉴权. 请不要开放到公网 - pprof: # pprof服务器监听地址 host: 127.0.0.1 # pprof服务器监听端口 port: 7700 # LambdaServer 配置 - lambda: type: scf # 可用 scf,aws (aws未经过测试) middlewares: <<: *default # 引用默认中间件 # 可添加更多 #- ws-reverse: #- ws: #- http: database: # 数据库相关设置 leveldb: # 是否启用内置leveldb数据库 # 启用将会增加10-20MB的内存占用和一定的磁盘空间 # 关闭将无法使用 撤回 回复 get_msg 等上下文相关功能 enable: true
8、再次运行 ## go-cqhttp 扫码绑定机器人;
9、另起会话 screen -S sid10t-bot
,将其在后台挂起;
发送消息
access_token = '' url = f"http://127.0.0.1:port/send_private_msg?access_token={access_token}" msg = "Hello World! --sid10t." data = { "user_id": QQ Number, "message": msg } requests.post(url, data=data, timeout=5)
接收消息
这里的话不用别人的插件,自己写 Flask 监听端口,别问为什么不用其他的框架,比如 SpringBoot 之类的,麻烦,每次更新都要重新编译打包;
先写个 app.py
构建基本的 Flask 框架,同时监听自己的 port:
from flask import Flask, request from api import keyword app = Flask(__name__) @app.route('/', methods=["POST", "GET"]) def get_data(): if request.get_json().get('message_type') == 'private': uid = request.get_json().get('sender').get('user_id') msg = request.get_json().get('raw_message') keyword(msg, uid) if request.get_json().get('message_type')=='group': gid = request.get_json().get('group_id') uid = request.get_json().get('sender').get('user_id') msg = request.get_json().get('raw_message') keyword(msg, uid, gid) return "OK" if __name__ =="__main__": app.run(debug=True, port=port)
然后再写一个 api.py
处理收集到的信息:
def keyword(msg, uid, gid=None): person_send_hello(uid) def send_private_msg(uid): url = f"{BASEURL}/send_private_msg?access_token={ACCESS_TOKEN}" data = { "user_id": uid, "message": "Hello World! --sid10t." } try: requests.post(url, data=data, timeout=5) except: pass
后记
以上就是 基于 go-cqhttp 与 Flask 搭建定制机器人 的所有内容了,之后可以根据自己的需求添加功能,这里就不赘述了,更多关于go cqhttp Flask搭建定制机器人的资料请关注脚本之家其它相关文章!