搜索
    Hi~登录注册
    查看: 418|回复: 6
    收起左侧

    使用python打造一个自己的QQ机器人

    [复制链接]

    69

    主题

    2

    精华

    31 小时

    在线时间

    注册会员

    Rank: 2

    积分
    119
    发表于 2019-11-7 20:58:24 | 显示全部楼层 |阅读模式

    webQQ在今年1月已经停止服务了。想用python写一个QQ机器人,但是python的QQbot库因为webQQ停止服务,挂得不能再彻底了。后来google了好几天,终于在github找到了一个神奇的插件=coolq-http-api

    这个插件的神奇之处在于,它运行一个server,把qq信息转成http形式。发送,接收信息的时候,只需要使用http请求,即可和server进行交互,非常方便,也非常使用python(requests库无敌)。当然,插件运行基于酷Q,需要用酷Q加载插件才能正常使用。

    要实现用python发送/接收消息,要用requests发送http请求之外,还要用flask在本地搭建一个flask服务端,告知插件flask服务器的地址和端口,这样所有的qq消息都会自动传递给flask,我们可以根据消息的来源,内容,自动判断是否要回复(用requests向酷Q进行http请求)即可。原理图如下:

    一、 准备工作

    1. 酷Q下载安装: https://cqp.cc/t/23253 下载任意版本,右键解压即可使用。
    2. 插件下载安装: https://github.com/richardchien/coolq-http-api/releases 下载cpk文件,放到酷Q的app文件夹中
    3. python下载安装:这个就不说了,说太多次了,去官网下载安装包,一键安装就行了,注意要使用python3版本。
    4. python IDE下载安装:推荐使用pycharm,具体安装过程略。也是一键安装。

    搞定后你的酷Q app文件夹下应该是这样的:

    • 启动酷Q主目录下的CQA.exe,打开酷Q登录你要做机器人的QQ号,建议使用小号,防止被封。
    • 由于酷Q使用的是手机TIM协议,成功上线后, 你可以看到小号为TIM在线。

    • 右键酷Q的小图标,进入应用管理,找到HTTP API直接启用。

    成功启用后,会弹出一个控制台窗口,提示正在监听5700端口。

    二、 配置酷Q httpApi插件

    插件的配置文档: http://richardchien.gitee.io/coolq-http-api/docs/
    配置文件在酷Q Air\data\app\io.github.richardchien.coolqhttpapi\config 文件夹下,是一个以QQ名称命名的json文件。
    以下几项配置比较关键:

    • port : 酷Q server监听的端口,可自定义。
    • use_http:务必是true,除非你使用websocket。
    • post_url:flask服务端接收消息的接口,可自定义。
    • post_message_format:酷Q向flask发送消息的格式,建议改成array。

    其他的配置项可见文档: [https://richardchien.gitee.io/co ... D%E7%BD%AE%E9%A1%B9](https://richardchien.gitee.io/co ... D%E7%BD%AE%E9%A1%B9)
    附上自己的简单配置:

    三、用python发送自己的第一条QQ消息

    先悄悄用pip安装一个requests库….
    插件的api文档: https://richardchien.gitee.io/coolq-http-api/docs/4.12/#/API
    我们看下发送私聊消息的接口:

    用requests构造一个http post请求,post的数据填入相关信息:

    import requests
    
    data = {
        'user_id':723690032,
        'message':'我是一个可爱的小机器人喵~',
        'auto_escape':False
    }
    
    api_url = 'http://127.0.0.1:5700/send_private_msg'
    #酷Q运行在本地,端口为5700,所以server地址是127.0.0.1:5700
    
    r = requests.post(api_url,data=data)
    print(r.text)

    ![](https://www.xiaoweigod.com/wp-co ... 019/11/image-12.png)

    四、接收第一条QQ消息

    同样先悄咪咪安装一个flask….

    from flask import Flask,request
    from json import loads
    
    bot_server = Flask(__name__)
    
    @bot_server.route('/api/message',methods=['POST'])
    #路径是你在酷Q配置文件里自定义的
    def server():
        data = request.get_data().decode('utf-8')
        data = loads(data)
        print(data)
        return ''
    
    if __name__ == '__main__':
        bot_server.run(port=5701)
        #端口也是你在酷Q配置文件里自定义的

    运行一下这个flask程序,然后用自己的QQ给你的机器人随便发条信息:

    ![](https://www.xiaoweigod.com/wp-co ... 019/11/image-13.png)

    {'font': 65320440, 'message': [{'data': {'text': '你才不是可爱的小机器人呢'}, 'type': 'text'}], 'message_id': 8, 'message_type': 'private', 'post_type': 'message', 'raw_message': '你才不是可爱的小机器人呢', 'self_id': 766202408, 'sender': {'age': 0, 'nickname': 'Misery_', 'sex': 'unknown', 'user_id': 723690032}, 'sub_type': 'friend', 'time': 1573044578, 'user_id': 723690032}

    控制台打印的内容是一个python的字典格式,我们可以优化一下,取出需要的信息,如QQ号,昵称,消息内容:

    QQ = data.get('user_id')
    nickname = data['sender'].get('nickname')
    message = data['message'][0]['data'].get('text')
    print('**来自QQ:{},昵称**:{} 的信息**:\n{}'**.format(QQ,nickname,message))

    ![](https://www.xiaoweigod.com/wp-co ... 019/11/image-14.png)

    五、后记

    到这里,你就写出了一个hello world QQ机器人,想实现更多的功能,需要多去研究研究API,多研究研究python。这个插件功能相当强大,几乎涵盖了所有的QQ功能。博主曾经写过一个,可以对接某面板,涵盖登录,查询,支付等多种功能,并带有群管模块,接入阿里云tts语音系统,实现语音聊天。真的非常强大,有兴趣的同学可以好好研究一下。

    回复

    使用道具 举报

    9

    主题

    0

    精华

    85 小时

    在线时间

    荣誉会员

    Rank: 8Rank: 8

    积分
    111
    发表于 2019-11-8 11:07:55 | 显示全部楼层
    win 10系统吗
    回复 支持 反对

    使用道具 举报

    19

    主题

    0

    精华

    170 小时

    在线时间

    注册会员

    Rank: 2

    积分
    55
    发表于 2019-11-8 21:08:24 | 显示全部楼层
    回头研究研究~~~~~~~
    回复 支持 反对

    使用道具 举报

    69

    主题

    2

    精华

    31 小时

    在线时间

    注册会员

    Rank: 2

    积分
    119
     楼主| 发表于 2019-11-13 21:03:52 | 显示全部楼层

    和系统没啥关系的
    回复 支持 反对

    使用道具 举报

    69

    主题

    2

    精华

    31 小时

    在线时间

    注册会员

    Rank: 2

    积分
    119
     楼主| 发表于 2019-11-13 21:04:09 | 显示全部楼层
    Kevin 发表于 2019-11-8 09:08 PM
    回头研究研究~~~~~~~

    可以折腾一下
    回复 支持 反对

    使用道具 举报

    9

    主题

    0

    精华

    85 小时

    在线时间

    荣誉会员

    Rank: 8Rank: 8

    积分
    111
    发表于 2019-11-15 13:51:10 | 显示全部楼层

    好的~okokokoko
    回复 支持 反对

    使用道具 举报

    0

    主题

    0

    精华

    2 小时

    在线时间

    新手上路

    Rank: 1

    积分
    1
    发表于 2019-12-5 13:44:58 | 显示全部楼层
    好的~okokokoko
    回复 支持 反对

    使用道具 举报

    游客
    回复
    您需要登录后才可以回帖 登录 | 获取账号

    快速回复 返回顶部 返回列表