auto.waitFor();
const{ loopSecond,loopBreak,commentText}= hamibot.env;
console.show();
let comments = commentText.split("\n");
function deepCopy(obj) {
return JSON.parse(JSON.stringify(obj));
}
let queue = deepCopy(comments);
// alert(queue);
while(true) {
if(queue.length===0){
queue = deepCopy(comments);
//console.log('重置队列');
sleep(loopBreak*100); // 原1000→改为100,重置间隔缩短10倍
}
let comment = queue.shift();
if (!comment || comment.trim() === "") {
//console.log("跳过空评论");
sleep(loopSecond*100); // 原1000→改为100,空评论间隔缩短10倍
continue;
}
// 极速激活输入框逻辑(保持不变)
let isInputActivated = false;
try {
let inputElement = text('说点什么...').findOne(200);
if(inputElement){
let position = inputElement.bounds();
click(position.centerX(), position.centerY());
sleep(100);
isInputActivated = true;
console.log("冲(极速模式)");
}
} catch (e) {
//console.log("激活失败,重试1次");
sleep(100);
try {
let inputElement = text('说点什么...').findOne(200);
if(inputElement){
click(inputElement.bounds().centerX(), inputElement.bounds().centerY());
sleep(100);
isInputActivated = true;
}
} catch (err) {
console.log("输入框激活失败,跳过本次");
}
}
// 输入+发送逻辑(保持不变)
if (isInputActivated) {
try {
let editText = className('EditText').findOne(200);
if(editText){
editText.setText("");
editText.setText(comment);
//console.log("输入评论:" + comment);
}
let sendBtn = text("发送").findOne(200);
if(sendBtn){
sendBtn.click();
//console.log("发送评论:" + comment);
}
} catch (e) {
console.log("输入/发送失败:" + e.message);
}
}
//console.log("间隔"+loopSecond);
sleep(loopSecond*100); // 原1000→改为100,发送间隔缩短10倍
}这是我的代码,想加一个音量键控制启动
回答
为了给你的脚本添加音量键控制启动功能,我会修改代码,使其在按下音量键(音量加或减)时开始执行主循环,再次按下时可以停止。以下是修改后的代码:
// 文档地址:https://docs.hamibot.com/
auto.waitFor();
console.show();
// 获取环境变量
const { loopSecond, loopBreak, commentText } = hamibot.env;
let comments = commentText.split("\n");
function deepCopy(obj) {
return JSON.parse(JSON.stringify(obj));
}
let queue = deepCopy(comments);
// 运行状态标志
let running = false;
// 开启按键监听
events.observeKey();
events.on('key', function(keyEvent) {
// 音量键 key code: 24(音量加), 25(音量减)
if (keyEvent.keyCode === 24 || keyEvent.keyCode === 25) {
running = !running; // 切换运行状态
console.log("脚本状态: " + (running ? "开始运行" : "停止运行"));
keyEvent.preventDefault(); // 阻止默认音量调整行为
}
});
// 主循环
while (true) {
if (running) {
if (queue.length === 0) {
queue = deepCopy(comments);
sleep(loopBreak * 100); // 重置队列后的间隔
}
let comment = queue.shift();
if (!comment || comment.trim() === "") {
sleep(loopSecond * 100); // 空评论间隔
continue;
}
// 极速激活输入框逻辑
let isInputActivated = false;
try {
let inputElement = text('说点什么...').findOne(200);
if (inputElement) {
let position = inputElement.bounds();
click(position.centerX(), position.centerY());
sleep(100);
isInputActivated = true;
console.log("冲(极速模式)");
}
} catch (e) {
sleep(100);
try {
let inputElement = text('说点什么...').findOne(200);
if (inputElement) {
click(inputElement.bounds().centerX(), inputElement.bounds().centerY());
sleep(100);
isInputActivated = true;
}
} catch (err) {
console.log("输入框激活失败,跳过本次");
}
}
// 输入和发送逻辑
if (isInputActivated) {
try {
let editText = className('EditText').findOne(200);
if (editText) {
editText.setText("");
editText.setText(comment);
}
let sendBtn = text("发送").findOne(200);
if (sendBtn) {
sendBtn.click();
}
} catch (e) {
console.log("输入/发送失败:" + e.message);
}
}
sleep(loopSecond * 100); // 发送间隔
} else {
sleep(100); // 当未运行时,短暂睡眠以减少CPU使用
}
}
修改说明:
- 添加音量键监听:使用
events.observeKey()和events.on('key', ...)监听音量键(key code 24 和 25)。按下音量键时,切换running状态。 - 运行状态控制:通过
running变量控制主循环的执行。当running为true时,执行评论发送逻辑;为false时,睡眠等待。 - 阻止默认行为:
keyEvent.preventDefault()防止音量键调整设备音量。 - 主循环优化:将原来的无限循环重构为可中断的循环,根据
running状态执行或睡眠。
使用方式:
- 运行脚本后,脚本会等待无障碍服务并显示控制台。
- 按下音量加或减键开始执行评论发送。
- 再次按下音量键停止执行。
- 环境变量
loopSecond、loopBreak和commentText仍然有效。
确保Hamibot具有无障碍服务和悬浮窗权限。如果有问题,检查按键监听是否正常工作(某些设备可能需要额外权限)。