五分钟构建go-cqhttp QQ对话机器人


undefinedundefined

go-cqhttp的下载与安装#

进入go-cqhttp的官网https://docs.go-cqhttp.org/

下载对应的安装包

然后双击安装包运行

之后会生成一个config.yml配置文件

在这个配置文件里,按照注释填写你的相关信息

这里要注意,扫码登录要求登陆设备和手机在同一网络下。

另外,要关闭QQ的设备锁。否则可能导致登录失败。

然后解掉108、109行的注释

图中信息不用修改,secret不用填写。

完善好配置config.yml之后,再次运行下载下来的exe。(如果要求通过生成的bat执行的话,就执行bat)

这样正常情况下,就可以监听到你的QQ消息了。

如果下面有长段黄色警告不用管,因为我们还没写处理程序

编写处理程序#

下面来编写消息处理的脚本。

新建两个脚本main.py和script.py

其中main.py对来自群和个人的消息进行初步分类(当然,你也可以在这里做更进一步的分类)。

然后在两个脚本中分别写入以下内容

Copy
# main.py #!/usr/bin/python3 # -*- coding: UTF-8 -*- from flask import Flask, request from flask_restful import Resource, Api import script import time import requests import random app = Flask(__name__) api = Api(app) class AcceptMes(Resource): def post(self): # 这里对消息进行分发,暂时先设置一个简单的分发 _ = request.json if _.get("message_type") == "private": # 说明有好友发送信息过来 uid = _["sender"]["user_id"] # 获取发信息的好友qq号 message = _["raw_message"] # 获取发送过来的消息 script.handle_private(uid, message) api.add_resource(AcceptMes, "/", endpoint="index") if __name__ == '__main__': app.run("0.0.0.0", "5701") # 注意,这里的端口要和配置文件中的保持一致
Copy
# script.py #!/usr/bin/python3 # -*- coding: UTF-8 -*- import asyncio import httpx import random import string from datetime import datetime def handle_private(uid, message): # 处理私聊信息 if message: # 简单的判断,只是判断其是否为空 remes=message asyncio.run(send(uid, remes)) async def send(uid, message, gid=None): """ 用于发送消息的函数 :param uid: 用户id :param message: 发送的消息 :param gid: 群id :return: None """ async with httpx.AsyncClient(base_url="http://127.0.0.1:5700") as client: if gid is None: # 如果发送的为私聊消息 print(uid) params = { "user_id": uid, "message": message, } await client.get("/send_private_msg", params=params) if gid: print(gid) params={ "group_id": gid, "message": message, } await client.get("/send_group_msg",params=params)

然后运行main.py

如果提示没有安装flask,那就在python的scripts文件夹下运行pip install falsk,总之提示缺少哪个包,就安装哪个包。

上面这两份代码的作用就是 将私聊发来的消息复读发回去。

同样的道理,你可以写出很多处理。

最后通过send进行发送。

获取到的消息格式,可以参考go-cqhttp官网https://docs.go-cqhttp.org/event/#%E7%A7%81%E8%81%8A%E6%B6%88%E6%81%AF

返回的消息的格式,可以参考https://docs.go-cqhttp.org/api/#%E5%9F%BA%E7%A1%80%E4%BC%A0%E8%BE%93

支持传回CQ格式的语句,在返回时,输入类似[CQ:at,id=123]式的语句,会被自动解析成对应的事件。CQ代码可以参考https://docs.go-cqhttp.org/cqcode/#%E8%BD%AC%E4%B9%89

添加API#

通过上面的操作,现在就可以针对特定的消息进行预设的回复了。

本来是想根据手里的数据集和知识集训练出一个聊天机器人来着,学习成本太大,暂时放弃了。

然后就想调用一个线程的对话机器人API,但是月租金19还是低配版,我甚至不舍得充一个大会员,放弃。

最后折中了一下,找一些其他的现有API,然后自己分析生成回复语句。

很幸运发现了一个聚合这种API的网站。https://www.free-api.com/

这样只要学习一下python进行网络通信的手段就行了。

比如,我用“近期节假日”进行试验。

首先需要安装requests模块来实现网络通讯

然后用request.get('url',params)

就可以完成get请求。具体的可以百度一下。

有几个点

  • 在python里面对于json数据是一个叫dict的数据类型。与js中不同,取对象的某个元素,使用'[]'符,而非'.'。例如,对于一个response的data对象,要用response["data"]来取,而非response.data。

也可能是我理解不到位,json与dict可能本就不是一个数据类型?(因为在上面python程序里,对接监听程序的response用法是和js里统一的。

  • request.get 返回的是一个response <200>,这时候要用request.get().json(),就能转化成对象格式。

完成get请求之后,我根据表单格式进行处理,就可以找到今天是什么节日。

posted @   wxyww  阅读(3361)  评论(4编辑  收藏  举报
CONTENTS
点击右上角即可分享
微信分享提示