Python开发QQ聊天机器人——Yes酱的部署与调教

Yes酱是一个会发s图的群管理机器人,基于 go-cqhttp,使用OneBot标准的插件开发的一个机器人,支持以下功能:

  • 发送setu/猫猫图返回一张涩图/猫猫图
  • 检测关键字禁言
  • 私聊调教对话

本文主要参考了其官方博客,结合Yes酱的githubgo-cqhttp的github的官方教程

最终实现的效果如下:


群聊

环境

  • 系统:Windows 10 or Ubuntu 18.04
  • 编辑器:Sublime Text 3(记事本也可)
  • 浏览器:这里用的Chrome
  • 框架:go-cqhttp
  • Yes酱:Go-CQHTTP-YesBot

准备工作

注:由于该程序依赖的框架go-cqhttp有多处更新,因此在原版基础上进行了改良,详见Python开发QQ聊天机器人——进阶的yes酱部署与调教一文,本文仅留作纪念,不再维护

QQ号注册

一个手机号能够绑定十个QQ号,所以直接在官方网站注册QQ即可,注册完之后记得马上登陆并记下QQ号,最好保持活跃,否则会被收回

程序下载

github下载go-cqhttp,windows 64位选择go-cqhttp_windows_amd64.exe,linux选择go-cqhttp_0.9.40-fix5_linux_amd64.deb

下载go-cqhttp

github下载Yes酱源码,可以使用Git下载,也可以直接网页下载解压即可:

下载Yes酱源码

程序配置

go-cqhttp配置

Windows的话直接双击运行下载好的EXE程序,会出现如图所示界面:


双击运行EXE

然后会自动在同级目录下生成一个config.hjson的文件:

生成配置文件

Linux的话直接sudo dpkg -i go-cqhttp_0.9.40-fix5_linux_amd64.deb安装框架,然后在任意处使用命令go-cqhttp启动程序,即会在当前目录下生成config文件

编辑该文件,编辑内容如下:


/*
    go-cqhttp 默认配置文件
*/

{
    // QQ号
    uin: 123456789
    // QQ密码
    password: "XXXXX"
    // 是否启用密码加密
    encrypt_password: false
    // 加密后的密码, 如未启用密码加密将为空, 请勿随意修改.
    password_encrypted: ""
    // 是否启用内置数据库
    // 启用将会增加10-20MB的内存占用和一定的磁盘空间
    // 关闭将无法使用 撤回 回复 get_msg 等上下文相关功能
    enable_db: true
    // 访问密钥, 强烈推荐在公网的服务器设置
    access_token: ""
    // 重连设置
    relogin: {
        // 是否启用自动重连
        // 如不启用掉线后将不会自动重连
        enabled: true
        // 重连延迟, 单位秒
        relogin_delay: 3
        // 最大重连次数, 0为无限制
        max_relogin_times: 0
    }
    // API限速设置
    // 该设置为全局生效
    // 原 cqhttp 虽然启用了 rate_limit 后缀, 但是基本没插件适配
    // 目前该限速设置为令牌桶算法, 请参考: 
    // https://baike.baidu.com/item/%E4%BB%A4%E7%89%8C%E6%A1%B6%E7%AE%97%E6%B3%95/6597000?fr=aladdin
    _rate_limit: {
        // 是否启用限速
        enabled: false
        // 令牌回复频率, 单位秒
        frequency: 1
        // 令牌桶大小
        bucket_size: 1
    }
    // 是否忽略无效的CQ码
    // 如果为假将原样发送
    ignore_invalid_cqcode: false
    // 是否强制分片发送消息
    // 分片发送将会带来更快的速度
    // 但是兼容性会有些问题
    force_fragmented: false
    // 心跳频率, 单位秒
    // -1 为关闭心跳
    heartbeat_interval: 0
    // HTTP设置
    http_config: {
        // 是否启用正向HTTP服务器
        enabled: true
        // 服务端监听地址
        host: 0.0.0.0
        // 服务端监听端口
        port: 5700
        // 反向HTTP超时时间, 单位秒
        // 最小值为5,小于5将会忽略本项设置
        timeout: 0
        // 反向HTTP POST地址列表
        // 格式: 
        // {
        //    地址: secret
        // }
        post_urls: {
            "127.0.0.1:5701": secret
        }
    }
    // 正向WS设置
    ws_config: {
        // 是否启用正向WS服务器
        enabled: true
        // 正向WS服务器监听地址
        host: 0.0.0.0
        // 正向WS服务器监听端口
        port: 6700
    }
    // 反向WS设置
    ws_reverse_servers: [
        // 可以添加多个反向WS推送
        {
            // 是否启用该推送
            enabled: false
            // 反向WS Universal 地址
            // 注意 设置了此项地址后下面两项将会被忽略
            // 留空请使用 ""
            reverse_url: ws://127.0.0.1:5701
            // 反向WS API 地址
            reverse_api_url: ws://127.0.0.1:5701
            // 反向WS Event 地址
            reverse_event_url: ws://127.0.0.1:5701
            // 重连间隔 单位毫秒
            reverse_reconnect_interval: 3000
        }
    ]
    // 上报数据类型
    // 可选: string array
    post_message_format: string
    // 是否使用服务器下发的新地址进行重连
    // 注意, 此设置可能导致在海外服务器上连接情况更差
    use_sso_address: false
    // 是否启用 DEBUG
    debug: false
    // 日志等级 trace,debug,info,warn,error
    log_level: ""
    // WebUi 设置
    web_ui: {
        // 是否启用 WebUi
        enabled: true
        // 监听地址
        host: 127.0.0.1
        // 监听端口
        web_ui_port: 9999
        // 是否接收来自web的输入
        web_input: false
    }
}

主要改动的有这么几处:

  • 开头的QQ号和密码
  • http设置里的post_urls
  • 反向ws设置中的三个url

linux版本配置

还没试过,配了再写

Yes酱配置

打开yes酱所在的文件夹,找到config.json文件,配置如下:

{
    "path":"E:\\test\\QQbot\\Go-CQHTTP-YesBot-master\\pic\\mao\\",
    "ban_words":["科学上网","黑产","翻墙","huangse"],
    "apikey":"",
    "group":[987654321],
    "self_qq":"123456789"
}

其中:

  • path为项目文件夹下的pic文件夹下的mao文件夹地址,注意使用双反斜杠,末尾也有一个双反斜杠

  • ban_words为想要yes酱禁言的关键词

  • apikey为yes酱调用的setuAPI,可以去申请一个,也可以不填,申请方式如图所示:

    apikey申请

  • group为想要yes酱管理的群号,可以填写多个,用英文逗号分隔即可

  • self_qq为之前注册申请想要用来当机器人的QQ号

找到send_message文件夹下的word_detect.py文件,修改其第106行代码为:

local_img_url = "[CQ:image,file=file:///"+path+choice(setu_list)+"]"

程序运行

go-cqhttp运行

windows的话直接右键,以管理员权限运行即可:


运行go-cqhttp

Linux的话,使用命令nohup go-cqhttp &后台运行:

linux运行

初次运行会自动创建设备:


创建设备

然后需要验证新设备以登录:


验证新设备登录

这里输入1按下回车:

回车之后

鼠标选中-><-之间的网址,按下ctri+shift+C复制链接,然后打开浏览器,在地址栏粘贴链接进入验证页面,在页面空白处右键单击检查

验证页面

选择network等候抓包:

选择network

然后手动拖动滑块,完成验证,查看右边抓到的包:


验证的包

其中的ticket即为需要在命令行输入的字符串。双击该字符串选中复制,随便找个地方粘贴出来看看再复制一遍,然后在命令行窗口单击鼠标右键即可粘贴进去,然后回车,即可看到登陆成功:

登陆成功

yes酱启动

windows的话在yes酱根目录下启动cmd命令行窗口,输入命令启动:

python main.py

linux的话使用命令nohup python main.py &启动,可后台运行

yes酱启动:


yes酱启动

程序效果

在群聊里艾特yes酱即可:


群聊

在群里艾特yes酱发送help即可获得菜单:


help菜单

添加yes酱为好友之后,即可私聊开始调教(这里diy了一下yes酱回答的话语,原句是添加成功!):

私聊

bug解决

注:由于该程序依赖的框架go-cqhttp有多处更新,因此在原版基础上进行了改良,详见Python开发QQ聊天机器人——进阶的yes酱部署与调教一文,本文仅留作纪念,不再维护

因为是第一次接触QQ机器人的开发,其中遇到了不少bug,这里记录下:

P1. 两边程序都没报错,yes酱也显示start,但是在群里艾特她却没有回复
S1. 首先看看是不是自己的网络问题,网速如果太慢的话会需要等一会。这里我自己是因为go-cqhttp的config配置不对,忘了配置反向ws配置选项中的url为本地地址的5701端口,配置好了之后就解决了问题

P2. 猫猫图发送报错,显示路径不对
S2. 按照上述配置仔细检查修改即可

P3. 猫猫图发送内容为一串字符[CQ:image,file=file://E:NPC_Gocqhttppicmao0DEE3C4C2AE7A02C39C86F1E0F618B6A.png],而不是一张图片
S3. 修改路径为上述配置中的样子,并且找到send_message文件夹下的word_detect.py文件,修改其第106行代码为:

local_img_url = "[CQ:image,file=file:///"+path+choice(setu_list)+"]"

主要原因是因为file这个路径会吞掉一个字符,而按照原博主的设置又会报P2的错,因此直接修改源程序,在代码中加入这个字符即可

P4. 其他都ok,但是setu这个api几次之后就没有反应了
S4. 这是因为apikey为空的话每天可以调用的次数有限,按照setuAPI的申请方式申请一个apikey即可获得300次/天的调用次数

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,607评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,047评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,496评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,405评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,400评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,479评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,883评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,535评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,743评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,544评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,612评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,309评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,881评论 3 306
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,891评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,136评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,783评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,316评论 2 342

推荐阅读更多精彩内容

  • 智能机器人在生活中随处可见:iPhone里会说话的siri、会下棋的阿法狗、调皮可爱的微软小冰……她们都具有一定的...
    宇哥聊AI阅读 2,036评论 1 7
  • 我是黑夜里大雨纷飞的人啊 1 “又到一年六月,有人笑有人哭,有人欢乐有人忧愁,有人惊喜有人失落,有的觉得收获满满有...
    陌忘宇阅读 8,520评论 28 53
  • 信任包括信任自己和信任他人 很多时候,很多事情,失败、遗憾、错过,源于不自信,不信任他人 觉得自己做不成,别人做不...
    吴氵晃阅读 6,178评论 4 8
  • 怎么对待生活,它也会怎么对你 人都是哭着来到这个美丽的人间。每个人从来到尘寰到升入天堂,整个生命的历程都是一本书,...
    静静在等你阅读 4,956评论 1 6