使用python实现qqbot(一)

Python实现自己的qqbot(一)

在2019年初webqq失效了以后,python自带的qqbot库也随之失效。唯一一些能用的qqbot API可能就剩下coolq等几个。但是coolq大多是用易语言等等写成。没法直接使用python模块。好在找到了大佬的qqapi接口.通过它可以完全做到使用python定制功能.

coolq原理

前往官网可以下载coolq. 注意air版是免费版,支持发送,接受群组/个人消息,但是不支持发送图片,发送红包(只有收费的pro版支持).不过air版还是支持"接受"图片的,具体见下面.

首先看看coolq原理.

coolq使用的是手机tim登陆,在登陆界面输入账户密码后会提示tim登陆.这时候你的手机qq会被强制挤下线.所以为了不影响今后使用,同时防止可能的封号风险,最好使用小号登陆.

image-20200311173033991.png

登陆后coolq可以获得你的所有消息,包括群聊或者私聊的文字,图片,文件(这些被称为富媒体).

如果你在coolq官网找到了合适插件,可以直接按照官网教程安装.

一般来说常用的插件有监控群内消息(自动禁言,踢人,受理入群消息等等).但是这只能在有合适的插件情况下做到.就个人而言,我没有能力也没有兴趣去阅读官方文档然后按照对应api开发.

image-20200311173449426.png

我们想要的是使用python开发,但是没有对应方便的python API供我们直接使用,所以必须得找到一个中转之策.

要找到策略,首先得知道自己需要什么.

我们希望能用python得到我们的qq消息,同时在程序控制下能发送消息.一接一收,就是我们的全部任务.

coolq http接口

使用的是大佬封装好的http插件.直接从github发行版本下载安装好http插件的coolq air版本.复制到本地启动exe文件就能打开了.

这个插件能在本地提供一个消息的中转服务器.通过这个http插件,coolq运行的时候提供了一个选项,允许你指定一个url进行消息上报\发送,从而通过其他web接口抓取\发送消息.这个过程的通信是通过http的,而基本上所有高级语言(当然包括python)都可以方便的处理http消息.这样就完成了我们的任务(接受/发送消息).

通俗来说,原本消息是跑在程序里面的,有点像一个黑盒子,我们啥数据也看不到,除非我们去研究黑盒子构造(官方api开发文档,非python语言).

但是现在这个插件将黑盒子里得到的数据(消息内容,发送人,发送时间等等)公开了.它宣布:你告诉我一个地址(url),我就能把所有你的qq消息转发到你的地址.如果你有能力处理我发送给你的数据,那你就可以对数据进行操作了.同时它自己也公布一个地址,只要你按照指定格式发送给我数据,我就能帮你发出去.

要开启http,在右键菜单的选项中勾选http api.在本地环境下会开启一个api的命令行.

image-20200311175555498.png
image-20200311175745344.png

在命令行我们可以看到消息的全部上报,如果看到说明启动成功了.它默认会在你配置的指定url上报消息,同时在5700端口开启监听,如果你向5700端口发送消息,它就会自动处理从而将你的消息发送出去.

coolq配置

实现了之后就需要配置coolq来为我们服务.

配置文件一般可以在coolq更目录\data\app\io.github.richardchien.coolqhttpapi\config下与你对应的qq号命名的json文件中找到.

使用notepad打开json文件,我们可以选择配置参数.具体参数参阅官方配置.

image-20200311181257993.png

对我来说,关心的是"post_url"选项,修改为我想要的post位置(后续使用python利用).port可以指定监听端口,我们使用默认5700就可.ws_port配置的是websocket服务器,暂时不需要用到.

python工具

了解了coolq的工作原理,接下来是寻找python的对应http处理.

消息的发送

消息的发送可以通过requests库实现,按照官方api手册post相应参数到之前配置的监听端口(5700)就可以实现消息的发送.

消息的接受

消息的接收要复杂一些.

我在上面指定了一个监听端口,其中127.0.0.1表示的是本地服务器,这也就意味着我们必须安装一个服务器才行.在测试环境搭建在本地,但是最后使用的时候还是得部署到服务器才行.

选用的是python的django模块(版本2.2).我们在本地/服务器上部署一个django服务器,指定coolq插件对我们设计好的接口上报,然后通过服务器处理请求,然后使用requests库向coolq监听端口发送消息,从而实现消息接受/处理.

貌似coolq已经有python接口,但是是flask部署的,具体可以在github上查找.

由于个人习惯,我比较喜欢使用django开发,所以后面的说明是依照django开发的.但是flask与django本身有异曲同工之妙,关键的设计思想原理是一样的.所以具体选择就见仁见智了.

为了简单,我们先不部署服务器,而是使用简单的requests库与服务器的定时任务实现一个定时早晚安的机器人(没有对话功能).这将在我的第二篇文章中提到.

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Python语言特性 1 Python的函数参数传递 看两个如下例子,分析运行结果: 代码一: a = 1 def...
    伊森H阅读 3,246评论 0赞 15
  • 今晚过的时间有点漫长,我花了两个半小时,很耐心地听完了一整场“企业式简历制作”讲座。战线太长,把我听饿了。[骷髅]...
    Chosing_春幸阅读 528评论 0赞 0
  • 静观云变,有收亦有散。 细雨易卸花妆容,劲风草叶残,换季似焕颜。 岁月迁,难改日行日圆圆。 微细常常观,倒悬也岿然...
    wysw阅读 505评论 8赞 16
  • 轻倚着岁月的闲窗,任温婉的情愫尽锁时光,微风摇曳垂帘,暖抚绿茵微澜,浮云从寂寞的窗前略过。褶皱成眉间灼灼的期盼。孤...
    古城苍狼阅读 903评论 4赞 19
  • 今天重温怦然心动,电影以朱莉.贝克、布莱斯两人的视角接连展开,对于同一件事,俩人视角让我将整个事情看的更加明白,这...
    双九垚阅读 487评论 0赞 0

友情链接更多精彩内容