如何用Python开发QQ机器人

作者: 佚名 2021-05-07 13:20:39

 前言

  •  虽然该文最终是达到以python开发mirai机器人的目的,但起步教程,尤其是环境配置上仍然有大量的相同操作,对其他编程语言仍有借鉴之处
  •  假设你已经安装好了 Java、Python等运行必须的环境

mirai生态

  • mirai官方生态文档[1]
  •  要使用mirai开发QQ机器人,首先要对其生态有一定的了解,因为它太复杂了,坑特别多,所以多了解一点,遇到问题之后解决起来也会更快
  •  mirai生态汇总图

  •  简单来说,mirai生态的核心是Mirai框架,其中包含了mirai-core及mirai-core-api两部分。
  •  其中,前者负责协议相关的内容,而后者负责对外提供操作前者的接口。因此与程序员直接打交道的是mirai-core-api,而mirai-core,对我们是不可见的。
  •  使用mirai-core-api就已经可以开发QQ机器人了,但对萌新来说难度还是太大,于是mirai官方开发组编写了一个QQ机器人程序,mirai-console,它在 mirai 框架提供的基础功能的基础上进行了封装并进一步提供了更方便的开放接口。
  •  有了mirai-console,我们就不用直接去开发mirai的QQ机器人了,而是去开发mirai-console的插件,如下面的模式: 

  •  尴尬的是,开发mirai-console的插件,又需要使用java或者kotlin。如果你跟我一样,对他们都不熟悉,那么官方的另一个插件mirai-api-http,则可以解决这个问题。
  •  于是借助mirai-api-http开发QQ机器人,就成了下面这种模式:  

  •  可以看到,当我们使用了mirai-api-http后,我们就有了更多的开发语言选择。此处我选择python。

起步

使用 mirai-console-loader 启动 mirai-console

  •  根据上面的介绍,要开发一个mirai的QQ机器人,我们首先需要将mirai-console给运行起来,而要做到这一步,可难。例如你需要准备mirai-core,mirai-console 和 mirai-console-terminal,然后还需要通过一大串指令来启动它。
  •  而官方显然考虑到这一点,为了挽回被这一高难度操作劝退的萌新,官方又推出了mirai-console-loader(简称mcl) —— mirai-console 的官方一键启动器。因此你仅需要下载它即可(第一步说的都不用管0.0)。github仓库位置:mirai-console-loader[2]
  • 下载完成mcl之后,解压、打开cmd、切换到mcl所在目录、运行mcl。如下图:    

  •  不出意外的话,mirai-console就成功启动了,如下图:    

  •  然而,咱从官方下载的项目,运行时却出错了0.0 ( 如果你没有出错,忽略此步骤 )。原因是配置文件出错 (太倒霉了 - -)。修改方式如图:    

  •  然后再重新运行一下,mcl,不出意料的话,能成功运行。
  •  第一个大坎就迈过了…接下来是另一个大坎

使用 mirai-login-solver-selenium 处理滑块验证辅助登录

  •  在成功启动的mcl窗口,运行命令登录qq:login 账号 密码
  •  应该是会出错的,因为mirai-console在登录时,不能处理滑块验证:

  •  于是我们需要mirai的另一个项目 mirai-login-solver-selenium[3] 来辅助登录
  •  mirai-login-solver-selenium安装步骤 (需要先安装 Chrome 浏览器)
  •  先结束掉之前运行的 mirai-console, 然后在命令行运行如下命令,添加该包 
  1. mcl --update-package net.mamoe:mirai-login-solver-selenium --channel nightly --type plugin 
  • 然后再重新运行mcl,这样mcl就会去尝试下载mirai-login-solver-selenium。
  •  然而,我这一步也出现问题了(如果你没有问题,也请跳过)。因为它用到了selenium,所以就要用chromedriver。但是chromedriver总是下载失败,所以这一步需要手动下载chromedriver,然后替换到对应目录。步骤如下:

         1.  查看cmd窗口,找到mcl正在下载的chromedriver是什么版本       

         2.  然后去chromedriver的另一个镜像源下载,推荐:chromedriver[4]

         3.  找到一个版本号相近的即可,例如我就下载 86.0.4240.22   

         4.   将下载好的文件解压,再重命名成chromedriver-86.0.4240.198.exe,也就是刚刚我们在命令行窗口查看的文件名,一定要跟它想下载的文件名一致

         5.  结束之前运行的mcl命令行程序,然后将准备好的chromedriver-86.0.4240.198.exe, 替换到以下目录

       

         6.  重新运行mcl程序,如果一切顺利,就可以继续之前的步骤,输入命令:login 账号 密码 尝试登录。接下来会弹出一个浏览器窗口,你只需要傻瓜式的完成登录验证即可。如果登录成功,以后的每次登录,应该都是不需要再次验证的。

  •  又跨过一个坎…接下来就到了另外一个坎

使用 mirai-api-http 增加语言拓展性 (为了能用其他语言来开发)

  •  前面一直在说 mirai-api-http,但是到目前为止,我们都还没有用上它。前面的工作就做了两个事情

          1.  使用mcl运行mirai-console

          2.  使用 mirai-login-solver-selenium 辅助通过滑块验证码,完成登录

  •  那么接下来就开始用mirai-api-http,首先在mirai-api-http项目地址,下载mirai-api-http[5]
  •  然后将下载到的jar包,放在plugin文件夹下,如图    

  • 然后再重启mcl,重新进行登录。这样准备工作就完成了,但是我出现了一些错误,看意思应该是签名验证的问题,错误如下:    

  •  四处咨询后了解到,是oracle JDK的问题,因此只需要将orcaleJDK 替换成为 open JDK即可,步骤如下:

      1.  下载 open JDK[6],例如我下载如图所示的版本:

      2.  解压open JDK, 并放在你认为合适的位置,例如我放在如下图所示的位置: 

      3.  添加 jdk 所在路径到环境变量:此电脑 ->右键属性 -> 高级系统设置 -> 高级 -> 环境变量, 再按下图操作 

通过 graia-application-mirai 使用 python 开发 mirai 机器人

  •  前面的操作,直到该步为止,基本对所有使用除java/kotlin语言的程序员,都是通用的。而后面的操作,仅写给使用python的程序员
  •  graia-application-mirai官方文档[7]
  •  首先对mirai-api-http进行配置,如图:

  •  以下是参考,自己看着配就行 
  1. # file: mcl-1.0.3/config/net.mamoe.mirai.api.http/setting.yml  
  2. authKey: graia-mirai-api-http-authkey # 你可以自己设定, 这里作为示范  
  3. # 可选,缓存大小,默认4096.缓存过小会导致引用回复与撤回消息失败  
  4. cacheSize: 4096  
  5. enableWebsocket: true # 是否启用 websocket 方式, 若使用 websocket 方式交互会得到更好的性能  
  6. host: '0.0.0.0' # httpapi 服务监听的地址, 错误的设置会造成 Graia Application 无法与其交互  
  7. port: 8080 # httpapi 服务监听的端口, 错误的设置会造成 Graia Application 无法与其交互 
  •  重启mcl, 更新配置
  •  接着,安装 python 操作 mirai-api-http 接口的模块:graia-application-mirai

pip install graia-application-mirai

  •  将以下代码复制到bot.py,按注释提示,再结合刚刚对mirai-api-http的配置,稍作修改。然后运行 
  1. from graia.broadcast import Broadcast  
  2. from graia.application import GraiaMiraiApplication, Session  
  3. from graia.application.message.chain import MessageChain  
  4. import asyncio  
  5. from graia.application.message.elements.internal import Plain  
  6. from graia.application.friend import Friend  
  7. loop = asyncio.get_event_loop()  
  8. bcc = Broadcast(looploop=loop)  
  9. app = GraiaMiraiApplication 
  10.     broadcast=bcc 
  11.     connect_info=Session 
  12.         host="https://localhost:8080", # 填入 httpapi 服务运行的地址  
  13.         authKey="graia-mirai-api-http-authkey", # 填入 authKey 
  14.         account=5234120587, # 你的机器人的 qq 号  
  15.         websocket=True # Graia 已经可以根据所配置的消息接收的方式来保证消息接收部分的正常运作.  
  16.     )  
  17.  
  18. @bcc.receiver("FriendMessage")  
  19. async def friend_message_listener(app: GraiaMiraiApplication, friend: Friend):  
  20.     await app.sendFriendMessage(friend, MessageChain.create([  
  21.         Plain("Hello, World!")  
  22.     ]))   
  23. app.launch_blocking() 
  •  然后向你的QQ机器人,随便发送一条消息,如果它回复你Hello, World!,则表示运行成功
  •  成功所示如下:    

结语

上面的全部操作,不过是使用mirai进行开发QQ机器人的起步教程而已,需要了解更多,还是去阅读官方文档,以学习更多的api。

Python 机器人 编程语言
上一篇:企业的人工智能计划获得成功需要做的10件事 下一篇:自动驾驶出租车竞争激烈,国内百度占得先机!
评论
取消
暂无评论,快去成为第一个评论的人吧

更多资讯推荐

自然语言处理(NLP)的历史及其发展方向

自然语言处理的历史是一个充满曲折的故事。它从徒劳的研究开始,经过多年卓有成效的工作,最后结束于一个我们仍在试图找出该领域极限的时代。今天,让我们来一起探索这一AI科学分支的发展。

佚名 ·  2021-06-01 12:46:26
机器人技术和物联网如何影响供应链

供应链长期以来一直是数字化和技术创新的丰富领域。现在,先进机器人技术和物联网的结合正在推动新一轮创新热潮。

iothome ·  2021-05-31 18:16:42
日本将向月球发送变形机器人球:整颗球重250g

5月31日消息,据外媒报道称,日本将发送一颗长相特别的球型机器人到月球去。据悉,这个球型机器人由日本宇宙航空研究开发机构 (JAXA) 与索尼、同志社大学和玩具制造商 Tomy 合作开发,未来,其在抵达月球表面后,会“展开”成药丸型完整装置,捕捉月球表面的图像并且以研究月球土壤为主要目标。

环球网 ·  2021-05-31 15:15:09
市场规模将突破22亿?教育机器人发展迅速

除了科普类教育机器人,近年来用于家庭教育、辅助教学的各型教育机器人层出不穷,越来越频繁地出现了人们的日常生活当中。由于教育机器人的发展势如破竹,受到了业内及资本力量广泛关注。

智能制造网 ·  2021-05-28 17:31:50
协作机器人技术如何成为工业4.0战略的核心

如今的机器人虽然可能非常有效地执行一项任务,但却是静态的,并且成本高昂。行业专家指出,机器人必须降低成本,并且在移动性和可重新编程性方面必须变得更加敏捷。

HERO ·  2021-05-28 10:12:43
如何理解流程自动化领域?

如今的流程自动化有多种形式。而不断发展的工具生态系统可以使从简单的重复性任务到复杂的自定义工作流都实现自动化。

李睿 ·  2021-05-27 08:00:00
AI聊天机器人,你想来一个吗?

在这个快节奏的世界里,每个人都希望自己的问题得到马上回答。每个企业都试图解决其客户的问题,以维护品牌声誉,不损害客户忠诚度。但是,从人性化的角度来说,全天候给用户提供即时回复几乎是不可能的。

AI时代前沿 ·  2021-05-24 15:29:24
这是波士顿动力一位机器人工程师的一天

在波士顿动力,Barry 表示自己有机会研究一些超酷的机器人,如人形机器人 Atlas、仓储机器人 Handle 和 Stretch。

机器之心 ·  2021-05-24 10:39:36
Copyright©2005-2021 51CTO.COM 版权所有 未经许可 请勿转载