You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

579 lines
20 KiB

//悬浮窗主界面
var img_url = "http://cdnjson.com/images/2024/10/08/35521ea90f9dd7b5eb70563751db3f09.jpg";
suspendedWindow();
function suspendedWindow() {
window = floaty.rawWindow(
<horizontal gravity="center_vertical">
<img id="floaty_icon" src="{{img_url}}" w="40" h="40" alpha="0.8" circle="true" borderWidth="1dp" borderColor="black" />
<vertical id="v_drawer">
<button id="btn1" textColor="#FFFFFF" text="自动打开直播" bg="#4F4F4F" padding="0" h="70" w="70" />
<text text="" h="1" />
<button id="btn2" textColor="#FFFFFF" text="编辑文本" bg="#4F4F4F" padding="0" h="70" w="70" />
<text text="" h="1" />
<button id="btn3" textColor="#FFFFFF" text="滑屏、点赞、关注" bg="#4F4F4F" padding="0" h="70" w="70" />
<text text="" h="1" />
<button id="btn4" textColor="#FFFFFF" text="自动点赞" bg="#4F4F4F" padding="0" h="70" w="70" />
<text text="" h="1" />
<button id="btn5" textColor="#FFFFFF" text="发表评论" bg="#4F4F4F" padding="0" h="70" w="70" />
</vertical>
</horizontal>
);
window.setPosition(50, device.height / 3);
window.exitOnClose();
setInterval(() => { }, 1000);
var x = 0, y = 0;
var windowX, windowY;
var downTime;
console.log("w=" + device.width);
console.log("h=" + device.height);
window.floaty_icon.setOnTouchListener(function (view, event) {
switch (event.getAction()) {
case event.ACTION_DOWN:
x = event.getRawX();
y = event.getRawY();
windowX = window.getX();
windowY = window.getY();
downTime = new Date().getTime();
return true;
case event.ACTION_MOVE:
let movexx = windowX + (event.getRawX() - x);
let moveyy = windowY + (event.getRawY() - y);
if (movexx < 0 || movexx > device.width) {
movexx = 0;
}
if (moveyy < 0 || moveyy > device.height) {
moveyy = 0;
}
window.setPosition(movexx, moveyy);
console.log("event y=" + event.getRawY());
console.log("event x=" + event.getRawX());
return true;
case event.ACTION_UP:
if (Math.abs(event.getRawY() - y) < 5 && Math.abs(event.getRawX() - x) < 5) {
drawerStatus();
}
return true;
}
return true;
});
function drawerStatus() {
var v_drawer = window.v_drawer;
if (v_drawer.visibility == 0) {
v_drawer.visibility = 4;
} else {
v_drawer.visibility = 0;
}
}
// 功能1按钮事件
window.btn1.setOnTouchListener(function (view, event) {
if (event.getAction() == event.ACTION_UP) {
toast("功能1被点击");
threads.start(function () { // 创建新线程执行耗时操作
// 启动小红书APP
launchApp("小红书");
// 等待小红书启动完成这里等待2秒具体时间可能需要根据实际情况调整
sleep(2000);
click("发现");
// 执行下滑操作参数分别是操作类型滑动起始X坐标起始Y坐标结束X坐标结束Y坐标持续时间
swipe(500, 1000, 500, 1100, 500);
// 等待滑动动画完成这里等待500毫秒具体时间可能需要根据实际情况调整
sleep(500);
click("直播");
sleep(3000);
click(800, 1000);
});
}
return true;
});
// 功能2按钮事件
window.btn2.setOnTouchListener(function (view, event) {
if (event.getAction() == event.ACTION_UP) {
toast("功能2被点击");
threads.start(function() {
auto(); // 启用Auto.js的自动化功能
// 启动小红书APP
launchApp("小红书");
// 等待小红书启动完成这里等待4秒具体时间可能需要根据实际情况调整
sleep(4000);
setScreenMetrics(1200, 2652);
click(535,2550);
sleep(2000);
click("文字配图");
sleep(1000);
click(535,1325);
sleep(1000);
setText("Hello, Auto.js!");
click("生成");
sleep(5000);
click("确认");
sleep(1000);
click("发布笔记");
})
}
return true;
});
// 功能3按钮事件
window.btn3.setOnTouchListener(function (view, event) {
if (event.getAction() == event.ACTION_UP) {
toast("功能3被点击");
threads.start(function() {
// 设置屏幕分辨率
setScreenMetrics(1080, 1920);
// 请求悬浮窗权限和无障碍服务
if (!floaty.checkPermission()) {
floaty.requestPermission();
}
if (!auto.service) {
toast("请开启无障碍服务");
auto.waitFor();
}
var 悬块 = function (window, view) {
if (!window || !view) {
throw "缺参数";
}
this.x = 0, this.y = 0; // 记录触摸坐标
this.windowX, this.windowY; // 记录悬浮窗位置
this.downTime = 500; // 长按时间
this.Timeout = 0; // 定时器 ID
this.Click = function () { };
this.LongClick = function () { };
this.setClick = function (fun) {
if (typeof fun == "function") {
this.Click = fun;
}
};
this.setLongClick = function (fun, ji) {
if (typeof fun == "function") {
this.LongClick = fun;
if (parseInt(ji) <= 1000) {
this.downTime = parseInt(ji);
}
}
};
view.setOnTouchListener(new android.view.View.OnTouchListener((view, event) => {
switch (event.getAction()) {
case event.ACTION_DOWN:
this.x = event.getRawX();
this.y = event.getRawY();
this.windowX = window.getX();
this.windowY = window.getY();
this.Timeout = setTimeout(() => {
this.LongClick();
this.Timeout = 0;
}, this.downTime);
return true;
case event.ACTION_MOVE:
if (Math.abs(event.getRawY() - this.y) > 5 && Math.abs(event.getRawX() - this.x) > 5) {
if (this.Timeout) {
clearTimeout(this.Timeout);
this.Timeout = 0;
}
window.setPosition(this.windowX + (event.getRawX() - this.x), this.windowY + (event.getRawY() - this.y));
}
return true;
case event.ACTION_UP:
if (this.Timeout) {
clearTimeout(this.Timeout);
this.Timeout = 0;
this.Click();
}
return true;
}
return true;
}));
};
// 创建简化版的悬浮窗UI
var window = floaty.window(
<frame>
<vertical>
{/* <button id="start" text="开始" w="*" /> */}
<button id="stop" text="停止" w="*" />
</vertical>
</frame>
);
var bd = new 悬块(window, window.stop);
bd.setClick(() => {
isLiking = false; // 停止点赞
window.close(); // 关闭悬浮窗
toast("程序已结束"); // 提示信息
sleep(1000);
exit(); // 结束脚本
});
runAutomation();
// 自动化主功能
function runAutomation() {
launchApp("小红书");
sleep(3000);
enterVideo();
while(true){
sleep(2000);
// 点赞
var count= 2;
while(count){
click(500,800);
count= count-1;
}
sleep(2000);
// 关注
click("关注");
sleep(1000);
//滑屏
swipe(500, 1500, 500, 300, 500);
}
}
// 进入小红书直播
function enterVideo(){
swipe(500, 1000, 500, 1100, 500);
// 等待滑动动画完成这里等待500毫秒具体时间可能需要根据实际情况调整
sleep(1000);
click("直播");
sleep(1000);
click(200, 1000);
}
})
}
return true;
});
//功能4事件
window.btn4.setOnTouchListener(function (view, event) {
if (event.getAction() == event.ACTION_UP) {
toast("功能4被点击");
threads.start(function() {
// 定义悬浮窗控制模块,命名为(悬块)
var 悬块 = function (window, view) {
if (!window || !view) {
throw "缺参数";
}
this.x = 0, this.y = 0; // 记录触摸坐标
this.windowX, this.windowY; // 记录悬浮窗位置
this.downTime = 500; // 长按时间
this.Timeout = 0; // 定时器 ID
this.Click = function () { };
this.LongClick = function () { };
this.setClick = function (fun) {
if (typeof fun == "function") {
this.Click = fun;
}
};
this.setLongClick = function (fun, ji) {
if (typeof fun == "function") {
this.LongClick = fun;
if (parseInt(ji) <= 1000) {
this.downTime = parseInt(ji);
}
}
};
view.setOnTouchListener(new android.view.View.OnTouchListener((view, event) => {
switch (event.getAction()) {
case event.ACTION_DOWN:
this.x = event.getRawX();
this.y = event.getRawY();
this.windowX = window.getX();
this.windowY = window.getY();
this.Timeout = setTimeout(() => {
this.LongClick();
this.Timeout = 0;
}, this.downTime);
return true;
case event.ACTION_MOVE:
if (Math.abs(event.getRawY() - this.y) > 5 && Math.abs(event.getRawX() - this.x) > 5) {
if (this.Timeout) {
clearTimeout(this.Timeout);
this.Timeout = 0;
}
window.setPosition(this.windowX + (event.getRawX() - this.x), this.windowY + (event.getRawY() - this.y));
}
return true;
case event.ACTION_UP:
if (this.Timeout) {
clearTimeout(this.Timeout);
this.Timeout = 0;
this.Click();
}
return true;
}
return true;
}));
};
// 进入小红书并进行操作
function autoLikeInLiveRoom() {
launchApp("小红书");
sleep(3000); // 等待小红书启动完成
// 执行下滑操作
swipe(500, 1000, 500, 1100, 500);
sleep(500); // 等待滑动动画完成
click('直播'); // 点击直播按钮
sleep(1000); // 等待加载
click(200, 1000); // 进入直播间
}
// 创建并生成一个悬浮窗
var window = floaty.window(
<vertical bg="#2196F3">
<button id="but" w="300px" h="150px" text="停止点赞" />
<button id="end" w="300px" h="150px" text="结束程序" />
<text text="点赞速度: " />
<seekbar id="speedControl" max="10" progress="2" />
<text id="speedValue" text="2000ms" />
</vertical>
);
// 设置点赞速度变量
let likeInterval = 2000; // 默认点赞间隔(毫秒)
let isLiking = true; // 是否正在点赞
// 双击屏幕中间的函数
function doubleClickScreenCenter() {
// let width = device.width;
// let height = device.height;
// let centerX = width / 2;
// let centerY = height / 2;
click(535, 1250); // 第一次点击
sleep(100); // 等待100毫秒
click(535, 1250); // 第二次点击
}
// 启动自动点赞的循环
function startAutoLiking() {
while (isLiking) {
doubleClickScreenCenter(); // 执行点赞操作
sleep(likeInterval); // 根据设置的点赞速度等待
}
}
// 实时更新点赞速度
window.speedControl.setOnSeekBarChangeListener(new android.widget.SeekBar.OnSeekBarChangeListener({
onProgressChanged: function (seekBar, progress, fromUser) {
likeInterval = (progress + 1) * 1000; // 将进度转换为毫秒
window.speedValue.setText(likeInterval + "ms"); // 更新显示文本
},
onStartTrackingTouch: function (seekBar) { },
onStopTrackingTouch: function (seekBar) { }
}));
// 空运行定时器保持脚本运行中
setInterval(() => { }, 500);
// 创建一个新的悬浮控制模块
var ad = new 悬块(window, window.but);
var bd = new 悬块(window, window.end);
bd.setClick(() => {
isLiking = false; // 停止点赞
window.close(); // 关闭悬浮窗
toast("程序已结束"); // 提示信息
sleep(1000);
exit(); // 结束脚本
});
ad.setClick(() => {
log("已被点击");
if (isLiking) {
isLiking = false;
window.but.setText("开始点赞");
toast("已停止点赞");
} else {
isLiking = true;
window.but.setText("正在点赞...");
toast("开始自动点赞");
// 启动点赞循环在新线程中
threads.start(() => {
startAutoLiking();
});
}
});
autoLikeInLiveRoom();
sleep(likeInterval);
startAutoLiking();
// 脚本备份功能
脚本备份();
function 脚本备份(path) {
path = path || "/sdcard/备份脚本";
var file = new java.io.File(path);
var fromfile = String(engines.myEngine().getSource());
var filename = new java.io.File(fromfile).getName();
if (!file.isDirectory()) {
if (!file.mkdirs()) {
log("创建文件夹失败");
}
}
var txt = files.read(fromfile);
files.write(files.join(path, filename), txt);
}
})
}
return true;
});
//功能5按钮事件
window.btn5.setOnTouchListener(function (view, event) {
if (event.getAction() == event.ACTION_UP) {
toast("功能5被点击");
threads.start(function () { // 创建新线程执行耗时操作
launchApp("小红书");
// 等待小红书启动完成这里等待2秒具体时间可能需要根据实际情况调整
sleep(2000);
click("发现");
// 执行下滑操作参数分别是操作类型滑动起始X坐标起始Y坐标结束X坐标结束Y坐标持续时间
swipe(500, 1000, 500, 1100, 500);
// 等待滑动动画完成这里等待500毫秒具体时间可能需要根据实际情况调整
sleep(500);
click("直播");
sleep(1000);
click(800, 1000);
//2 点赞悬浮窗
var window = floaty.window(
<vertical>
<input id="input3" hint="请输入评论" textSize="40sp" focusable="true" />
<input id="input4" hint="评论次数" textSize="40sp" focusable="true" />
<button id="reBtn" text="随机评论" />
<button id="remarkBtn" text="动态评论" />
<button id="closeBtn" text="关闭悬浮窗" />
</vertical>
);
var s1 = 0;
var s2 = 0;
var remarkCounter = 3;
var commentText;
var List = ["666", "好可爱", "主播加油", "做的好棒", "太强了", "感谢主播!", "看得我心动", "收藏了", "牛逼"]; // 正能量语录
window.setPosition(device.width / 2 + 50, 50);
toast("长按确定键可调整位置");
window.input3.on("key", function (keyCode, event) {
if (event.getAction() == event.ACTION_DOWN && keyCode == keys.back) {
window.disableFocus();
event.consumed = true;
}
});
window.input3.on("touch_down", () => {
window.requestFocus();
window.input3.requestFocus();
});
window.input4.on("key", function (keyCode, event) {
if (event.getAction() == event.ACTION_DOWN && keyCode == keys.back) {
window.disableFocus();
event.consumed = true;
}
});
window.input4.on("touch_down", () => {
window.requestFocus();
window.input4.requestFocus();
});
window.remarkBtn.on("click", () => {
window.disableFocus();
inputContent = window.input3.getText();
remarkCounter = window.input4.getText();
if (inputContent == "") inputContent = "666";
if (remarkCounter < 1) remarkCounter = 1;
commentText = inputContent; // 设置评论的文本内容
log(commentText);
s1 = 1;
});
window.reBtn.on("click", () => {
window.disableFocus();
remarkCounter = window.input4.getText();
if (remarkCounter < 1) remarkCounter = 1;
s2 = 1;
});
window.closeBtn.on("click", () => {
window.close();
exit();
});
setInterval(() => {
if (s1 == 1) {
var liveTab = text("说点什么…").findOne();
click(liveTab.bounds().centerX(), liveTab.bounds().centerY());
s1 = 2;
}
else if (s1 == 2) {
setText(commentText);
s1 = 3;
}
else if (s1 == 3) {
var sendButton = text("发送").findOne();
click(sendButton.bounds().centerX(), sendButton.bounds().centerY());
s1 = 1;
remarkCounter--;
if (remarkCounter == 0) s1 = 0;
}
else if (s2 == 1) {
var liveTab = text("说点什么…").findOne();
click(liveTab.bounds().centerX(), liveTab.bounds().centerY());
s2 = 2;
}
else if (s2 == 2) {
var rand = Math.floor(Math.random() * List.length);
setText(List[rand]);
s2 = 3;
}
else if (s2 == 3) {
var sendButton = text("发送").findOne();
click(sendButton.bounds().centerX(), sendButton.bounds().centerY());
s2 = 1;
remarkCounter--;
if (remarkCounter == 0) s2 = 0;
}
}, 1000);
});
}
return true;
});
}