牙叔教程 简单易懂
为什么要写个通知栏机器人呢?
因为其他机器人框架有时候QQ登录不上去;
通知栏机器人一定登的上去, 因为就和正常使用QQ没啥区别, 只是用脚本加了一个通知栏监听
需要准备那些东西?
- 两个废旧手机, 至少QQ要能正常使用, 内存也不能太低, 我觉得至少2G;
- 两个QQ , 一个QQ负责监听消息, 另一个负责发送消息
使用场景
在少量的QQ群发送消息;
如果是大量QQ群, 就不合适了, 会发生两个问题
- 漏掉通知栏消息
- 机器人回复消息慢
如果你上两个问题, 你觉得没问题, 那就可以继续往下看, 否则不适合你, 不用往下看了
机器人流程图
为什么要用通知栏
因为通知栏能监听到QQ消息, 你用OCR之类的, 都不如通知栏靠谱
两台手机怎么通信
一台手机监听到消息后, 使用http发送消息给另一台手机;
另一台手机用autojs的nodejs引擎创建了一个服务器;
这就是CS架构, Client客户端, Server服务端
autojs在后台能保活吗
根据我一个月的实际测试, 没问题
我的手机一直在充电, 除非停电, 或者脚本发生错误, 24小时都可以正常运行
屏幕是相当耗电的, 所以我的手机是在息屏状态下运行的;
息屏和锁屏不一样, 息屏是把屏幕关掉, 大概就和你把电脑显示器电源关掉一样, 主机还是在运行的;
锁屏是按电源键锁屏
息屏效果可以看这个
我给了autojs以下权限
- 后台自启
- 电池白名单
- 无障碍
通知栏怎么监听QQ消息
就直接调用通知栏监听API就行了;
当然了, 你肯定要允许QQ在通知栏发消息
代码如下
auto();
events.observeNotification();
events.onNotification(function (notification) {
log(notification);
});
就这么简单
过滤监听的消息
不是每一句消息, 我们都需要转发;
我们只关心我们关心的消息, 我用的规则如下
- 指定QQ群
- 以#开头的消息
- 消息长度大于3
- 不是机器人发的消息
提取消息
通知栏监听的消息有很多属性, 我们把可能用到的属性提取出来
{
"title": "牙叔教程二群 (7条新消息)",
"text": "☾ 分寸 ☽: 输入法弹出还行,1秒:左右,输入:文字后缩进要8秒",
"when": 1666862029027,
"tickerText": "☾ 分寸 ☽(牙叔教程二群):输入法弹出还行,1秒左右,输入文字后缩进要8秒",
"packageName": "com.tencent.mobileqq"
}
这里面没有QQ群号, 因此, 我们要添加map, 把群名和群号对应起来
通知栏消息过多怎么办
读取消息之后, 就删除该消息
notification.delete();
怎么转发消息
http
function postData(data) {
log("客户端发送的数据: " + JSON.stringify(data));
http.postJson(baseUrl, data, {}, function (res, err) {
if (err) {
console.error(err);
return;
}
log("code = " + res.statusCode);
log("html = " + res.body.string());
});
}
加强保活效果
播放无声音乐
threads.start(function () {
//传递第三个参数为true以循环播放音乐
let audioPath = "/sdcard/脚本/noSound.mp3";
media.playMusic(audioPath, 1, true);
});
定时把autojs放到前台
let packageName = "org.autojs.autojspro";
setInterval(() => {
app.launchPackage(packageName);
setTimeout(() => {
home();
}, 3000);
}, 1000 * 10);
总结
本节讲了通知栏机器人的原理, autojs保活以及客户端的通知栏监听,
下一节讲服务端
环境
设备: 小米11pro
Android版本: 12
Autojs版本: 9.3.9
名人名言
思路是最重要的, 其他的百度, bing, stackoverflow, github, 安卓文档, autojs文档, 最后才是群里问问 --- 牙叔教程
声明
部分内容来自网络 本教程仅用于学习, 禁止用于其他用途