QQ机器人联合Chatgpt的一套解决方案

QQ机器人联合Chatgpt的一套解决方案

目录

0x00前言

使用Chatgpt的api需要一个聊天平台,可以在飞书上使用,可以在微信小程序上使用,可以做一个聊天网站然后使用,同样可以也可以用在QQ中,本次使用go-cqhttp登录QQ,nonebot2聊天框架,nonebot-plugin-chatgpt-turbo插件,v2ray代理。

本文会探讨各个文件如何配置,并最后给出两种解决方案,一种是使用系统服务来启动各个组件,方便配置,调试;另一种是使用docker-compose.yaml启动docker运行,到时候只需要准备好配置文件就可以直接启动,方便运行。

当然因为使用了nonebot,可以安装好多好玩的插件,这里也会准备一些好玩的。

0x01事前准备

目录

qq机器人使用一个名字,这里我们使用xiaoxi,也可以自定义

目录树:

  • xiaoxi
    • v2ray
      • Dockerfile
      • v2ray
      • config.json
      • start.sh
    • nonebot
      • Dockerfile
      • bot.py
      • pyproject.toml
      • start.sh
      • stop.sh
      • .env.dev
    • go_cqhttp
      • Dockerfile
      • start.sh
      • go-cqhttp
      • config.yml
      • device.json
    • docker-compose.yaml

以上配置只是我们需要调用或者配置的文件,还有其他文件也需要一并加入其中,这里不提而言

0x02 Docker配置

v2ray

由于使用了openai的chatgpt接口,所以需要科学的上网,也就需要一台国外的服务器,具体的过程这里不便细讲,以后可以出一篇文章细说,这里给出几个关键词:v2ray, 代理,x-ui。

最后你需要的是一个config.json文件,以及一个v2ray程序完成以下三个要求即可:

  1. 一个可以运行的v2ray可执行文件,拥有执行权限,在64位linux中运行
  2. 配置文件为:config.json,要求监听本地0.0.0.0本地的10809和10808默认即可
  3. 自己配置自己的国外节点

为了方便在docker中使用,我们额外配置一个启动文件start.sh :

#!/bin/sh
echo "start.sh is runing"
/root/v2ray/v2ray -config /root/v2ray/config.json

该启动文件是给docker准备的,用户可能无法正常使用。

当然,以上的我都会提供一个模板,可能v2ray不是最新版的,用户可以自己升级,只需要将确保v2ray存在,并有可执行权限,start.sh文件同理,config.json只需要按照上面的提示填入节点信息就可以。

config.json

{
  "policy": {
    "system": {
      "statsOutboundUplink": true,
      "statsOutboundDownlink": true
    }
  },
  "log": {
    "access": "",
    "error": "",
    "loglevel": "warning"
  },
  "inbounds": [
    {
      "tag": "socks",
      "port": 10808,
      "listen": null,  # 为了安全,如果是docker启动,就设置null,自己使用就设置为127.0.0.1
      "protocol": "socks",
      "sniffing": {
        "enabled": true,
        "destOverride": [
          "http",
          "tls"
        ]
      },
      "settings": {
        "auth": "noauth",
        "udp": true,
        "allowTransparent": false
      }
    },
    {
      "tag": "http",
      "port": 10809,
      "listen": null, # 此处同理
      "protocol": "http",
      "sniffing": {
        "enabled": true,
        "destOverride": [
          "http",
          "tls"
        ]
      .....

注意:json没有注释,使用该配置文件的时候需要删除# 的注释信息

也可以使用v2rayN快速导出一个配置好的。

当读者完成后,可以启动v2ray,

./v2ray -config ./config.json

然后使用如下指令检查:

curl -x socks5://127.0.0.1:10808 cip.cc

观察是否返回自己服务器的ip即可

将上述文件都保存在v2ray中即可

Dockerfile

FROM alpine
RUN mkdir /root/v2ray/
CMD /root/v2ray/start.sh

测试的时候只需要确定本地能运行,能启动就可以了,不需要到docker里测试

nonebot

本次的nonebot使用的是python10,包管理使用的是poetry,方便后面的插件安装
配置主要是在.env.dev中写入一些必要的信息,最重要的就是chatgpt_apt的key

Dockerfile

FROM python:3.10

WORKDIR /root/nonebot/
COPY . .
RUN curl -sSL https://install.python-poetry.org -o install-poetry.py
RUN python install-poetry.py --yes
RUN /root/.local/bin/poetry install
CMD ./start.sh

start.sh

#!/bin/sh
/root/.local/bin/poetry run python /root/nonebot/bot.py

stop.sh

/bin/kill $(ps -ef | grep /bot.py | awk '{print $2}')

至于模组的安装:使用pip即可,

sudo docker exec -it 容器id pip install nonebot_plugin

安装后会直接修改pyproject.toml文件,之后启动会安装到镜像中。

nonebot的docker编译很慢,建议本地准备环境,然后将测试

go-cqhttp

go-cqhttp可以用来登录,但是需要提前准备好登录的device.json文件,在启动镜像的时候需要事先确定go-cqhttp已经登录完毕,验证都已经通过。

登录的时候可以直接选择协议1:android,但是需要qq登录签名。

config.json

# go-cqhttp 默认配置文件

account: # 账号相关
  uin:  # 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
  # 是否允许发送临时会话消息
  allow-temp-session: false
  sign-server: 'http://192.168.100.5:8080'

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
  # 是否启用日志颜色
  log-colorful: 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     # 令牌桶大小

database: # 数据库相关设置
  leveldb:
    # 是否启用内置leveldb数据库
    # 启用将会增加10-20MB的内存占用和一定的磁盘空间
    # 关闭将无法使用 撤回 回复 get_msg 等上下文相关功能
    enable: true

  # 媒体文件缓存, 删除此项则使用缓存文件(旧版行为)
  cache:
    image: data/image.db
    video: data/video.db

# 连接服务列表
servers:
  # 添加方式,同一连接方式可添加多个,具体配置说明请查看文档
  #- http: # http 通信
  #- ws:   # 正向 Websocket
  #- ws-reverse: # 反向 Websocket
  #- pprof: #性能分析服务器
  # 反向WS设置
  - ws-reverse:
      # 反向WS Universal 地址
      # 注意 设置了此项地址后下面两项将会被忽略
      universal: ws://192.168.100.2:57732/onebot/v11/ws
      # 反向WS API 地址
      api: ws://your_websocket_api.server
      # 反向WS Event 地址
      event: ws://your_websocket_event.server
      # 重连间隔 单位毫秒
      reconnect-interval: 3000
      middlewares:
        <<: *default # 引用默认中间件

start.sh

#!/bin/sh
cd /root/go_cqhttp
./go-cqhttp

登录qq需要使用qsign签名,后面docker-compose会使用。

可以测试构建运行

cd go_cqhttp
sudo docker build .
sudo docker run -v $PWD:/root/go_cqhttp 镜像名称

docker-compse

在docker-compose中,我们创建一个可用的网络,然后让他们互相通信就可以了

version: '3'

networks:
  gpt:
    ipam:
      driver: default
      config:
        - subnet: 192.168.100.0/24
services:
  nonebot:
    build:
      context: ./nonebot
      dockerfile: ./Dockerfile
    networks: 
      - gpt
    depends_on:
      - go-cqhttp
      - v2ray
      - qsign
    volumes:
      - ./nonebot/:/root/nonebot
    command: ["/bin/sh","-c","/root/nonebot/start.sh"]
    networks:
      gpt:
        ipv4_address: 192.168.100.2
  go-cqhttp:
    build:
      context: ./go_cqhttp/
      dockerfile: ./Dockerfile
    volumes:
      - ./go_cqhttp/:/root/go_cqhttp
    command: ["/bin/sh","-c","/root/go_cqhttp/start.sh"]
    depends_on:
      - qsign
    networks:
      gpt:
        ipv4_address: 192.168.100.3
  v2ray:
    build:
      context: ./v2ray
      dockerfile: ./Dockerfile
    networks: 
      - gpt
    volumes:
      - ./v2ray/:/root/v2ray
    command: ["/bin/sh","-c","/root/v2ray/start.sh"]
    networks:
      gpt:
        ipv4_address: 192.168.100.4
  qsign:
      image: xzhouqd/qsign:8.9.63
      networks: 
        - gpt
      restart: always
      environment:
        ANDROID_ID: "此处是android的id"
      networks:
        gpt:
          ipv4_address: 192.168.100.5

需要注意的是,当确定go-cqcqhttp可以运行是,就需要将对应的android的id的填入的docker-compose才行

都准备好之后,就可以使用

sudo docke-compose up -d

就可以启动服务

0x03 service配置

service配置最后的程序都是运行在本机上的,如果本机上已经可以运行机器人的所有服务,那么就可以直接使用服务启动,以下为各个配置文件:

v2ray

[Unit]
Description=v2ray
Requires=network-online.target
After=network-online.target

[Service]
Type=simple
User=libestor
ExecStart=/path/v2ray/v2ray -config /path/v2ray/config.json
ExecStop=kill $(ps -ef |grep v2ray |awk '{print $2}')
Restart=on-failure
[Install]
WantedBy=multi-user.target

nonebot

[Unit]
Description=nonebot control service
Requires=network-online.target
After=network-online.target

[Service]
Type=simple
User=libestor
ExecStart=/bin/bash -c "cd /path/nonebot/xiaoxi && python3 bot.py"
ExecStop=kill $(ps -ef | grep bot.py | awk '{print $2}')

[Install]
WantedBy=multi-user.target

gocqhttp

[Unit]
Description=go-cqhttp control service
Requires=network-online.target
After=network-online.target

[Service]
Type=simple
ExecStart=/bin/bash -c "cd /home/libestor/nonebot/;./go-cqhttp"
ExecStop=kill $(ps -ef |grep go-cqhttp |awk '{print $2}')

[Install]
WantedBy=multi-user.target

具体内容可以在github仓库找到源代码和样例

由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,本站及文章作者不为此承担任何责任。

本站拥有对此文章的修改和解释权。如欲转载或传播此文章,必须保证此文章的完整性,包括版权声明等全部内容。未经本站允许,不得任意修改或者增减此文章内容,不得以任何方式将其用于商业目的

评论

  1. 博主
    1年前
    2023-10-25 12:46:42

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇