文档: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'是内容
*/
根据下面文档写成:
代码解析:
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;
}
在请求闲聊接口的函数那里,只要返回值是一个字符串即可
因为本例子有一定的难度,所以不很适合初学者使用,就不写解析了(懒)
结语
我相信会编程的同学看文档就可以学会使用了,这个只是供初学者使用,大部分都是编程知识