我的编程空间,编程开发者的网络收藏夹
学习永远不晚

PHP+go-cqhttp实现QQ机器人

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

PHP+go-cqhttp实现QQ机器人

实现思路

使用 go-cqhttp 监听QQ群聊信息,过滤掉心跳包后,使用正则判断是否触发了功能,如果触发了功能,调用第三方 API,然后将 API 返回的 json 数据整理后发送到群内。

后期扩展

理论只有有 API 即可开发功能

风险项

一切QQ机器人均存在封号风险,后果自行承担

为什么使用 go-cqhttp?

因为 go-cqhttp 使用 API 方式接收或发送信息,二次开发较为简单

准备工作

  1. 一台24小时运行的服务器(需要有 nginx + php 环境)

代码实现

<?php

include('Base.php');

class App extends Base
{
    // API地址
    protected $apiUrl = 'http://127.0.0.1:5700'; // go-cqhttp API地址
    protected $footerMsg = '%0a小小孩子们的blog:www.xxhzm.cn'; // 发送到群聊的广告信息
    // 对接的第三方 API 文档 api-m.com
    // 有能力可自行替换为你自己的 API

    public function __construct()
    {
        // 接收json格式字符串
        $qqMsg = json_decode(file_get_contents('php://input'), TRUE);

        if (!$qqMsg) {
            exit;
        }

        if ($qqMsg['post_type'] === 'meta_event') {
            exit;
        }

        // 判断是否用户私聊
        if ($qqMsg['message_type'] === 'private') {
            $this->sendPrivateMsg($qqMsg['user_id'], '请您在群聊中使用');
            exit;
        }

        switch ($qqMsg['raw_message']) {
            case '一言':
                $this->yiyan($qqMsg);
                break;
            case '古诗词':
                $this->poetry($qqMsg);
                break;
            case '菜单':
                $this->menu($qqMsg);
                break;
            case preg_match('/二维码生成 .*/', $qqMsg['raw_message']) === 1:
                $this->QRcode($qqMsg);
                break;
            case preg_match('/备案 .*/', $qqMsg['raw_message']) === 1:
                $this->icp($qqMsg);
                break;
            case preg_match('/whois .*/', $qqMsg['raw_message']) === 1:
                $this->whois($qqMsg);
                break;
            case preg_match('/ip .*/', $qqMsg['raw_message']) === 1:
                $this->ip($qqMsg);
                break;
        }
    }

    // 菜单
    protected function menu($qqMsg)
    {
        $this->sendGroupMsg($qqMsg['group_id'], "%0a一言%0a古诗词%0a二维码生成%0a备案%0awhois%0aip", $qqMsg['user_id']);
    }

    // 一言
    protected function yiyan($qqMsg)
    {
        $data = $this->geturl('https://v1.api-m.com/text/yiyan?type=hitokoto')['data'];
        $this->sendGroupMsg($qqMsg['group_id'], $data, $qqMsg['user_id']);
    }

    // 古诗词
    protected function poetry($qqMsg)
    {
        $data = $this->geturl('https://v1.api-m.com/text/yiyan?type=poetry')['data'];
        $this->sendGroupMsg($qqMsg['group_id'], str_replace(' ', '', $data), $qqMsg['user_id']);
    }

    // 二维码生成
    protected function QRcode($qqMsg)
    {
        $data = $this->geturl('https://v1.api-m.com/pic/QRcode?size=5&text=' . ltrim($qqMsg['raw_message'], '二维码生成 '))['data'];
        $this->sendGroupMsg($qqMsg['group_id'], '生成成功您的二维码为:%0a[CQ:image,file=' . $data . ']', $qqMsg['user_id']);
    }

    // icp备案
    protected function icp($qqMsg)
    {
        $data = $this->geturl('https://v1.api-m.com/domain/icp?domain=' . ltrim($qqMsg['raw_message'], '备案 '));

        // 判断是否请求成功
        if ($data['code'] === '-2') {
            $this->sendGroupMsg($qqMsg['group_id'], $data['msg'], $qqMsg['user_id']);
            return false;
        }

        $unitName = $data['data']['unitName'];
        $natureName = $data['data']['natureName'];
        $serviceLicence = $data['data']['serviceLicence'];
        $updateRecordTime = substr($data['data']['updateRecordTime'], 0, -9);

        $this->sendGroupMsg($qqMsg['group_id'], "查询成功%0a%0a主办单位名称:$unitName%0a主办单位性质:$natureName%0a网站备案/许可证号:$serviceLicence%0a审核时间:$updateRecordTime%0a", $qqMsg['user_id']);
    }

    // whois
    protected function whois($qqMsg)
    {
        $data = $this->geturl('https://v1.api-m.com/domain/whois?domain=' . ltrim($qqMsg['raw_message'], 'whois '));

        // 判断是否请求成功
        if ($data['code'] === '-2') {
            $this->sendGroupMsg($qqMsg['group_id'], $data['msg'], $qqMsg['user_id']);
            return false;
        }

        $DomainName = $data['data']['Domain Name']; // 域名
        $SponsoringRegistrar = $data['data']['Sponsoring Registrar']; // 注册商
        $RegistrarURL = $data['data']['Registrar URL']; // 注册商URL
        $Registrant = $data['data']['Registrant']; // 注册人
        $RegistrantContactEmail = $data['data']['Registrant Contact Email']; // 注册邮箱
        $RegistrationTime = substr($data['data']['Registration Time'], 0, -9); // 注册时间
        $ExpirationTime = substr($data['data']['Expiration Time'], 0, -9); // 到期时间

        $this->sendGroupMsg($qqMsg['group_id'], "查询成功%0a%0a域名:$DomainName%0a注册商:$SponsoringRegistrar%0a注册商URL:$RegistrarURL%0a注册邮箱:$RegistrantContactEmail%0a注册人:$Registrant%0a注册时间:$RegistrationTime%0a到期时间:$ExpirationTime", $qqMsg['user_id']);
    }

    // ip
    protected function ip($qqMsg)
    {
        $data = $this->geturl('https://v1.api-m.com/network/ip?ip=' . ltrim($qqMsg['raw_message'], 'ip '))['data'];

        $begin = $data['begin'];
        $end = $data['end'];
        $address = $data['address'];

        $this->sendGroupMsg($qqMsg['group_id'], "查询成功%0aIP段起始:{$begin}%0aIP段结束:{$end}%0a归属地:{$address}", $qqMsg['user_id']);
    }

    // 在私聊中发送信息
    protected function sendPrivateMsg($userId, $msg)
    {
        $this->geturl($this->apiUrl . '/send_private_msg?user_id=' . $userId . '&message=' . $msg);
    }

    // 在群聊中发送信息
    protected function sendGroupMsg($groupId, $msg, $userId)
    {
        $this->geturl($this->apiUrl . '/send_group_msg?group_id=' . $groupId . '&message=' . '[CQ:at,qq=' . $userId . ']' . $msg . $this->footerMsg);
    }
}

$app = new App();

视频演示

https://www.bilibili.com/video/BV1Es4y1x7Qt/

开源地址

https://github.com/xxhzm/qqbot

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

PHP+go-cqhttp实现QQ机器人

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

PHP+go-cqhttp实现QQ机器人

实现思路使用 go-cqhttp 监听QQ群聊信息,过滤掉心跳包后,使用正则判断是否触发了功能,如果触发了功能,调用第三方 API,然后
2023-02-23

SpringBoot如何搭建go-cqhttp机器人

这篇文章主要介绍“SpringBoot如何搭建go-cqhttp机器人”,在日常操作中,相信很多人在SpringBoot如何搭建go-cqhttp机器人问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Sprin
2023-06-22

怎么使用Python对接OpenAi API实现智能QQ机器人

这篇文章主要介绍“怎么使用Python对接OpenAi API实现智能QQ机器人”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“怎么使用Python对接OpenAi API实现智能QQ机器人”文章能帮
2023-07-05

使用Python对接OpenAi API实现智能QQ机器人的方法

这篇文章主要介绍了使用Python对接OpenAi API实现智能QQ机器人的方法,主要是提供一个方法思路,可以根据实现代码延申出更多的解决方法,需要的朋友可以参考下
2023-03-21

案例:python实现聊天机器人

import pickledata = {"你有女朋友吗":"没有","我们可以交往吗":"可以","今晚约不约":"约","去哪家餐厅":"麦当劳"} with open("db.pkl",'wb') as f: f.write
2023-01-31

Java怎么实现聊天机器人

小编给大家分享一下Java怎么实现聊天机器人,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!具体内容如下Client代码:package GUISocket.cha
2023-06-20

robotstudio机器人编程如何实现

RobotStudio是ABB公司开发的一个虚拟机器人编程和仿真软件,可以在计算机上模拟机器人的运动和工作环境。下面是RobotStudio机器人编程的基本步骤:1. 安装RobotStudio软件并打开。2. 创建一个新的工作站(Work
2023-09-22

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录