基于go-cqhttp与Flask搭建定制机器人项目实战示例

作者:???????????? 时间:2024-04-26 17:30:32 

前言

许久之前用 Mirai 搭建了 QQ 机器人,不过因为云服务器到期了,QQ 机器人被 迫下线,现如今,可能是意犹未尽,今天就基于 go-cqhttp 与 Flask 搭建定制机器人;

安装

官方安装教程;

go-cqhttp 下载地址;

1、前往 go-cqhttp 的下载地址,选择自己需要的版本,下载的话,一般下载这两个中的其中一个:

基于go-cqhttp与Flask搭建定制机器人项目实战示例

具体看自己的系统配置,可以通过 arch 指令进行查看:

基于go-cqhttp与Flask搭建定制机器人项目实战示例

博主这里是 x86_64,所以选择下载第一个,也就是 go-cqhttp_linux_amd64.tar.gz

x86_64,x64,AMD64 可看做是同一个东西;

  • x86 是 intel 开发的一种32位指令集;

  • x86_64 是一种64位的指令集,x86_64x86 指令的超集,在 x86 上可以运行的程序,在 x86_64 上也可以运行,x86_64AMD 发明的,也叫 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

基于go-cqhttp与Flask搭建定制机器人项目实战示例

5、赋予 go-cqhttp 权限:

chmod 777 go-cqhttp

基于go-cqhttp与Flask搭建定制机器人项目实战示例

6、第一次运行,生成配置文件:

./go-cqhttp

基于go-cqhttp与Flask搭建定制机器人项目实战示例

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 扫码绑定机器人;

基于go-cqhttp与Flask搭建定制机器人项目实战示例

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)

基于go-cqhttp与Flask搭建定制机器人项目实战示例

接收消息

这里的话不用别人的插件,自己写 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搭建定制机器人项目实战示例

后记

来源:https://juejin.cn/post/7168751264979746852

标签:go,cqhttp,Flask,搭建,机器人
0
投稿

猜你喜欢

  • Python实现批量下载图片的方法

    2022-11-17 07:20:08
  • 为2021年的第一场雪锦上添花:用matplotlib绘制雪花和雪景

    2022-02-01 23:19:56
  • vue.js页面加载执行created,mounted的先后顺序说明

    2024-05-09 15:10:22
  • python lambda 表达式形式分析

    2021-05-06 06:05:58
  • Python数据结构栈实现进制转换简单示例

    2022-10-21 13:48:21
  • 网页对联广告代码效果大全

    2007-10-25 23:16:00
  • 给textarea增加长度限制的几种方法

    2009-06-04 12:27:00
  • python实现猜数字小游戏

    2021-09-26 02:23:11
  • vue中实现可编辑table及其中加入下拉选项

    2024-04-10 10:24:51
  • 基于Php mysql存储过程的详解

    2024-06-05 09:22:00
  • Server 对象 错误 ASP 0177 800401f3 的解决方案 Server 对象 错误 ASP 0177 800401f3

    2009-07-28 17:57:00
  • 在ASP中连接使用数据库

    2007-09-22 10:46:00
  • Python如何把Spark数据写入ElasticSearch

    2021-06-28 20:07:46
  • python 创建一个空dataframe 然后添加行数据的实例

    2022-05-08 01:51:59
  • 基于express中路由规则及获取请求参数的方法

    2024-05-11 10:17:53
  • 详解如何创建Python元类

    2023-09-20 04:50:15
  • mysql 查询表中平均分最低的班级

    2024-01-22 05:23:45
  • python分析作业提交情况

    2023-07-29 20:59:31
  • 成功实现ajax,xmlhttp跨域访问(php,asp,jsp)

    2008-02-13 18:40:00
  • Golang控制协程执行顺序方法详解

    2024-02-20 13:00:21
  • asp之家 网络编程 m.aspxhome.com