• 2023 版 QQ 机器人运行部署文档


    1.前置说明

    1. 该部署文档会按照先在 Windows 上部署运行再在 Linux 服务器上部署运行的步骤讲解,每一步操作都会比较详细,提供保姆级教程,因此可以放心食用。

    2. 你在 Windows 上部署运行需要有的环境:

      • JDK8 及以上版本;
      • 集成开发环境 IDEA;
      • Maven(IDEA 会自带,也可以额外下载)。
    3. 如果你想让你的机器人持续运行,监听消息,你需要购买一个 Linux 服务器,同时将服务器防火墙所有端口开放。

      image-20230925173308258

    4. 当然,你还需要准备一个 QQ 号作为我们的机器人,等级不要太低,群聊容易被封,私聊应该没什么问题。

    5. 我们等会需要从 Github 上下载一些东西,如果你受到了网速的影响无法下载,可以从我的网盘中直接获取:https://pan.baidu.com/s/17s2usSxazCoV0FtqOGajTQ?pwd=1314

      需要下载的东西包括了:

      • pbbot-rq-v0.1.14-win-x86_64.exe
      • static.zip
      • Spring-Mirai-Server-master.zip
      • socksdroid-1.0.3.apk
      • pbbot-rq-v0.1.14-linux-x86_64

    2.机器人框架的下载与运行

    这里我们选用基于 ricq-高性能 QQ 协议 的机器人框架 pbbot-rq

    2.1 下载机器人框架

    框架版本地址:https://github.com/ProtobufBot/pbrq/releases

    由于先在 Windows 上进行演示,这里我们选择下载当前最新 0.0.14 windows 版本。

    image-20230925003542343

    在硬盘任意位置创建一个文件夹,这里取名为 pbrq,将下载好的 pbbot-rq-v0.1.14-win-x86_64.exe 放到 pbrq 文件夹下。

    image-20230925004446658

    为了 方便/简化 后续命令的执行,我们在这里将 pbbot-rq-v0.1.14-win-x86_64.exe 重命名为 pbbot-rq.exe

    image-20230925005504322

    2.2 下载可操作框架的静态页面

    静态页面版本地址:https://github.com/lz1998/ricq-react-ui/releases

    这里我们下载当前最新的 v0.1.7 版本。

    image-20230925004745100

    将下载好的 static.zip 解压后也放到 pbrq 文件夹下。

    image-20230925005537344

    2.3 运行机器人框架

    在 pbrq 文件夹下打开 cmd 窗口:

    image-20230925005154715

    执行命令:

    pbbot-rq --bind-addr 0.0.0.0:9000 --static-dir static
    
    • 1

    image-20230925005642630

    3.登录QQ机器人

    ⚠️ 如果你下定决心尝试实现 QQ 机器人,请不要半途而废,最好找到比较充裕的时间把该文档的过程一次性走完。因为如果频繁的下线又登录QQ机器人存在账号被封的风险。当然这是我遇到的情况,虽然解封非常简单,只需要扫脸认证一下是本人即可。但还是最好不要这么做。

    3.1 前提说明

    为了保证 QQ 登录的可靠性,我们需要先对作为机器人登录的 QQ 做以下处理:

    • 在手机上登录 QQ,找到 设置 -> 账号安全 -> 登录设备管理,把除了当前本机之外的其他设备管理全删除,效果如图:

      image-20230925010705311

    • 将你的手机与使用的电脑处于同一网络中,有两种可选方式:

      1. 手机关闭 wifi,使用流量,同时开启手机热点,让电脑连上手机热点;
      2. 手机和电脑使用同一 wifi 信号,例如 校园网。

      ⚠️ 记得如果在手机和电脑上启动了代理设备(翻墙软件),记得关闭下。

    3.2 扫码登录

    🏠 访问本地网页:http://localhost:9000

    image-20230925011345485

    点击“创建账号”,切换到“QRCode”扫码登录方式,将 QQ 号 作为“Seed”,将 Watch 作为“Protocol”。

    image-20230925011639561

    配置信息完毕,点击“Login”,就会弹出一个二维码,直接使用手机进行扫码。

    image-20230925011922670

    扫码后,手机上会弹出“登录确认”提醒:

    image-20230925012149459

    点击“登录”,再次查看网页界面,切换到“正在运行”界面,就可以看到我们正在运行的 QQ 了:

    image-20230925012339994

    运行成功后,建议不要频繁关闭又运行 pbbot-cq 机器人框架程序,因为一旦关闭了 cmd 就意味着 QQ 下线了,频繁登录可能导致被封。

    这时候查看我们的 cmd 控制台,发现一直在发出警告:

    image-20230925012500617

    这是正常的,因为该 pbbot-rq 框架一直在尝试与本机的 8081 端口建立连接。也就是我们可以编写后端程序来处理这些消息了,例如存储或者回复消息。

    当然,如果你尝试使用其它 QQ 账号向该 QQ 发送消息,pbbot-rq 是可以收到消息的,会在 cmd 控制台上显示出来:

    image-20230925013259222

    3.3 注意事项

    如果遇到如下图所示登陆失败的情况:当前设备网络不稳定或处于夏杂网络环境,为了你的帐号安全,建议将两个设备连接同一网络或将被扫描设备连接你的手机热点后,重新扫码登录。

    1680886697151

    那么你在电脑上登录校验时,注意以下几点:

    • 设备种子统一使用 QQ 号;
    • 电脑要连接你手机的热点或使用同一 wifi,且保证代理软件已关闭;
    • QQ中 设置 --> 账号安全 --> 登录设备管理 --> 删除所有除了你登录在当前手机的设备,相当于只留下了一个当前登录 QQ 的本地手机设备。

    4.后端程序处理消息

    我们使用一个后端程序来与 pbbot-rq 建立连接,可以接收到消息并做出处理后交给 pbbot-rq 进一步处理。

    关于这个后端程序,pbbot-rq 的作者已经为我们提供了一个快速开发的 spring boot stateer,我们只需要在此基础上进一步修改代码做自定义处理即可。

    4.1 下载 stater

    🏠 仓库地址:https://github.com/ProtobufBot/Spring-Mirai-Server

    image-20230925014359820

    4.2 stater 基本说明

    下载完成后解压缩,使用 IDEA 打开该项目。

    image-20230925014633510

    Plugin 包下有四个插件类,是对消息进行处理的插件,允许执行的插件以及插件的执行顺序在 application.yml 中进行配置:

    spring:
      bot:
        plugin-list: # 配置插件列表(有序),如果插件返回0,继续执行剩余插件,如果插件返回1,终止剩余插件执行
          - net.lz1998.pbbot.plugin.LogPlugin # 日志插件
          - net.lz1998.pbbot.plugin.DemoPlugin # 测试插件
          - net.lz1998.pbbot.plugin.ImagePlugin # 动态生成图片插件
          - net.lz1998.pbbot.plugin.HelloPlugin # 测试插件
    
    server:
      port: 8081 # 不要去动这个端口,因为 pbbot-rq 在尝试向本机的 8081 端口建立连接。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    4.3 运行后端程序

    为了方便测试与便于理解,我们先将 ImagePluginHelloPlugin 的配置注释掉:

    spring:
      bot:
        plugin-list: # 配置插件列表(有序),如果插件返回0,继续执行剩余插件,如果插件返回1,终止剩余插件执行
          - net.lz1998.pbbot.plugin.LogPlugin # 日志插件
          - net.lz1998.pbbot.plugin.DemoPlugin # 测试插件
    #      - net.lz1998.pbbot.plugin.ImagePlugin # 动态生成图片插件
    #      - net.lz1998.pbbot.plugin.HelloPlugin # 测试插件
    
    server:
      port: 8081
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    再将 DemoPlugin 修改为以下内容:

    @Component
    public class DemoPlugin extends BotPlugin {
    
        /**
         * 对私聊消息进行处理,这里我们实现一个QQ机器人复读机效果
         */
        @Override
        public int onPrivateMessage(@NotNull Bot bot, @NotNull OnebotEvent.PrivateMessageEvent event) {
            // 拿到发送给 QQ 机器人消息的发送者的 QQ 号
            long userId = event.getUserId();
            // 拿到发送者的发送消息内容
            String eventRawMessage = event.getRawMessage();
            // 构建准备回复的消息,将发送者消息作为 QQ 机器人的回复
            Msg msg = Msg.builder().text(eventRawMessage);
            // 发送消息
            bot.sendPrivateMsg(userId, msg, false);
            // 表示不继续执行下一个插件
            return MESSAGE_BLOCK;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    MyAspect 类的 @Component 注解注释掉:

    image-20230925020904394

    找到 SpringMiraiServerApplication 启动类,启动项目。

    image-20230925020002159

    可以看到新的连接已经建立了,其实是与 pbbot-rq 建立了连接。我们再观察 cmd 控制台,发现也不报警告了:

    image-20230925020132189

    4.4 测试消息处理

    我们在上一步修改了 DemoPlugin 的代码,对发送给 QQ 机器人私有消息进行了处理,即会回复重复的消息,我们就此进行测试。

    拿其它 QQ 账号向 QQ 机器人发送消息,发现 QQ 机器人进行了回复:

    image-20230925020557421

    查看 cmd 控制台:

    image-20230925020631368

    查看后端应用程序控制台:

    image-20230925021023061

    4.5 关于扩展消息处理

    你可以自定义插件类去对消息做更多处理,作者提供的四个插件类已经做了一些示例来处理来自“私聊”和“群聊”的消息。

    当然,了解更多的功能,你可以参考作者的博客:lz1998’s blog

    ⚠️ 在对群聊消息进行处理回复时,你需要注意 QQ 机器人的等级不要太低。我目前的 QQ 机器人等级是 3 个月亮,在十几个人的群聊里进行 QQ 机器人的消息回复没有任何问题,但当加入了一百多个人的大群进行消息回复一段时间后,就会被腾讯禁用无法发送消息到群聊(隔 24 个小时后又恢复了,如此往复几天后不再会被禁用),但私聊还是被允许的。

    5.Linux 服务器持续运行 QQ 机器人

    上述已经演示了如何在 Windows 上运行,为了让 QQ 机器人持续运行提供服务,我们需要把 QQ 机器人放到 Linux 服务器上。

    5.1 安装 docker

    🍀 基于centos的安装

    1. 安装yum-utils

      sudo yum install -y yum-utils
      
      • 1
    2. 从国内服务器上下载docker

      sudo yum-config-manager \
          --add-repo \
          http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
      
      • 1
      • 2
      • 3
    3. 安装docker

      sudo yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
      
      • 1
    4. 验证是否成功

      sudo docker --version
      
      • 1

    🍀 基于ubuntu

    1. 安装需要的包

      sudo apt-get update
      
      • 1
    2. 安装依赖包

      sudo apt-get install \
         apt-transport-https \
         ca-certificates \
         curl \
         gnupg-agent \
         software-properties-common
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
    3. 添加 阿里 GPG 密钥

      sudo curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
      
      • 1
    4. 设置远程仓库

      sudo add-apt-repository \
         "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
        $(lsb_release -cs) \
        stable"
      
      • 1
      • 2
      • 3
      • 4
    5. 安装 Docker-CE

      sudo apt-get update
      
      • 1
      # 会让你输入 y/n,选择输入 y
      sudo apt-get install docker-ce docker-ce-cli containerd.io
      
      • 1
      • 2
    6. 验证是否成功

      sudo docker --version
      
      • 1

      image-20230925143542814

    5.2 配置阿里云加速器

    国内镜像中心常用的为阿里云与网易云,选择其中一个加速器进行配置即可。在本地 Docker 中指定要使用的国内加速器地址后,就可以直接从国内镜像中心下载镜像了。这里我们配置阿里云加速器。

    🍀 找到相应页面

    若要配置阿里云加速器,必须首先要有阿里云的账号。

    登录阿里云后,打开阿里云的容器镜像服务 (aliyun.com)

    然后找到如下页面,可以查看到你的 registry-mirrors

    image-20230925143122500

    🍀 创建 docker 目录

    sudo mkdir -p /etc/docker
    
    • 1

    🍀 创建 daemon.json 文件

    注意,该 json 数据中的 URL 地址是与阿里云用户登录账号绑定的,不同的阿里云用户所生成的地址是不同的。

    sudo vim /etc/docker/daemon.json
    
    • 1

    将以下内容放入 daemon.json 中,registry-mirrors 的值需要查看你的阿里云用户的加速器地址。

    {
      "registry-mirrors": ["https://*******.mirror.aliyuncs.com"]
    }
    
    • 1
    • 2
    • 3

    🍀 重新加载服务配置文件

    sudo systemctl daemon-reload
    
    • 1

    🍀 重启 docker 引擎

    sudo systemctl restart docker
    
    • 1

    5.3 将手机与服务器处于同一网络:socks5

    在 Windows 上登录 QQ 机器人时,我们说明了需要让手机和电脑处于同一网络,这里我们需要同样进行处理,让手机和 Linux 服务器也处于同一网络。

    🍀 什么是 SOCKS5

    SOCKS5 是一个代理协议,它在使用 TCP/IP 协议通讯的前端机器和服务器机器之间扮演一个中介角色,使得内部网中的前端机器变得能够访问 Internet 网中的服务器,或者使通讯更加安全。

    socks5 类似于梯子,可以通过 socks5 协议,将自己的设备“伪装”成对应的服务器(socks5 属于明文代理,不能用来做一些特殊的事),可以使用 socks5 来做跳板机等常用的运维工具。

    🍀 设置数据卷

    # 创建目录
    sudo mkdir -p /app/socks5-docker
    
    # 编辑配置信息
    sudo vim /app/socks5-docker/sockd.passwd
    
    • 1
    • 2
    • 3
    • 4
    • 5

    将以下内容写入到 sockd.passwd 中:

    sockd:xJY9EJy0Bk//U
    
    • 1

    🍀 运行容器

    sudo docker run \
    --name sockd \
    --publish 2020:2020 \
    --volume /app/socks5-docker/sockd.passwd:/home/danted/conf/sockd.passwd \
    -d lozyme/sockd
    
    • 1
    • 2
    • 3
    • 4
    • 5

    🍀 创建用户

    这里我将用户的用户名设置为 testu,密码设置为 testp

    sudo docker exec sockd script/pam add testu testp
    
    • 1

    🍀 验证

    sudo curl https://ifconfig.co --socks5 127.0.0.1:2020 --proxy-user testu:testp
    #此处显示为你的服务器 ip,则为成功
    
    • 1
    • 2

    🍀 下载连接工具

    这个工具是在手机上进行安装使用的。

    🏠 下载地址:Releases · bndeff/socksdroid (github.com)

    image-20230407211553664

    下载完成后,将安装包发送给手机,然后手机上安装。

    🍀 手机与服务器建立连接

    进行如下配置:

    • Server IP:你的服务器的 IP 地址;
    • Server Port:2020;
    • Username:用户名,使用我们之前配置的 testu;
    • Password:密码,使用我们之前配置的 testp。

    image-20230407211836481

    设置完成后,点击右上角的“开关”,即可开启代理。

    image-20230925160705464

    5.4 将所有启动文件放到 Linux

    🍀 下载并上传 Linux 版的 pbbot-rq.exe

    🏠 Releases · ProtobufBot/pbrq (github.com)

    image-20230925153010584

    在 Linux 服务器上新建 qqrobot 文件夹,添加权限,并进入到该目录下:

    # 在根目录下创建 qqrobot 文件夹
    sudo rmdir /qqrobot
    
    # 添加权限,方便文件上传
    sudo chmod 777 /qqrobot
    
    # 进入 qqrobot 文件夹
    cd qqrobot
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    将从 Github 下载好的 pbbot-rq-v0.1.14-linux-x86_64 上传到 qqrobott 文件夹下:

    image-20230925161256386

    # 将 pbbot-rq-v0.1.14-linux-x86_64 重命名为 pbbot-rq
    sudo mv pbbot-rq-v0.1.14-linux-x86_64 pbbot-rq
    
    # 添加权限
    sudo chmod 777 pbbot-rq
    
    • 1
    • 2
    • 3
    • 4
    • 5

    🍀 上传静态页面

    我们只需要将之前下载的 static.zip 重新解压一份上传到 Linux 服务器的 qqrobot 文件夹下即可。

    image-20230925163231014

    🍀 打包并上传后端程序

    使用 IDEA 打开我们在本文第四节使用的 Spring-Mirai-Serve,该项目我们已经实现了私聊时的复读机功能。

    现在我们把这个项目打包成 jar,放到 Linux 服务器上去运行。

    image-20230925161938280

    打包后在 target 文件夹下就可以看到了:

    image-20230925162030349

    我们将 spring-mirai-server-0.0.1-SNAPSHOT.jar 同样上传到 Linux 服务器的 qqrobot 文件夹下:

    image-20230925163320932

    🍀 Linux 安装 JDK 环境

    • centos

      sudo yum install java-1.8.0-openjdk
      
      • 1
    • ubuntu

      # 会让你输入 y/n,选择输入 y
      sudo apt install openjdk-8-jre-headless
      
      • 1
      • 2

    🍀 登录 QQ 机器人

    📌 前提说明

    这里与之前在 Windows 上登录 QQ 机器人同样的要求:

    • 保证登录设备只存在手机本机一个;
    • 服务器和手机处于同一网络,这个问题我们已经使用 socks 解决了,登录成功后就可以关闭 socks 了。
    📌 启动 pbbot-rq
    # 在 qqrobot 文件夹下执行该命令,采用的后台运行模式
    sudo nohup ./pbbot-rq --bind-addr 0.0.0.0:9000 --static-dir static >pbrq.log 2>&1 &
    
    • 1
    • 2

    🏠 在自己电脑上访问:http://【服务器IP】:9000

    image-20230925163825481

    📌 扫码登录

    image-20230925163944747

    点击“Login”,就会显示登录二维码。

    image-20230925164027600

    使用手机扫码后,就能登录成功了。

    image-20230925164139909

    登陆成功后,就可以关闭 socks 了,在 Linux 上的操作:

    # 关闭 socks
    sudo docker stop sockd
    
    # 启动 socks
    sudo docker start sockd
    
    • 1
    • 2
    • 3
    • 4
    • 5

    🍀 启动后端程序

    # 在 qqrobot 文件夹下执行该命令,采用的后台运行模式
    sudo nohup java -jar spring-mirai-server-0.0.1-SNAPSHOT.jar >qqrobot.log 2>&1 &
    
    • 1
    • 2

    🍀 测试

    使用其它账号尝试向 QQ 机器人发送消息:

    image-20230925164424339

    🍀 停止运行

    📌 停止后端程序运行

    如果你是想让 QQ 机器人停止对消息的处理而不是退出登录,则只需要停止后端程序的运行。当然也推荐这么做,避免重复登录。

    # 查看后端程序运行的 pid
    sudo ps -ef | grep java
    
    • 1
    • 2

    image-20230925165158023

    # 格式:sudo kill 
    sudo kill 22016
    
    • 1
    • 2
    📌 停止 pbbot-rq 框架运行

    这意味着 QQ 机器人下线。

    # 查看框架运行的 pid
    sudo ps -ef | grep pbbot-rq
    
    • 1
    • 2

    image-20230925165517716

    # 格式:sudo kill 
    sudo kill 21915
    
    • 1
    • 2

    6.总结

    以上就是全部说明,每一步都是我的实际操作。

    最后,如果你在运行 QQ 机器人一段时间后遇到了如下问题被迫下线:

    image-20230925171156245

    你只需要点击“去处理”,认证是本人登录即可,非常简单。初次使用 QQ 机器人时可能会遇到这个问题,运行久了就不会出现了。

  • 相关阅读:
    linux docker 更改镜像和容器的存放路径
    Java面试之SpringBoot篇
    STM32 Nucleo-144开发板开箱bring-up
    使用API有效率地管理Dynadot域名,自查账户信息
    while语句使用
    Elastic Search 浅浅认识 快速使用 keyword 和 text 的区别之处 spring boot 集成案例 es 增删改查
    C Primer Plus(6) 中文版 第14章 结构和其他数据形式 14.1 示例问题:创建图书目录
    速卖通选品推荐:韩国市场有哪些潜力机会商品?
    jenkins 原理篇——pipeline流水线 声明式语法详解
    c语言练习题82:顺序表的使用
  • 原文地址:https://blog.csdn.net/qq_62982856/article/details/133277500