说明
现在handsome主题已经有了微信公众号和浏览器拓展两种方式向时光机发送消息,那么自然就想到QQ端是否也可以做到,所以我就通过对浏览器扩展发送时光机进行抓包,然后基于酷Q和nonebot,实现了通过向QQ小号发送消息的方式向时光机发送消息。
使用方法
和微信公众号的用法大同小异,所有消息需要私聊机器人
发送
帮助 时光机
查看帮助信息
发送绑定
然后根据提示输入绑定信息,发送解绑
取消绑定
发送时光鸡
然后根据提示输入你要发送的消息(也可以一次性输入时光鸡 你要发送的消息
中间加空格即可)
发送开始
然后可以逐条发送消息,发送结束
结束混合消息,发送取消
取消发送
发送的第一条消息如果以#
开头即为私密消息
发送博客
获取博客地址
发送图床
更改图床
如有需要,可以直接加群体验我已经搭建好的QQ机器人
已知问题
- 由于QQ可以在一条消息里同时塞进文字和图片,所以发送单条消息也可以达到混合消息的效果,但经我测试在QQ手机客户端如果一条消息同时包含文字和图片,那么图片会无法解析,但是电脑的TIM客户端不存在这个问题。这个问题出在酷Q上,所以要同时发送文字和图片,在手机客户端最好采用逐条发送的模式。
- 由于handsome_6.0对上传的图片进行了压缩,所以上传gif图片会被压缩成jpg图片,因此图片增加图床功能并默认采用QQ图片的源地址,省去了下载和上传操作,速度更快,但QQ源图片腾讯可能采取限制而无法引用,而且目前已知腾讯对这些图片的缓存会过一段时间就清掉,所以QQ源图床慎用。最好的当然是接入自己的图床,暂时先懒得弄。
安装方法(Windows)
你可以先在自己的电脑上安装和熟悉使用
1. 准备
所有需要下载的东西已打包->点击下载
因为是基于酷Q和Python运行的,所以需要先安装酷Q Air->下载地址,然后打开酷Q,登陆你的作为QQ机器人的QQ小号,熟悉酷Q的使用,尤其是插件的安装和启用,酷Q论坛里也有许多其他插件可供玩耍。
然后下载安装python,建议下载安装Python 3.7.x 32位版本,因为我是基于这个版本开发的,别的版本尤其是最新的3.8版本可能会有未知的不兼容的bug。安装的时候记得勾选环境变量。
2. 安装插件
这里可以参考CoolQ HTTP API官方说明
将io.github.richardchien.coolqhttpapi.cpk移动至酷Q的app文件下,然后重启酷Q或者在应用管理里重载应用,在应用管理里选中HTTP API插件,点击启用,接下来几个弹窗统统选是。启用成功后会弹出控制台窗口。
3.启用nonebot
这里可以参考Nonebot官方说明
如果你之前成功开启了插件,那么酷Q的data/app/io.github.richardchien.coolqhttpapi/config/目录中应该已经有了一个名为 <user-id>.json 的文件(<user-id> 为你登录的 QQ 账号),修改其中的内容如下:
{
"host": "[::]",
"port": 5700,
"use_http": true,
"ws_host": "[::]",
"ws_port": 6700,
"use_ws": false,
"ws_reverse_url": "",
"ws_reverse_api_url": "ws://127.0.0.1:8080/ws/api/",
"ws_reverse_event_url": "ws://127.0.0.1:8080/ws/event/",
"ws_reverse_reconnect_interval": 3000,
"ws_reverse_reconnect_on_code_1000": true,
"use_ws_reverse": true,
"post_url": "",
"access_token": "",
"secret": "",
"post_message_format": "string",
"serve_data_files": false,
"update_source": "github",
"update_channel": "stable",
"auto_check_update": false,
"auto_perform_update": false,
"show_log_console": true,
"log_level": "info"
}
然后下载找到我写的coolq-cross-bot
文件,用python运行该文件夹下的bot.py
文件,运行前要先安装依赖库。
打开命令提示符窗口,执行以下命令:
pip install nonebot
pip install aiohttp
然后在控制台进入coolq-cross-bot
文件夹内,输入python bot.py
运行该文件,当然也可以用IDE运行。
113.96.232.144 c2cpicdw.qpic.cn
最后重启酷Q软件或者重载插件,弹出来的控制台如下显示成功字样则代表配置成功,这时你就可以私聊机器人发送
初始化
创建一个数据库后就可以使用了(初始化命令只需执行一次,用于在文件目录下新建bind_info.sqlite文件用于记录绑定信息),最后要注意两个控制台窗口都不能关闭,你可以选择新建一个桌面单独用于运行他们。安装方法(Linux)
详细参考:CoolQ HTTP API官方说明
Linux系统需要在docker中运行酷Q,所以要先安装docker,安装教程请自行百度,以下仅供参考,以我的Ubuntu16.04 64位为例,ssh连上服务器后运行以下命令安装docker
$ curl -fsSL https://get.docker.com -o get-docker.sh
$ sudo sh get-docker.sh
然后安装酷Q和HTTP API插件(配置参数无所谓,后面手动替换)
$ docker pull richardchien/cqhttp:latest
$ mkdir coolq # 用于存储 酷Q 的程序文件
$ docker run -ti --rm --name cqhttp-test \
-v $(pwd)/coolq:/home/user/coolq \ # 将宿主目录挂载到容器内用于持久化 酷Q 的程序文件
-p 9000:9000 \ # noVNC 端口,用于从浏览器控制 酷Q
-p 5700:5700 \ # HTTP API 插件开放的端口
-e COOLQ_ACCOUNT=123456 \ # 要登录的 QQ 账号,可选但建议填
-e CQHTTP_POST_URL=http://example.com:8080 \ # 事件上报地址
-e CQHTTP_SERVE_DATA_FILES=yes \ # 允许通过 HTTP 接口访问 酷Q 数据文件
richardchien/cqhttp:latest
然后访问 http://[你的服务器IP]:9000/ 进入 noVNC(默认密码 MAX8char),登录酷Q,即可开始使用(插件已自动启用,配置文件也根据启动命令的环境变量自动生成了)
把coolq-cross-bot文件夹上传至服务器,将之前的json文件也上传至服务器并替换掉app/io.github.richardchien.coolqhttpapi/下的ini配置文件(注意将配置文件中127.0.0.1换成172.17.0.1),然后用python3命令运行文件下的bot.py,重启插件
进阶自定义修改(可选)
1. 自定义命令
其实时光机的触发命令不仅可以是‘时光机’,也可以是‘时光鸡’、‘时光姬’等,具体可以在 coolq-cross-bot/plugins/handsome/timeji.py 源码中找到类似下面的语句自行进行修改。@on_command('timeji', aliases=('时光鸡', '时光机', '时光姬', '动态', '说说'))
其他命令类似。
2. 添加消息来源
如上图所示,在时光机消息的来源处,如果不对handsome的源码进行修改,就会显示来自未知浏览器,找到handsome/libs/UA.php文件,在文件的最后加入如下所示的QQ的来源,名称可以自定义。
public function returnTimeUa(){
if ($this->ua == "weixin" || $this->ua == "weChat"){
return array("title"=>_mt("微信公众号"),
"icon"=>"compass");
}elseif ($this->ua == "crx"){
return array("title"=>_mt("Chrome扩展"),
"icon"=>"chrome");
}elseif ($this->ua == "qq"){
return array("title"=>_mt("QQ时光姬"),
"icon"=>"compass");
}else{
$ua = $this->returnOS();
$ua["icon"] = "disc";
return $ua;
}
}
3.添加消息来源前的图标(6.0主题不需要了)
主题默认呈现出来的都是清一色的小圆点图标,要更改消息来源前的小图标,首先要添加fontawesome图标,然后找到handsome/component/say.php,找到下面第一条语句,改成第二句。
# 找到下面这一句
<i class="glyphicon glyphicon-record m-l-sm"></i>
# 改成下面这样
<i class="<?php echo $ua->returnTimeUa()['icon'] ?> m-l-sm"></i>
2 条评论
大佬能不能搞个晨风机器人
没接触过不了解