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

 更新时间:2022年11月23日 09:59:03   作者:𝓼𝓲𝓭𝓲𝓸𝓽  
这篇文章主要为大家介绍了基于go-cqhttp与Flask搭建定制机器人项目实战示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

前言

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

安装

官方安装教程

go-cqhttp 下载地址

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

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

博主这里是 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

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搭建定制机器人的资料请关注脚本之家其它相关文章!

相关文章

  • 使用go module导入本地包的方法教程详解

    使用go module导入本地包的方法教程详解

    go module 将是Go语言默认的依赖管理工具。到今天 Go1.14 版本推出之后 Go modules 功能已经被正式推荐在生产环境下使用了。本文重点给大家介绍如何使用 go module 导入本地包,感兴趣的朋友一起看看吧
    2020-03-03
  • Go语言实现UDP协议及TCP通讯

    Go语言实现UDP协议及TCP通讯

    这篇文章介绍了Go语言实现UDP协议及TCP通讯的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-07-07
  • Golang中堆排序的实现

    Golang中堆排序的实现

    堆是一棵基于数组实现的特殊的完全二叉树,本文主要介绍了Golang中堆排序的实现,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-04-04
  • Go指针数组和数组指针的具体使用

    Go指针数组和数组指针的具体使用

    go语言跟c语言一样,指针数组和数组指针概念容易搞混,本文主要介绍了Go指针数组和数组指针的具体使用,具有一定的参考价值,感兴趣的可以了解一下
    2024-03-03
  • Go语言基础闭包的原理分析示例详解

    Go语言基础闭包的原理分析示例详解

    这篇文章主要为大家介绍了Go语言基础闭包的底层原理及实例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步早日升职加薪
    2021-11-11
  • GO语言利用K近邻算法实现小说鉴黄

    GO语言利用K近邻算法实现小说鉴黄

    本文给大家分享的是一段GO语言利用K近邻算法实现小说鉴黄的方法,本方法的鉴别的关键是关键是向量点的选择和阈值的判定,推荐给大家,有需要的小伙伴可以参考下。
    2015-03-03
  • go语言的sql包原理与用法分析

    go语言的sql包原理与用法分析

    这篇文章主要介绍了go语言的sql包原理与用法,较为详细的分析了Go语言里sql包的结构、相关函数与使用方法,需要的朋友可以参考下
    2016-07-07
  • Golang二进制文件混淆保护操作

    Golang二进制文件混淆保护操作

    这篇文章主要介绍了Golang二进制文件混淆保护操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12
  • Golang发送http GET请求的示例代码

    Golang发送http GET请求的示例代码

    这篇文章主要介绍了Golang发送http GET请求的示例代码,帮助大家更好的理解和使用golang,感兴趣的朋友可以了解下
    2020-12-12
  • GO CountMinSketch计数器(布隆过滤器思想的近似计数器)

    GO CountMinSketch计数器(布隆过滤器思想的近似计数器)

    这篇文章主要介绍了GO CountMinSketch计数器(布隆过滤器思想的近似计数器),文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的朋友可以参考一下
    2022-09-09

最新评论