目录

前期准备

1.QQ机器人框架的下载和配置

具体实现

1.发送信息

2.接收上报的事件

3.实现简单的自动回复

4.实现智能聊天功能

5.解决多次回复问题


前期准备

1.QQ机器人框架的下载和配置

⑴首先需要一个QQ机器人的框架,这里我使用的是基于 Mirai 以及 MiraiG开发的go-cqhttp

下载地址

Windows推荐下载这个

Mac推荐下这个

下载后得到三个文件

⑵双击第一个文件,输入0后回车,然后关闭

此时Windows系统的会在原来的目录中生成配置文件config.yml,而Macos系统的可以在访达中搜索找到

⑶双击打开config.yml文件,输入账号和密码(建议使用无登录保护的QQ,要不然会很麻烦)

也可以不输入账号和密码,直接运行bat文件会出现二维码扫码登录,这样更加安全

最后在转到后两行,把#去掉,使其生效(很重要!!!)

⑷配置完成后直接双击bat文件,等待一段时间后会出现如下窗口

这两个端口都应该出现(很重要!!!)

如果运行bat文件后出现以下情况,不要慌,属于正常现象:

窗口会一直上报收到的信息,不要关闭

更多问题请查看官方文档

到这里,go-cqhttp的配置算是完成了

具体实现

1.发送信息

包括发送私聊信息和群聊信息,下面函数已经写好了,只需要传入参数即可

def send_msg(resp_dict):client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)ip = '127.0.0.1'client.connect((ip, 5700))msg_type = resp_dict['msg_type']  # 回复类型(群聊/私聊)number = resp_dict['number']  # 回复账号(群号/好友号)msg = resp_dict['msg']  # 要回复的消息# 将字符中的特殊字符进行url编码msg = msg.replace(" ", "%20")msg = msg.replace("\n", "%0a")if msg_type == 'group':payload = "GET /send_group_msg?group_id=" + str(number) + "&message=" + msg + " HTTP/1.1\r\nHost:" + ip + ":5700\r\nConnection: close\r\n\r\n"elif msg_type == 'private':payload = "GET /send_private_msg?user_id=" + str(number) + "&message=" + msg + " HTTP/1.1\r\nHost:" + ip + ":5700\r\nConnection: close\r\n\r\n"print("发送" + payload)client.send(payload.encode("utf-8"))client.close()return 0

⑴发送私聊消息

resp_dict={'msg_type':'private','number':QQ号,'msg':'在吗'}
send_msg(resp_dict)

⑵发送群聊信息

resp_dict={'msg_type':'group','number':QQ号,'msg':'有人吗'}
send_msg(resp_dict)

⑶go-cqhttp框架不仅支持发送文本信息,并且还支持发送图片、音乐、表情包,甚至还可以@某人

例如:@某人

send_msg({'msg_type': ' provide', 'number': QQ号, 'msg': '[CQ:at]'})

发送表情

send_msg({'msg_type': 'group', 'number': QQ群号, 'msg': '[CQ:表情id]'})

更多功能请查看官方文档

2.接收上报的事件

新建一个py文件把名字改为receive,之后方便调用(不要运行这个代码,否则会引起端口冲突)。这个返回的是事件的上报信息,包括接收到的信息、加好友请求等等。

import socket
import jsonListenSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
ListenSocket.bind(('127.0.0.1', 5701))
ListenSocket.listen(100)HttpResponseHeader = '''HTTP/1.1 200 OK
Content-Type: text/html
'''def request_to_json(msg):for i in range(len(msg)):if msg[i]=="{" and msg[-1]=="\n":return json.loads(msg[i:])return None# 需要循环执行,返回值为json格式
def rev_msg():# json or NoneClient, Address = ListenSocket.accept()Request = Client.recv(1024).decode(encoding='utf-8')rev_json=request_to_json(Request)Client.sendall((HttpResponseHeader).encode(encoding='utf-8'))Client.close()return rev_json

3.实现简单的自动回复

需要写一个while循环一直获取rev,然后根据字段里面的信息做出回应。废话不多说,下面直接上代码:

from receive import rev_msg
import socket# 发送消息函数
def send_msg(resp_dict):client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)ip = '127.0.0.1'client.connect((ip, 5700))msg_type = resp_dict['msg_type']  # 回复类型(群聊/私聊)number = resp_dict['number']  # 回复账号(群号/好友号)msg = resp_dict['msg']  # 要回复的消息# 将字符中的特殊字符进行url编码msg = msg.replace(" ", "%20")msg = msg.replace("\n", "%0a")if msg_type == 'group':payload = "GET /send_group_msg?group_id=" + str(number) + "&message=" + msg + " HTTP/1.1\r\nHost:" + ip + ":5700\r\nConnection: close\r\n\r\n"elif msg_type == 'private':payload = "GET /send_private_msg?user_id=" + str(number) + "&message=" + msg + " HTTP/1.1\r\nHost:" + ip + ":5700\r\nConnection: close\r\n\r\n"print("发送" + payload)client.send(payload.encode("utf-8"))client.close()return 0while True:try:rev = rev_msg()print(rev)if rev == None:continueexcept:continueif rev["post_type"] == "message":if rev["message_type"] == "private":  # 私聊if rev['raw_message'] == '在吗':qq = rev['sender']['user_id']send_msg({'msg_type': 'private', 'number': qq, 'msg': '在的'})  #elif rev["message_type"] == "group":  # 群聊group = rev['group_id']# if "[CQ:at,qq=机器人的QQ号]" in rev["raw_message"]:if rev['raw_message'] == '有人吗':qq = rev['sender']['user_id']send_msg({'msg_type': 'group', 'number': group, 'msg': '当然有'.format(qq)})else:continueelse:continue

可以将上面的代码命名为main.py,之后的代码都是在这里添加的。需要一直运行,不能关闭

4.实现智能聊天功能

这里就要用到API接口了,目前我找到的智能回复的机器人是思知机器人,接口地址为:

https://api.ownthink.com/bot

首先先要去官网上注册账号,然后创建机器人,查看机器人的appid

如果有什么不懂得可以查看官方文档

请求参数:

返回参数:

下面直接上代码

import requests
from receive import rev_msg
import socket# 发送消息函数
def send_msg(resp_dict):client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)ip = '127.0.0.1'client.connect((ip, 5700))msg_type = resp_dict['msg_type']  # 回复类型(群聊/私聊)number = resp_dict['number']  # 回复账号(群号/好友号)msg = resp_dict['msg']  # 要回复的消息# 将字符中的特殊字符进行url编码msg = msg.replace(" ", "%20")msg = msg.replace("\n", "%0a")if msg_type == 'group':payload = "GET /send_group_msg?group_id=" + str(number) + "&message=" + msg + " HTTP/1.1\r\nHost:" + ip + ":5700\r\nConnection: close\r\n\r\n"elif msg_type == 'private':payload = "GET /send_private_msg?user_id=" + str(number) + "&message=" + msg + " HTTP/1.1\r\nHost:" + ip + ":5700\r\nConnection: close\r\n\r\n"print("发送" + payload)client.send(payload.encode("utf-8"))client.close()return 0# 控制整个机器人运行
def main02():while True:try:rev = rev_msg()print(rev)if rev == None:continueexcept:continueif rev["post_type"] == "message":message = rev['raw_message']data = {"appid": "自己机器人的appid","userid": "自己的id","spoken": message,}url = 'https://api.ownthink.com/bot'headers = {'Content-Type':'application/json'}response = requests.post(url=url, data=data, headers=headers)print(response.status_code)response.encoding = 'utf-8'result = response.json()answer = result['data']['info']['text']if rev['message_type'] == 'private':  #qq = rev['sender']['user_id']send_msg({'msg_type': 'private', 'number': qq, 'msg': answer})elif rev['message_type'] == 'group':qq01 = rev['group_id']send_msg({'msg_type': 'group', 'number': qq01, 'msg': answer})if __name__ == '__main__':main02()

5.解决多次回复问题

接收本地端口的数据时会有重复的报文(大概5次),就像这样:

出现这种问题只需要把receive.py中的HttpResponseHeader修改一下就OK了

更多功能敬请期待,感谢大家对本文的支持的支持!!

制作属于自己的QQ机器人,超详细相关推荐

  1. 制作一个有趣的QQ机器人

    如何制作一个有趣的QQ机器人 制作一个好玩的QQ机器人(只能手机进行操作哦) 题记:这个机器人用来整蛊兄弟或者是在朋友面前装逼都是不错的选择 QQ机器人简介 机器人效果图 机器人制作方法 机器人必下软 ...

  2. uniapp中qrcode生成二维码后传的参数不见了_阿虚教你制作动态二维码,超详细教程!

    这篇教程很早之前就答应几个粉丝要写,拖的有点久了. 内容比较多,先上个目录 阿虚的教程会迟到,但永远不会缺席.hahahahhaha... 一. 先说一下今天要教的内容 ʕ•̫͡•ོʔ•̫͡•ཻʕ•̫ ...

  3. (十)Scratch制作《贪吃蛇》,超详细

    几乎在学习任何一种编程语言过程中,都会拿<贪吃蛇>这款游戏来实战练手,那如何用Scratch来制作 <贪吃蛇>呢? 贪吃蛇 首先声明制作<贪吃蛇>方法多种多样,不局 ...

  4. iOS 制作推送证书的流程 超详细!!!!!

    制作推送证书的流程: 首先我们要有生成一个Certificate Signing Request(也就是CSR)的请求文件.(在应用程序里的使用工具中找到钥匙串访问). 登录开发者账号: (1)如果没 ...

  5. 自己制作一个回收站图标吧~(超详细)

    目录 前言 一.效果 二.制作步骤 1.准备两张.ico图片 2.个性化设置 三.写在最后 前言 最近某音上的猫猫回收站很火,好多人都用上了POP猫猫主题回收站(我也不例外),但是今天想自己制作一个特 ...

  6. CPA制作自动下载静默包php,超详细揭秘可日赚千元的CPA静默安装包制作方法

    你是否有过去网上下载东西,结果下了一大堆"垃圾"经历? 心里是否吐槽着:这些人是不是吃饱了撑的,传那么一大堆垃圾上去干嘛?不!他们并不是吃饱了撑的 一个下载可能就是块把钱,可别小看 ...

  7. Unity学习制作Flappy Bird小游戏(超详细全教程,可发布到PC、Web、Android平台)

    本文中Flappy Bird基于Unity2019.4.7f1完成,源工程已部分代码改为适配安卓 flappy bird:一夜爆红的胖鸟 这是一款简单又困难的手机游戏,游戏中玩家必须控制一只胖乎乎的小 ...

  8. 用Vue制作简易音乐播放器(超详细)

    先放个效果图吧 首先先把主体结构搭好,样式调好,然后再来写播放器的功能. 根据播放器的形状,将其分为头部(搜索栏),中间(歌曲列表,碟片,热评),尾部(播放器栏),html结构如下 <div c ...

  9. wechaty搭建微信机器人——超详细版

    文章目录 前言 一.wechaty是什么? 二.准备 1.安装 Node.js(需要10.0版本以上) 2.安装Wechaty 总结 前言 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能 ...

最新文章

  1. 推荐 | Pair,医学图像标注神器
  2. 关于 继承、扩展和协议,深度好文
  3. Matplotlib实例教程(十四)误差条形图
  4. Java实现图片转PDF
  5. cmd 删除文件夹_永远不要碰的5个macOS文件夹及原因
  6. 配置环境JDK Tomcat Maven
  7. forms角色验证,以普通用户身份登陆管理页面先弹出警告信息窗口
  8. java饼状图获取数据集_HighChars3D饼图(从后台获取数据)
  9. 计算机论文外文翻译,计算机专业毕业论文外文翻译2篇
  10. 2016,云计算行业走向何方?
  11. Ubuntu桌面管理器
  12. 最简单的搭建及使用本地服务器
  13. 剪辑师的基本素养--了解四种特写类型
  14. HDU 6045 Is Derek lying? 水题
  15. 含泪向小米贱卖处理器? 联发科:断章取义
  16. Java是未来的第一编程语言吗?
  17. 从无到有:七步教你做数值(1)
  18. 为企业数据安全保驾护航
  19. 致小班:无论身处何方,一定要怀揣着一颗上进的心
  20. BACKUP DATABASE

热门文章

  1. 微信小程序地图组件 无限闪烁导致小程序崩溃
  2. 微信公众号数据2019_2019年9月原创公众号排行榜数据报告出炉
  3. IDM UEStudio 19中文版
  4. windows内核开发学习笔记十七:IRP 和 IO_STACK_LOCATION 的交互
  5. 三位整数两位小数掩码_子网掩码转换32位整数
  6. 什么是 Scrum 中的 Timeboxing? 1
  7. OPENFILER构建软iSCSI multipath实现多路径聚合(一)
  8. 两层全连接网络反向传播梯度推导(矩阵形式、sigmoid、最小均方差MSE)
  9. 论文阅读:Meta-Learning in Neural Networks: A Survey
  10. android中oncreate方法,android开发之onCreate( )方法详解