Python基于Mirai开发的QQ机器人保姆式教程(亲测可用)

news/2024/11/17 19:44:02/

在本教程中,我们将使用Python和Mirai来开发一个QQ机器人,本文提供了三个教学视频,包教包会,本文也很贴心贴了代码和相关文件。话不多说,直接开始教学。


目录

一、安装配置MIrai

图片验证码报错:

二、机器人的认证与绑定

视频教学

代码

认证和绑定

主程序

三、好友信息监听

视频教学

四、发送好友消息

调用库

程序

五、总结

六、补充

http.client和requests库异同


一、安装配置MIrai

安装配置MIrai

在本视频中几个下载地址如下:

https://github.com/mamoe/mirai
https://github.com/project-mirai/mirai-api-http
https://github.com/MrXiaoM/qsign

大家打不开的话,可以用我的百度地址,里面有三个文件。

链接:https://pan.baidu.com/s/1Wi4AcMIwl373Xe8sbbFnJg?pwd=1111 
提取码:1111

图片验证码报错:

大家可以看Mirai文档,有的登录出现了要验证,可以看这个链接,详细介绍了怎么填写图片验证码返回值。

本人解决方法:

  • 控制台会返回一个滑块地址,我们用浏览器打开。
  • 打开开发者工具,移动滑块,完成验证。
  • 在 Network 中找到名为 cap_union_new_verify 的请求, 在ticket 后那一坨就是要输入回 mirai 的内容
  • 回到控制台粘贴就可以了。

注意

  • 复制的时候记得删掉引号(", 前后都有一个), 那个不是ticket内容
  • 速度要快
  • 注意不要漏字符(没复制完, 后面还有很长)
    • 可以先开一次试一下手(不输入ticket) 然后重启进行滑块

二、机器人的认证与绑定

到这里,大家登录成功就成功了99%,为什么这么说呢,后面就是写代码了。

视频教学

机器人的认证与绑定

代码

为了方便大家学习,我把视频中的代码也放在了下面,如下:

class bot:def __init__(self,host="localhost",port = 8080,verifyKey="ccbot"):""":param host: 监听地址:param port: 监听端口:param verifyKey: key"""self.VisitHttpPath=http.client.HTTPConnection(host,port)self.verifyKey=verifyKeyself.sessionKey = self.bind()

认证和绑定

下面是http.client方法:

def bind(self):auto = json.dumps({"verifyKey":self.verifyKey})VisitHttpPath = self.VisitHttpPathVisitHttpPath.request("POST","/verify",auto)response = VisitHttpPath.getresponse()session = response.read().decode("utf-8")print("认证成功:"+str(session))sessionKey = json.loads(session)['session']bind = json.dumps({"sessionKey":sessionKey,"qq":2368214676})VisitHttpPath.request("POST",'/bind',bind)response = VisitHttpPath.getresponse().read().decode("utf-8")print("绑定成功:" + str(response))return sessionKey

 大家可以用http.client或者request方法(文末介绍异同)。下面介绍requests方法。

url = "http://localhost:8080/verify"
data = {"verifyKey":"ccbot"}
res = requests.post(url,json=data)
print(res.text)sessionKey = json.loads(res.text)['session']
url = "http://localhost:8080/bind"
bind = {"sessionKey":sessionKey,"qq":填你机器人QQ号}
res = requests.post(url,json=bind)
print(res.text)

主程序


if __name__ == '__main__':b = bot()

三、好友信息监听

你完成第二步,就成功了,后面就是收发信息了,大家可以对照文档自行研究。Mirai | mirai (mamoe.net)

视频教学

好友消息监听

这个大家可以跟着我视频一起敲代码。

四、发送好友消息

大家可以直接运行下面的代码,看自己的QQ有没有收到消息。

调用库

import requests
import json

程序


url = "http://localhost:8080/verify"
data = {"verifyKey":"ccbot"}
res = requests.post(url,json=data)
print(res.text)sessionKey = json.loads(res.text)['session']
url = "http://localhost:8080/bind"
bind = {"sessionKey":sessionKey,"qq":填你机器人QQ号}
res = requests.post(url,json=bind)
print(res.text)url = "http://localhost:8080/sendFriendMessage"send_message = {"sessionKey":sessionKey,"target":填你要接受消息的QQ号(须是好友),"messageChain":[{ "type":"Plain", "text":"你好" },]}
print(send_message)
res = requests.post(url,json=send_message)
print(res.text)

五、总结

看到这里,相信你们都成功,喜欢的话,给文章点点赞,有疑问的话,可以加群讨论或者评论区留言。

看看效果图吧:

六、补充知识点

到这里,大家的功能基本上都实现了,这里就和搭建QQ机器人就没有多大关系了,可以跳过。

http.client和requests库异同

http.client和requests库都可以用于发送HTTP请求,但它们有一些不同之处。

  1. 导入方式:

    • http.client模块是通过导入http.client来使用的。
    • requests库是通过导入requests来使用的。
  2. 发送请求的方式:

    • http.client模块提供了低级别的HTTP通信功能,可以创建不同类型的连接(如HTTP、HTTPS等),并使用request()方法发送请求。
    • requests库提供了更高级别的HTTP请求功能,可以更方便地发送不同类型的请求(如GET、POST等),而无需关注底层的通信细节。
  3. 响应处理方式:

    • http.client模块通过getresponse()方法获取响应,然后可以使用响应对象的方法和属性来获取响应的内容。
    • requests库返回一个Response对象,可以使用该对象的属性和方法来获取响应的内容。
  4. 异步支持:

    • http.client模块提供了异步支持,但使用起来相对复杂。
    • requests库本身不支持异步请求,但可以通过异步库(如asyncio)结合使用。
  5. 其他功能:

    • http.client模块提供了更多的低级别控制,例如设置头部、处理重定向等。
    • requests库提供了更简单和易用的API,例如处理Cookie、Session等。

总之,选择使用哪种方法取决于你的需求和偏好。如果你需要更多的控制和灵活性,可以选择使用http.client模块。如果你更关注易用性和简洁性,可以选择使用requests库。


http://www.ppmy.cn/news/1094300.html

相关文章

CSS:屏幕正中间有个元素A,元素A中有文字A,随着屏幕宽度的增加

始终需要满足以下条件: A元素垂直居中于屏幕***;A元素距离屏幕左右边距各10px;A元素里面的文字”A”的font-size:20px;水平垂直居中;A元素的高度始终是A元素宽度的50%; (如果搞不定可以实现为A元素的高度固定为200px;)请用 html及…

浅谈数据治理中的智能数据目录

在数字化转型的战略实施中,很多企业都在搭建自己的业务、数据及人工智能的中台。在同这些企业合作和交流中,越来越体会到数据目录是中台建设的核心和基础。为了更好地提供数据服务,发挥数据价值,用户需要先理解数据和信任数据。 企…

【数据结构】 七大排序详解(壹)——直接插入排序、希尔排序、选择排序、堆排序

文章目录 🍀排序的概念及引用🐱‍👤排序的概念🐱‍👓排序运用🐱‍🐉常见的排序算法 🌴插入排序🎋基本思想:🛫直接插入排序📌算法步骤&…

【C刷题训练营】第三讲(c语言入门训练)

前言: 大家好,我决定日后逐渐更新c刷题训练营的内容,或许能帮到入门c语言的初学者,如果文章有错误,非常欢迎你的指正! 💥🎈个人主页:​​​​​​Dream_Chaser~ 🎈&…

CyclicBarrier和CountDownLatch

CyclicBarrier: 用于协调多个线程同步执行的操作场合,所有线程等待完成,然后一起执行 使用方式: CyclicBarrier barrier = new CyclicBarrier(3); 定义初始数量,线程数必须达到才能执行 代码示例: public static void main(String[] args) {CyclicBarrier barrier = new…

使用Spring来管理对象关系映射(ORM)

简介 对象关系映射(Object-Relational Mapping,简称ORM)是一种技术,用于在面向对象程序和关系型数据库之间进行数据的映射。Spring框架提供了强大的支持来简化和优化ORM开发过程。本文将介绍如何使用Spring来管理对象关系映射。 …

Redis监控工具_RedisLive

Redis监控工具_RedisLive Redis安装请看: MacBook安装Redis redis集群搭建_亲自操作 RedisLive安装 RedisLive是由python编写的并且开源的图形化监控工具,非常轻量级,核心服务部分只包含一个web服务和一个基于redis自带的info命令以及monitor命令的…

linux文件管理命令

文章目录 先说有用的知识点tree pwd mkdir touch history clear 命令treewhichpwdmkdirtouchhistoryclear 文件类型文件管理命令cdechomv 移动文件cp 复制文件rm 删除文件cat 查看命令head 查看文件的前n行 默认为10tail尾部grep过滤关键字less --分页显示more --分页显示文件内…