吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3545|回复: 9
上一主题 下一主题
收起左侧

[其他原创] PHP+go-cqhttp实现QQ机器人

[复制链接]
跳转到指定楼层
楼主
xxhzm 发表于 2023-2-3 11:45 回帖奖励

实现思路

使用 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

免费评分

参与人数 2吾爱币 +1 热心值 +1 收起 理由
bilibini + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
sxlixiaoyang + 1 我很赞同!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

沙发
Pwaerm 发表于 2023-2-3 16:20
太厉害了    谢谢分享
3#
fjkek 发表于 2023-2-3 17:34
4#
qinguangcan 发表于 2023-2-4 22:47
5#
 楼主| xxhzm 发表于 2023-2-6 20:59 |楼主

使用cq码
6#
Monkey0 发表于 2023-2-7 22:49
学习学习
7#
tk12345 发表于 2023-2-13 22:30
明天,来试一下看看
8#
pentium 发表于 2023-2-23 16:53
风险项
一切QQ机器人均存在封号风险,后果自行承担
是封机器人,还是封QQ?
9#
 楼主| xxhzm 发表于 2023-2-28 20:34 |楼主
pentium 发表于 2023-2-23 16:53
风险项
一切QQ机器人均存在封号风险,后果自行承担
是封机器人,还是封QQ?

封QQ................
10#
pentium 发表于 2023-3-1 00:09
xxhzm 发表于 2023-2-28 20:34
封QQ................

那还是小心谨慎为妙
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 19:50

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表