QQ机器人速通:急速教学

文档:docs.go-cqhttp.org(要梯子) or github:发布 ·Mrs4s/go-cqhttp (github.com)

前提条件

会用python,有基本的API调用知识,有基本的互联网知识,有足够的编程思维

下载必须品:

go-cqhttp(本站备份) ,python v3.7+

下载不必要品(使用php调用腾讯API) :XAMPP

开始运行go-cqhttp:

1.先运行一遍go-cqhttp

注:通信协议推荐选择第一个

$ go-cqhttp_windows_386.exe

2.生成配置文件后更改配置文件: config.yml

# go-cqhttp 默认配置文件 config.yml

account: # 账号相关
  uin: 217848932187899 # QQ账号
  password: '123456' # 密码为空时使用扫码登录
  encrypt: false  # 是否开启密码加密
  status: 0      # 在线状态 请参考 https://docs.go-cqhttp.org/guide/config.html#在线状态
  relogin: # 重连设置
    delay: 3   # 首次重连延迟, 单位秒
    interval: 3   # 重连间隔
    max-times: 0  # 最大重连次数, 0为无限制

3.扫码登录

在编写好配置文件后就可以登录,有可能需要扫码

不用扫码示例:

d:\Downloads\go-cqhttp_windows_arm64>go-cqhttp_windows_386.exe
[2022-12-11 11:22:38] [INFO]: 当前版本:v1.0.0-rc2
[2022-12-11 11:22:38] [INFO]: 将使用 device.json 内的设备信息运行Bot.
[2022-12-11 11:22:38] [INFO]: Bot将在5秒后登录并开始信息处理, 按 Ctrl+C 取消.
[2022-12-11 11:22:43] [INFO]: 开始尝试登录并同步消息...
[2022-12-11 11:22:43] [INFO]: 使用协议: iPad
[2022-12-11 11:22:44] [INFO]: Protocol -> connect to server: [::ffff:120.232.31.250]:80
[2022-12-11 11:22:44] [WARNING]: Protocol -> device lock is disable. http api may fail.
[2022-12-11 11:22:46] [INFO]: 登录成功 欢迎使用: 铬夕
[2022-12-11 11:22:46] [INFO]: 开始加载好友列表...
[2022-12-11 11:22:46] [INFO]: 共加载 3 个好友.
[2022-12-11 11:22:46] [INFO]: 开始加载群列表...
[2022-12-11 11:22:47] [INFO]: 共加载 2 个群.
[2022-12-11 11:22:47] [INFO]: 资源初始化完成, 开始处理信息.
[2022-12-11 11:22:47] [INFO]: CQ HTTP 服务器已启动: [::]:5700
[2022-12-11 11:22:47] [INFO]: アトリは、高性能ですから!
[2022-12-11 11:22:47] [INFO]: 正在检查更新.
[2022-12-11 11:22:47] [INFO]: 收到服务器地址更新通知, 将在下一次重连时应用.
[2022-12-11 11:22:47] [INFO]: 当前有更新的 go-cqhttp 可供更新, 请前往 https://github.com/Mrs4s/go-cqhttp/releases 下载. 
[2022-12-11 11:22:47] [INFO]: 当前版本: v1.0.0-rc2 最新版本: v1.0.0-rc3
[2022-12-11 11:22:47] [INFO]: 开始诊断网络情况
[2022-12-11 11:22:50] [INFO]: 网络诊断完成. 未发现问题
[2022-12-11 11:23:01] [INFO]: 收到群 ********(76*****369) 内  凡(12******58) 的消息: 我超爱你的(14*****424)

编写代码

一个例子(hello world)

import json
import requests
import time
def getqingqiu(zhongjiedian,myParams):
    #zhongjiedian = '/send_msg' 
    url = "http://127.0.0.1:5700"+zhongjiedian  #拼接终结点
    res = requests.get(url=url, params=myParams)  #发送给API请求
    return(res.text)  #返回请求的内容
def fasong(对象类型,对象id,发送内容):
    if(对象类型 == '群组'):  #判断发送群组消息
        message_type = 'group'  
        id_q = 对象id
        id类型 = 'group_id' 
    elif(对象类型 == '私聊'):
        message_type = 'private'
        id_q = 对象id
        id类型 = 'user_id'
    myParams = {"message_type": message_type ,id类型:id_q,'message':发送内容} #拼接传值内容
    getqingqiu('/send_msg',myParams) #发送

调用函数:

fasong('群组',775990935,'hello world')  
/*
'群组'是对象类型
775990935是群号
'hello world'是内容
*/

根据下面文档写成:

API | go-cqhttp 帮助中心

代码解析:

getqingqiu函数:

这个函数服务于我懒癌的函数

通过url = “http://127.0.0.1:5700″+zhongjiedian可以实现根地址与传入的终结点的拼接

fasong函数:

#通过下面代码确认你要发送的消息是群的还是私聊的
    if(对象类型 == '群组'):  #判断发送群组消息
        message_type = 'group'  
        id_q = 对象id
        id类型 = 'group_id' 
    elif(对象类型 == '私聊'):
        message_type = 'private'
        id_q = 对象id
        id类型 = 'user_id'
#id类型存储的实际上就是文档里面传的键值

进阶例子:

例子一

只需要基本的HTTP请求知识即可

注:这个方案不代表最佳方案

import json
import requests
import time
def getqingqiu(zhongjiedian,myParams):
    #zhongjiedian = '/send_msg'#终结点
    url = "http://127.0.0.1:5700"+zhongjiedian
    # 字典格式,推荐使用,它会自动帮你按照k-v拼接url
    res = requests.get(url=url, params=myParams)
    #print('url:',res.request.url)# 查看发送的url
    #print("response:",res.text)  # 返回请求结果
    return(res.text)
def fasong(对象类型,对象id,发送内容):
    发送内容
    if(对象类型 == '群组'):
        message_type = 'group'
        id_q = 对象id
        id类型 = 'group_id'
    elif(对象类型 == '私聊'):
        message_type = 'private'
        id_q = 对象id
        id类型 = 'user_id'
    myParams = {"message_type": message_type ,id类型:id_q,'message':发送内容}
    getqingqiu('/send_msg',myParams)
def api_fasong():
    对象类型 = input('发送对象的类型(群组/私聊):\n')
    if(对象类型 == '群组'):
        对象id = input('群号:\n')
    else:
        对象id = input('对方QQ号:\n')
    if(对象id == ''):
        exit(1)
    while(True):
        发送内容 = input('发送内容:\n')
        fasong(对象类型,对象id,发送内容)
#api_fasong()调用发信息

def kanxinxi(群号):
    ###############先输出前二十条信息
    myParams = {'group_id' : 群号}
    json_data = getqingqiu('/get_group_msg_history',myParams)
    jiexjson = json.loads(json_data)
    a = 0
    for i in range(len(jiexjson['data']['messages'])-1):
        print(jiexjson['data']['messages'][a]['sender']['card']+':'+jiexjson['data']['messages'][a]['message'])
        a += 1
    #print(len(jiexjson['data']['messages'])-1)
    ###############实时获取新的信息
    lishi = 0  #初始的上一条信息的记忆为零
    while(True):
        json_data = getqingqiu('/get_group_msg_history',myParams)
        jiexjson_1 = json.loads(json_data)
        b = len(jiexjson_1['data']['messages'])-1 #获取数组最大键值
        if(jiexjson_1['data']['messages'][b]['message'] == jiexjson['data']['messages'][19]['message']):
            pass  #和之前的对比,如果没有信息,就不输出
        else:
            发信息人 = jiexjson_1['data']['messages'][b]['sender']['card']
            收到的信息 = 发信息人+':'+jiexjson_1['data']['messages'][b]['message']
            if(lishi == 0):
                #发信息人 = jiexjson_1['data']['messages'][b]['sender']['card']
                #收到的信息 = 发信息人+':'+jiexjson_1['data']['messages'][b]['message']
                print(收到的信息)
                #c = len(jiexjson_1['data']['messages'])-1 #获取数组最大键值,用于索引
                lishi = 收到的信息 #存一份现在的进行对比
            elif(lishi == 发信息人+':'+jiexjson_1['data']['messages'][b]['message']):
                pass
            elif(lishi != 发信息人+':'+jiexjson_1['data']['messages'][b]['message']):
                #发信息人 = jiexjson_1['data']['messages'][b]['sender']['card'] #获取发信息的人
                #收到的信息 = 发信息人+':'+jiexjson_1['data']['messages'][b]['message']
                print(收到的信息)
                #c = len(jiexjson_1['data']['messages'])-1 #获取数组最大键值,用于索引
                lishi = 收到的信息 #存一份现在的进行对比
        time.sleep(0.05)
        '''
        a = 0
        for i in range(19):
            print(jiexjson['data']['messages'][a]['message'])
            a += 1
        '''
def api():
    api = input('【A】获取群信息\n【B】发信息:\n')
    if(api == 'A'):
        群号 = input('群号:\n')
        kanxinxi(群号)
    elif(api == 'B'):
        api_fasong()
api()

运行结果:

PS D:\Downloads\go-cqhttp_windows_arm64> & C:/Users/Administrator/AppData/Local/Programs/Python/Python310/python.exe d:/Downloads/go-cqhttp_windows_arm64/py/发信息.py
【A】获取群信息
【B】发信息:
A
群号:
775990935
洛夕:呦西
洛夕:hello world
洛夕:hello world
洛川寡人:嗯嗯
洛川寡人:888
洛川寡人:我就知道
PS D:\Downloads\go-cqhttp_windows_arm64> & C:/Users/Administrator/AppData/Local/Programs/Python/Python310/python.exe d:/Downloads/go-cqhttp_windows_arm64/py/发信息.py
【A】获取群信息
【B】发信息:
B
发送对象的类型(群组/私聊):
群组
群号:
775990935
发送内容:
专业测试八十年,专业卖化肥
发送内容:
hello world
发送内容:

例子二

注:这个方案不代表最佳方案

调用人工智能聊天API实现聊天

python:

import json
import requests
import time
def fasong(对象类型,对象id,发送内容): #例子一的那个函数
    发送内容
    if(对象类型 == '群组'):
        message_type = 'group'
        id_q = 对象id
        id类型 = 'group_id'
    elif(对象类型 == '私聊'):
        message_type = 'private'
        id_q = 对象id
        id类型 = 'user_id'
    myParams = {"message_type": message_type ,id类型:id_q,'message':发送内容}
    getqingqiu('/send_msg',myParams)
def getqingqiu(zhongjiedian,myParams):
    #zhongjiedian = '/send_msg'#终结点
    url = "http://127.0.0.1:5700"+zhongjiedian
    res = requests.get(url=url, params=myParams)
    return(res.text)
def xinxinxi(群号): #接受群信息
    jieguo = 0
    myParams = {'group_id' : 群号}
    json_data = getqingqiu('/get_group_msg_history',myParams)
    jiexjson = json.loads(json_data)
    data = jiexjson['data']['messages']
    return data
def xinxixi_zuixin(群号): #获取最新群信息
    data = xinxinxi(群号)
    return data[len(data)-1]['message']
def liaotian(neirong):  #请求闲聊接口
    url = "http://127.0.0.1/rengongzhineng/xianliao/"
    myParams = {'neirong' : neirong}
    res = requests.get(url=url, params=myParams)
    json_data_saixuan = json.loads(res.text)
    return json_data_saixuan['Reply']
def huoqvshangyitiao(群号): #获取群的不是自己的最后一条信息
    data = xinxinxi(群号)
    a = len(data)-1
    for i in range(len(data)-1):
        if(data[a]['user_id'] != 2220514289):
            return data[a]['raw_message']
            break
        a-=1
def qunliaotian(群号):  #调用请求
    while(True):
        huoqvdao = xinxixi_zuixin(群号)
        if(huoqvdao == '[CQ:at,qq=2220514289]' or huoqvdao == '洛夕'):
            break
    fasong('群组',群号,liaotian('你好'))  #以问好的方式向进行请求,有更优解
    i = 0 #循环变量
    shang = {1:0}
    shang[0] = huoqvshangyitiao(群号)
    不说话时间 = 0#s
    发出去的 = 0
    while(True):
        if(shang[i] == huoqvshangyitiao(群号)):
            不说话时间 += 0.1
            if(不说话时间 == 60):
                fasong('群组',群号,liaotian('我不说话了'))
            else:
                pass
            pass
        elif(shang[i] != huoqvshangyitiao(群号) and huoqvshangyitiao(群号) != '洛夕停下'):
            发出去的 = liaotian(huoqvshangyitiao(群号))
            fasong('群组',群号,发出去的)
            不说话时间 = 0
            pass
        elif(huoqvshangyitiao(群号) == '洛夕停下'):
            fasong('群组',群号,'ok,我停下')
            break
        i += 1
        shang = {i:0}
        shang[i] = huoqvshangyitiao(群号)
        time.sleep(0.1)

def zuizhonghuanx(群号):
    while(True):
        qunliaotian(群号)
zuizhonghuanx(775990935)

http://127.0.0.1/rengongzhineng/xianliao/ 里面的php代码

代码第三行需要引入腾讯云的phpSDK,本PHP代码由腾讯云的示例代码更改,需要密钥

<?php
#闲聊接口
require_once '../vendor/autoload.php';
use TencentCloud\Common\Credential;
use TencentCloud\Common\Profile\ClientProfile;
use TencentCloud\Common\Profile\HttpProfile;
use TencentCloud\Common\Exception\TencentCloudSDKException;
use TencentCloud\Nlp\V20190408\NlpClient;
use TencentCloud\Nlp\V20190408\Models\ChatBotRequest;
try {
    // 实例化一个认证对象,入参需要传入腾讯云账户secretId,secretKey,此处还需注意密钥对的保密
    // 密钥可前往https://console.cloud.tencent.com/cam/capi网站进行获取
    $cred = new Credential("secretId", "secretKey");
    // 实例化一个http选项,可选的,没有特殊需求可以跳过
    $httpProfile = new HttpProfile();
    $httpProfile->setEndpoint("nlp.tencentcloudapi.com");

    // 实例化一个client选项,可选的,没有特殊需求可以跳过
    $clientProfile = new ClientProfile();
    $clientProfile->setHttpProfile($httpProfile);
    // 实例化要请求产品的client对象,clientProfile是可选的
    $client = new NlpClient($cred, "ap-guangzhou", $clientProfile);

    // 实例化一个请求对象,每个接口都会对应一个request对象
    $req = new ChatBotRequest();
    
    $params = array(
        "Query" => $_GET['neirong']
    );
    $req->fromJsonString(json_encode($params));

    // 返回的resp是一个ChatBotResponse的实例,与请求对象对应
    $resp = $client->ChatBot($req);

    // 输出json格式的字符串回包
    print_r($resp->toJsonString());
}
catch(TencentCloudSDKException $e) {
    echo $e;
}

在请求闲聊接口的函数那里,只要返回值是一个字符串即可

因为本例子有一定的难度,所以不很适合初学者使用,就不写解析了(懒)

结语

我相信会编程的同学看文档就可以学会使用了,这个只是供初学者使用,大部分都是编程知识

QQ机器人速通:急速教学
当前页面https://www.df100.ltd/245.asp,文章作者星姮十织
维度前沿|Dimension Frontier © 2022. 版权所有
暂无评论

发送评论 编辑评论


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