go-cqhttp使用 mirai 以及 MiraiGo 开发的 cqhttp golang 原生实现。

很多机器人要自己编译安装……需要JDK环境、Gradle依赖、导入jar包等,看得头大。直到看到Github的go-cqhttp项目。配置超级简单,10分钟就可以配置好,下面开始介绍。

一、项目介绍

1、兼容性

接口

  • HTTP API
  • 反向HTTP POST
  • 正向WebSocket
  • 反向WebSocket

拓展支持

拓展API可前往 文档 查看

  • HTTP POST多点上报
  • 反向WS多点连接
  • 修改群名
  • 消息撤回事件
  • 解析/发送 回复消息
  • 解析/发送 合并转发
  • 使用代理请求网络图片

2、性能

在关闭数据库的情况下, 加载 25 个好友 128 个群运行 24 小时后内存使用为 10MB 左右. 开启数据库后内存使用将根据消息量增加 10-20MB , 如果系统内存小于 128M 建议关闭数据库使用。

二、开始运行

在开始之前,至少要会一种脚本类语言,如php、python、shell。

1、下载

从 release (opens new window)界面下载最新版本的 go-cqhttp

  • Windows下32位文件为 go-cqhttp-v*-windows-386.zip
  • Windows下64位文件为 go-cqhttp-v*-windows-amd64.zip
  • Windows下arm用(如使用高通CPU的笔记本)文件为 go-cqhttp-v*-windows-arm.zip
  • Linux下32位文件为 go-cqhttp-v*-linux-386.tar.gz
  • Linux下64位文件为 go-cqhttp-v*-linux-amd64.tar.gz
  • Linux下arm用(如树莓派)文件为 go-cqhttp-v*-linux-arm.tar.gz
  • MD5文件为 *.md5 , 用于校验文件完整性
  • 如果没有你所使用的系统版本或者希望自己构建, 请移步 进阶指南-如何自己构建

2、解压

  • Windows下请使用自己熟悉的解压软件自行解压
  • Linux下在命令行中输入 tar -xzvf [文件名]

3、使用

这里介绍 CentOS 8.2.2004 下的配置

3.1 初始化

  1. 打开一个命令行/ssh
  2. cd到解压目录
  3. 输入 ./go-cqhttpEnter运行 , 此时将提示
[WARNING]: 尝试加载配置文件 config.hjson 失败: 文件不存在
[INFO]: 默认配置文件已生成,请编辑 config.hjson 后重启程序.

3.2 修改参数

编辑 config.yml文件,参照 config,md 修改。

3.3 启动项目

再次输入 ./go-cqhttpEnter运行 扫码登录

3.4 守护进程

建议使用PM2管理器守护进程,或 nohup ./go-cqhttp 命令。 PM2管理器守护进程:

pm2 start ./go-cqhttp --name="go-cqhttp" 
pm2 save 
pm2 startup

4、测试

验证http是否成功配置

此时, 如果在本地开启的服务器, 可以在浏览器输入http://127.0.0.1:5700/send_private_msg?user_id=[接收者qq号]&message=[发送的信息]来发送一条测试信息 如果出现{"data":{"message_id":balabala},"retcode":0,"status":"ok"}则证明已经成功配置HTTP 注:请 连 中括号 也替换掉, 就像这样:http://127.0.0.1:5700/send_private_msg?user_id=10001&message=ffeecoishp

5、优化

可以设置域名,然后反代。这个较简单,不赘述。

三、玩转项目

这里介绍几个QQ机器人应用

1、WordPress网站评论推送

function push_qq($comment_id)
{
    // 通过 comment_id 获取 comment 全部信息
    $comment = get_comment($comment_id);
    $siteurl = get_bloginfo('url');
    //  根据自己需求,产生相关描述,可以包括文章内容、评论人、IP、评论内容等
    $text = '文章 《' . get_the_title($comment->comment_post_ID) . '》 有新评论啦!';
    $desp = $text . "\n\n" . "作者: $comment->comment_author \n\n邮箱: $comment->comment_author_email \n\n 评论: $comment->comment_content \n\n 点击查看:$siteurl/?p=$comment->comment_post_ID#comments";
    // 封装一个 Object 对象,其 msg 字段是我们需要推送到 QQ 的消息内容
    $postdata = http_build_query(
        array(
            'message' => $desp
        )
    );
    // 一个 POST 请求
    $opts = array('http' =>
        array(
            'method' => 'POST',
            'header' => 'Content-type: application/x-www-form-urlencoded',
            'content' => $postdata
        )
    );
    $context = stream_context_create($opts);  
    // 将自己的接口地址填在这里
    return $result = file_get_contents('http://ip地址:5700/send_private_msg?user_id=[接收者qq号]', false, $context);
}
// 挂载 WordPress 评论提交的接口
add_action('comment_post', 'push_qq', 19, 2);

2、定时发送每日一图

服务器新建 bing.php 文件并编辑保存

<?php
    $api = 'https://api.szfx.top/bing/api/';
    $oriapi ='https://api.szfx.top/longurl/?url='.$api; //获取重定向后的网址
    $str = file_get_contents($oriapi);
    $res = json_decode($str, true);
    $pic = $res['orinalUrl'];
    $request = 'http://ip地址:5700/send_group_msg?group_id=【QQ群号】&auto_escape=false&message=[CQ:image,file='.$pic.']';
    file_get_contents($request); //发送Bing每日一图
    
    $api2 = 'https://api.szfx.top/bing/api/?type=json';
    $str = file_get_contents($api2);
    $res = json_decode($str, true);
    $title = $res['bing_title'];
    $request2 = 'http://ip地址:5700/send_group_msg?group_id=【QQ群号】';    
    $postdata = http_build_query(
        array(
            'message' => $title
        )
    );
    // 一个 POST 请求
    $opts = array('http' =>
        array(
            'method' => 'POST',
            'header' => 'Content-type: application/x-www-form-urlencoded',
            'content' => $postdata
        )
    );
    $context = stream_context_create($opts);  
    file_get_contents($request2, false, $context);//发送图片版权信息文字
?>

宝塔面板定时程序 进阶玩法:NoneBot2给QQ机器人注入灵魂 – 技术松鼠

四、参考资料

Mmx的博客-https://mmxblog.com/p-6024/Mmx.html

go-cqhttp文档-https://docs.go-cqhttp.org/