Ver código fonte

导入脚本更新
修复tag key
Redis 脚本缓存

CJ 1 ano atrás
pai
commit
72cef79e17
66 arquivos alterados com 1725 adições e 184 exclusões
  1. 15 24
      dtok-api/api/src/main/java/com/dtok/api/AppApi.java
  2. 73 9
      dtok-api/api/src/main/java/com/dtok/api/controller/ScriptController.java
  3. 1 3
      dtok-api/api/src/main/java/com/dtok/api/controller/UserController.java
  4. 4 0
      dtok-api/entity/src/main/java/com/dtok/entity/Account.java
  5. 2 0
      dtok-api/entity/src/main/java/com/dtok/entity/params/DeviceLoginResponse.java
  6. BIN
      dtok-api/entity/target/classes/com/dtok/entity/Account.class
  7. BIN
      dtok-api/entity/target/classes/com/dtok/entity/params/DeviceLoginResponse.class
  8. BIN
      dtok-api/entity/target/entity-0.1.jar
  9. 41 0
      dtok-api/framework/src/main/java/com/dtok/framework/core/ScriptSourceManager.java
  10. 18 0
      dtok-api/framework/src/main/java/com/dtok/framework/util/UploadUtils.java
  11. 136 0
      dtok-api/framework/src/main/java/com/dtok/framework/util/ZipUtils.java
  12. 1 1
      dtok-api/framework/src/main/resources/application.properties
  13. 1 1
      dtok-api/framework/target/classes/application.properties
  14. BIN
      dtok-api/framework/target/classes/com/dtok/framework/util/UploadUtils.class
  15. BIN
      dtok-api/framework/target/framework-0.1.jar
  16. 3 0
      dtok-api/repository/src/main/java/com/dtok/repository/ScriptRepository.java
  17. BIN
      dtok-api/repository/target/classes/com/dtok/repository/ScriptRepository.class
  18. BIN
      dtok-api/repository/target/repository-0.1.jar
  19. BIN
      dtok-api/service/target/service-0.1.jar
  20. 2 2
      dtok-app/.idea/deploymentTargetDropDown.xml
  21. 0 1
      dtok-app/.idea/misc.xml
  22. 1 1
      dtok-app/app/build.gradle
  23. 8 0
      dtok-app/app/src/main/java/com/cj/autojs/dtok/LoginActivity.java
  24. 11 23
      dtok-app/app/src/main/java/com/cj/autojs/dtok/MainActivity.java
  25. 4 2
      dtok-app/app/src/main/java/com/cj/autojs/dtok/config/UrlConfig.java
  26. 10 0
      dtok-app/app/src/main/java/com/cj/autojs/dtok/entity/User.java
  27. 29 0
      dtok-app/app/src/main/java/com/cj/autojs/dtok/jsinterface/JsInterface.java
  28. 3 0
      dtok-app/app/src/main/java/com/cj/autojs/dtok/util/SharedPreferencesUtils.java
  29. BIN
      dtok-app/release/app-arm64-v8a-release.apk
  30. BIN
      dtok-app/release/app-armeabi-v7a-release.apk
  31. BIN
      dtok-app/release/app-x86-release.apk
  32. 7 7
      dtok-app/release/output-metadata.json
  33. 12 6
      dtok-mobile-vuetify/src/components/HelloWorld.vue
  34. 10 9
      dtok-mobile-vuetify/src/components/TagInput.vue
  35. 5 1
      dtok-mobile-vuetify/src/components/dialog/UserProfileDialog.vue
  36. 1 1
      dtok-mobile-vuetify/src/data/ExecData.js
  37. 8 0
      dtok-vue/src/data/system/user/UserData.js
  38. 87 1
      dtok-vue/src/views/base/Script.vue
  39. 6 0
      dtok-vue/src/views/sys/UserManagement-Admin.vue
  40. 2 2
      script/tcyl.js
  41. 54 4
      webpack-script/dist/一键取关.js
  42. 54 4
      webpack-script/dist/一键取赞.js
  43. 54 4
      webpack-script/dist/万能引流.js
  44. 72 5
      webpack-script/dist/同城引流.js
  45. 54 4
      webpack-script/dist/垂直养号.js
  46. 54 4
      webpack-script/dist/智能养号.js
  47. 54 4
      webpack-script/dist/智能涨粉.js
  48. 54 4
      webpack-script/dist/点赞回访.js
  49. 54 4
      webpack-script/dist/直播养号.js
  50. 54 4
      webpack-script/dist/直播拓客.js
  51. 54 4
      webpack-script/dist/直播控场.js
  52. 54 4
      webpack-script/dist/直播点赞.js
  53. 54 4
      webpack-script/dist/粉丝回访.js
  54. 54 4
      webpack-script/dist/粉丝私信.js
  55. 54 4
      webpack-script/dist/粉丝转化.js
  56. 54 4
      webpack-script/dist/自动回评.js
  57. 54 4
      webpack-script/dist/行业转化.js
  58. 54 4
      webpack-script/dist/视频筛选.js
  59. 54 4
      webpack-script/dist/评论区回复.js
  60. 54 4
      webpack-script/dist/超级转发.js
  61. 54 4
      webpack-script/dist/通讯录转化.js
  62. 1 1
      webpack-script/src/common/conf.js
  63. 8 3
      webpack-script/src/common/douyin.js
  64. 2 0
      webpack-script/src/common/engine.js
  65. 43 0
      webpack-script/src/common/node.js
  66. 18 1
      webpack-script/src/tcyl.js

+ 15 - 24
dtok-api/api/src/main/java/com/dtok/api/AppApi.java

@@ -12,20 +12,19 @@ import com.dtok.framework.exception.BizExceptionEnum;
 import com.dtok.framework.exception.BusinessException;
 import com.dtok.framework.response.ResponseData;
 import com.dtok.framework.util.IpUtil;
+import com.dtok.framework.util.UploadUtils;
 import com.dtok.repository.*;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.StringUtils;
 import org.springframework.web.bind.annotation.*;
 
 import java.io.File;
 import java.sql.Timestamp;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
+import java.util.*;
 import java.util.stream.Collectors;
 
 @RestController
@@ -48,6 +47,9 @@ public class AppApi {
     @Autowired
     ScriptRepository scriptRepository;
 
+    @Autowired
+    RedisTemplate redisTemplate;
+
     @GetMapping("/checkRegister/{token}/{androidId}")
     public ResponseData checkRegister(@PathVariable String token, @PathVariable String androidId,
                                       @RequestParam(value = "appVersion", required = false) String appVersion) {
@@ -219,36 +221,25 @@ public class AppApi {
             throw new NullPointerException("没有找到设备");
         }
 
-        Timestamp timestamp = new Timestamp((new Date()).getTime());
-        if (!Objects.isNull(account.getExpireAt()) && account.getExpireAt().before(timestamp)) {
-            return ResponseData.error("会员已过期,请购买时长");
+        if (!account.getIsFinal()) {
+            Timestamp timestamp = new Timestamp((new Date()).getTime());
+            if (!Objects.isNull(account.getExpireAt()) && account.getExpireAt().before(timestamp)) {
+                return ResponseData.error("会员已过期,请购买时长");
+            }
         }
 
         if (!account.getId().equals(devices.getAccount())) {
             throw new NullPointerException("权限错误");
         }
-        String filePath = "/opt/dtok/script/" + module + ".js"; // 指定要读取的文件路径
 
-        File file = new File(filePath);
-        if (!file.exists()) {
-            throw new NullPointerException("没有此功能");
-        }
 
-        Script script = scriptRepository.findFirstByModuleAndApp(module, app);
-        if (Objects.isNull(script)) {
-            throw new NullPointerException("没有此功能");
-        }
-
-        script.setCallCount(script.getCallCount() + 1);
-        scriptRepository.save(script);
-
-        FileReader fileReader = new FileReader(filePath);
-        String result = fileReader.readString();
-        script.setScriptContent(result);
         log.info(String.format("用户 %s 获取 %s 脚本 ", StpUtil.getLoginId(), module));
 
+        Map<String, String> resultMap = new HashMap<>();
+        resultMap.put("scriptContent", (String) redisTemplate.opsForValue().get(module));
+        resultMap.put("module", module);
 
-        return ResponseData.success(script);
+        return ResponseData.success(resultMap);
     }
 
     @GetMapping("/getExecScriptTest")

+ 73 - 9
dtok-api/api/src/main/java/com/dtok/api/controller/ScriptController.java

@@ -2,20 +2,26 @@ package com.dtok.api.controller;
 
 import cn.dev33.satoken.annotation.SaCheckRole;
 import cn.dev33.satoken.stp.StpUtil;
+import cn.hutool.core.io.FileUtil;
 import cn.hutool.core.io.file.FileReader;
 import cn.hutool.core.lang.generator.UUIDGenerator;
+import cn.hutool.core.util.ZipUtil;
+import cn.hutool.http.server.HttpServerResponse;
 import com.dtok.entity.Account;
 import com.dtok.entity.LoginHistory;
 import com.dtok.entity.Script;
 import com.dtok.entity.ScriptHistory;
 import com.dtok.entity.params.ScriptFormData;
 import com.dtok.framework.base.BaseController;
+import com.dtok.framework.core.ScriptSourceManager;
 import com.dtok.framework.exception.BizExceptionEnum;
 import com.dtok.framework.response.ResponseData;
 import com.dtok.framework.util.ToolUtil;
 import com.dtok.framework.util.UploadUtils;
+import com.dtok.framework.util.ZipUtils;
 import com.dtok.repository.ScriptHistoryRepository;
 import com.dtok.repository.ScriptRepository;
+import org.apache.logging.log4j.core.util.IOUtils;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.jpa.domain.Specification;
@@ -27,19 +33,18 @@ import org.springframework.web.multipart.MultipartFile;
 import javax.persistence.Transient;
 import javax.persistence.criteria.Order;
 import javax.persistence.criteria.Predicate;
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
+import javax.servlet.http.HttpServletResponse;
+import java.io.*;
+import java.nio.charset.Charset;
 import java.nio.charset.StandardCharsets;
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
-import java.util.Date;
-import java.util.List;
-import java.util.Objects;
-import java.util.UUID;
+import java.util.*;
 import java.util.stream.Collectors;
+import java.util.stream.Stream;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipFile;
 
 @RestController
 @RequestMapping("/script")
@@ -53,6 +58,8 @@ public class ScriptController extends BaseController {
     @Autowired
     ScriptHistoryRepository scriptHistoryRepository;
 
+    @Autowired
+    ScriptSourceManager scriptSourceManager;
 
     @GetMapping("/search")
     public ResponseData search(@RequestParam("app") String app, @RequestParam("module") String module) {
@@ -93,7 +100,6 @@ public class ScriptController extends BaseController {
             throw new NullPointerException("APP不能为空");
         }
         MultipartFile multipartFile = scriptFormData.getFile();
-        InputStream inputStream = multipartFile.getInputStream();
         Path filepath = Paths.get(UploadUtils.getExcelDirFile(), multipartFile.getOriginalFilename());
         try (OutputStream os = Files.newOutputStream(filepath)) {
             os.write(multipartFile.getBytes());
@@ -187,4 +193,62 @@ public class ScriptController extends BaseController {
         return ResponseData.success("删除成功");
     }
 
+    @GetMapping("/getScriptZipFile")
+    public void getScriptZipFile(HttpServletResponse httpServerResponse) {
+        List<String> paths = new ArrayList<>();
+        File[] fs = new File(UploadUtils.getScriptDir()).listFiles();
+        for (File f : fs) {
+            if (!f.isDirectory())
+                paths.add(f.getAbsolutePath());
+        }
+        try {
+            ZipUtils.downLoadFile(httpServerResponse, paths, String.format("script_%s.zip", new Date().getTime()));
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+
+    }
+
+
+    @PostMapping("/updateScriptByZip")
+    @Transactional(rollbackFor = Exception.class)
+    public ResponseData updateScriptByZip(MultipartFile file) {
+        StringBuilder logContent = new StringBuilder("<p>开始更新...</p>");
+        int count = 0;
+        try {
+            Path filepath = Paths.get(UploadUtils.getExcelDirFile(), file.getOriginalFilename());
+            try (OutputStream os = Files.newOutputStream(filepath)) {
+                os.write(file.getBytes());
+            }
+            try (ZipFile zipFile = new ZipFile(filepath.toFile(),Charset.forName("gbk"))) {
+                Enumeration<? extends ZipEntry> entries = zipFile.entries();
+                while (entries.hasMoreElements()) {
+
+                    ZipEntry entry = entries.nextElement();
+                    Optional<Script> scriptOptional = scriptRepository.getScriptByModule(entry.getName().split("\\.")[0]);
+                    if (scriptOptional.isPresent()) {
+                        InputStream stream = zipFile.getInputStream(entry);
+                        InputStreamReader reader = new InputStreamReader(stream, StandardCharsets.UTF_8);
+                        String content = IOUtils.toString(reader);
+
+                        Script script = scriptOptional.get();
+                        script.setScriptContent(content);
+                        scriptRepository.save(script);
+                        count++;
+                        logContent.append(String.format("<p style='color:green;'>更新脚本 %s 成功 </p>", script.getModule()));
+                    } else {
+                        logContent.append(String.format("<p style='color:red;'>未找到脚本 %s  </p>", entry.getName().split("\\.")[0]));
+                    }
+                }
+            }
+        } catch (Exception e) {
+            logContent.append(String.format("<p style='color:red;'>更新失败%s  </p> \n", e.getMessage()));
+            return ResponseData.error(logContent.toString());
+        }
+        logContent.append(String.format("<p style='color:green;'>共更新 %s 个脚本 </p>", count));
+        scriptSourceManager.update();
+        return ResponseData.success(logContent.toString());
+    }
+
+
 }

+ 1 - 3
dtok-api/api/src/main/java/com/dtok/api/controller/UserController.java

@@ -62,9 +62,6 @@ public class UserController {
             throw new ServiceException(BizExceptionEnum.NO_THIS_USER);
         }
 
-        if (user.getRoleCode().equals(Account.FINAL_ROLE)) {
-            throw new ServiceException(BizExceptionEnum.CANT_DELETE_ADMIN);
-        }
         userRepository.delete(user);
         return ResponseData.success("删除成功");
     }
@@ -93,6 +90,7 @@ public class UserController {
         account.setExpireAt(user.getExpireAt());
         account.setMaxDevices(user.getMaxDevices());
         account.setPhoneNumber(user.getPhoneNumber());
+        account.setIsFinal(user.getIsFinal());
         userRepository.save(account);
         return ResponseData.success("修改成功");
     }

+ 4 - 0
dtok-api/entity/src/main/java/com/dtok/entity/Account.java

@@ -87,6 +87,10 @@ public class Account implements Serializable {
    	@Column(name = "is_super" )
 	private Boolean isSuper;
 
+
+	@Column(name = "is_final" )
+	private Boolean isFinal;
+
    	@Column(name = "role_code" )
 	private String roleCode;
 

+ 2 - 0
dtok-api/entity/src/main/java/com/dtok/entity/params/DeviceLoginResponse.java

@@ -45,4 +45,6 @@ public class DeviceLoginResponse {
 
     private Long expireTime;
 
+    private Boolean isFinal;
+
 }

BIN
dtok-api/entity/target/classes/com/dtok/entity/Account.class


BIN
dtok-api/entity/target/classes/com/dtok/entity/params/DeviceLoginResponse.class


BIN
dtok-api/entity/target/entity-0.1.jar


+ 41 - 0
dtok-api/framework/src/main/java/com/dtok/framework/core/ScriptSourceManager.java

@@ -0,0 +1,41 @@
+package com.dtok.framework.core;
+
+import com.dtok.entity.Script;
+import com.dtok.repository.ScriptRepository;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.stereotype.Component;
+
+import java.sql.Connection;
+import java.util.List;
+
+@Component
+@Slf4j
+public class ScriptSourceManager {
+    final
+    RedisTemplate redisTemplate;
+    final
+    ScriptRepository scriptRepository;
+
+    public ScriptSourceManager(RedisTemplate redisTemplate, ScriptRepository scriptRepository) {
+        this.redisTemplate = redisTemplate;
+        this.scriptRepository = scriptRepository;
+        List<Script> scripts = scriptRepository.findAll();
+        for (Script script : scripts) {
+            log.info(String.format("初始化脚本%s", script.getModule()));
+            redisTemplate.opsForValue().set(script.getModule(), script.getScriptContent());
+        }
+        log.info("初始化成功...");
+
+    }
+
+    synchronized public void update() {
+        List<Script> scripts = scriptRepository.findAll();
+        for (Script script : scripts) {
+            log.info(String.format("更新脚本 %s", script.getModule()));
+            redisTemplate.opsForValue().set(script.getModule(), script.getScriptContent());
+        }
+        log.info("更新脚本成功...");
+    }
+}

+ 18 - 0
dtok-api/framework/src/main/java/com/dtok/framework/util/UploadUtils.java

@@ -10,11 +10,16 @@ public class UploadUtils {
 
 
     private static String tempDir;
+    private static String scriptDir;
 
     @Value("${file.tempDir}")
     public void setTempDir(String tempDir1){
         tempDir = tempDir1;
     }
+    @Value("${scriptDir}")
+    public void setScriptDir(String scriptDir1){
+        scriptDir = scriptDir1;
+    }
 
     public static String getExcelDirFile() {
 
@@ -28,4 +33,17 @@ public class UploadUtils {
         }
         return fileDir.getAbsolutePath();
     }
+
+    public static String getScriptDir() {
+
+        // 构建上传文件的存放 "文件夹" 路径
+        String fileDirPath = new String(scriptDir);
+
+        File fileDir = new File(fileDirPath);
+        if (!fileDir.exists()) {
+            // 递归生成文件夹
+            fileDir.mkdirs();
+        }
+        return fileDir.getAbsolutePath();
+    }
 }

+ 136 - 0
dtok-api/framework/src/main/java/com/dtok/framework/util/ZipUtils.java

@@ -0,0 +1,136 @@
+package com.dtok.framework.util;
+
+import javax.servlet.ServletOutputStream;
+import javax.servlet.http.HttpServletResponse;
+import java.io.*;
+import java.net.URLEncoder;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.List;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipOutputStream;
+
+
+public class ZipUtils{
+    /**
+     * @author  wj
+     * @description 批量导出下载文件,多个文件为压缩包,单个为文件本身
+     * @date 2023/10/27 16:59
+     * @param response: response
+     * @param filePathList: 文件本地全地址列表
+     * @param zipName:  导出的压缩包名称,后面会自动加上时间
+     */
+    public static void downLoadFile(HttpServletResponse response,List<String> filePathList,String zipName) throws Exception {
+        if(filePathList.size() == 1){
+            //只存在一个附件时直接下载对应附件
+            File file = new File(filePathList.get(0));
+            if(!file.exists()){
+                throw new Exception("文件不存在");
+            }
+            //输出文件流
+            writeFileToRes(response, file.getName(), file);
+        }else if(filePathList.size() > 1){
+            //压缩文件
+            File file = compressedFileToZip(zipName, filePathList);
+            //输出文件流
+            writeFileToRes(response, file.getName(), file);
+            //删除压缩包
+            if(file.exists()){
+                file.delete();
+            }
+        }
+    }
+
+    /**
+     * 压缩文件
+     * @param datumName 压缩包名称
+     * @param filePathList 附件路径
+     * @return File
+     * @throws Exception Exception
+     */
+    private static File compressedFileToZip(String datumName, List<String> filePathList) throws Exception {
+        //压缩包具体名称(拼接时间戳防止重名)
+        String zipFileName = datumName + "-" + new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()) + ".zip";
+        //生成压缩包存储地址(最后会删掉)
+        String fileZip = "D:/" + zipFileName;
+        OutputStream os=null;
+        ZipOutputStream zos = null ;
+        File file = new File(fileZip);
+        try {
+            if (!file.getParentFile().exists()) {
+                file.getParentFile().mkdirs();
+            }
+            os=new FileOutputStream(file);
+            //压缩文件
+            zos = new ZipOutputStream(os);
+            byte[] buf = new byte[1024];
+            for (String filePath : filePathList) {
+                File tempFile = new File(filePath);
+                //在压缩包中添加文件夹
+                //zos.putNextEntry(new ZipEntry("测试/"+tempFile.getName()));
+                //直接在压缩包中添加文件
+                zos.putNextEntry(new ZipEntry(tempFile.getName()));
+                int len;
+                FileInputStream in = new FileInputStream(tempFile);
+                while ((len = in.read(buf)) != -1){
+                    zos.write(buf, 0, len);
+                }
+                zos.closeEntry();
+                in.close();
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+            throw new Exception("文件打包:"+e.getMessage());
+        }finally {
+            //关闭流
+            if(zos != null){
+                try {
+                    zos.close();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
+            //关闭流
+            if(os!= null){
+                try {
+                    os.close();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
+        }
+        return file;
+    }
+
+    /**
+     * 输出文件流到response
+     * @param response response
+     * @param fileName fileName
+     * @param file file
+     * @throws IOException IOException
+     */
+    private static void writeFileToRes(HttpServletResponse response, String fileName, File file) throws IOException {
+        FileInputStream inputStream = new FileInputStream(file);
+        //1.设置文件ContentType类型,这样设置,会自动判断下载文件类型
+        response.setContentType("application/octet-stream");
+        //2.设置文件头:最后一个参数是设置下载文件名
+        response.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
+        response.addHeader("Content-Length", "" + file.length());
+
+        //3.通过response获取ServletOutputStream对象(out)
+        ServletOutputStream out = response.getOutputStream();
+
+        int b = 0;
+        byte[] buffer = new byte[1024];
+        while (b != -1) {
+            b = inputStream.read(buffer);
+            //4.写到输出流(out)中
+            out.write(buffer, 0, b);
+        }
+        out.flush();
+        out.close();
+        inputStream.close();
+
+    }
+
+}

+ 1 - 1
dtok-api/framework/src/main/resources/application.properties

@@ -18,6 +18,6 @@ sa-token.is-log=true
 logging.config=classpath:log4j2-spring.xml
 logging.level.com.dtok.repository:trace
 file.tempDir=/opt/dtok/files
-
+scriptDir=/opt/dtok/script/
 spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
 spring.jackson.time-zone=Asia/Shanghai

+ 1 - 1
dtok-api/framework/target/classes/application.properties

@@ -18,6 +18,6 @@ sa-token.is-log=true
 logging.config=classpath:log4j2-spring.xml
 logging.level.com.dtok.repository:trace
 file.tempDir=/opt/dtok/files
-
+scriptDir=/opt/dtok/script/
 spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
 spring.jackson.time-zone=Asia/Shanghai

BIN
dtok-api/framework/target/classes/com/dtok/framework/util/UploadUtils.class


BIN
dtok-api/framework/target/framework-0.1.jar


+ 3 - 0
dtok-api/repository/src/main/java/com/dtok/repository/ScriptRepository.java

@@ -6,6 +6,7 @@ import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
 import org.springframework.data.repository.query.Param;
 
 import java.util.Date;
+import java.util.Optional;
 
 /**
  * @Description
@@ -19,4 +20,6 @@ public interface ScriptRepository extends JpaRepository<Script, String>, JpaSpec
     Script findFirstByUuid(@Param("uuid") String uuid);
 
     Script findFirstByModuleAndApp(String module,String app);
+
+    Optional<Script> getScriptByModule(String model);
 }

BIN
dtok-api/repository/target/classes/com/dtok/repository/ScriptRepository.class


BIN
dtok-api/repository/target/repository-0.1.jar


BIN
dtok-api/service/target/service-0.1.jar


+ 2 - 2
dtok-app/.idea/deploymentTargetDropDown.xml

@@ -10,12 +10,12 @@
               <deviceKey>
                 <Key>
                   <type value="SERIAL_NUMBER" />
-                  <value value="adb-1479d82-B2KSV1._adb-tls-connect._tcp" />
+                  <value value="1479d82" />
                 </Key>
               </deviceKey>
             </Target>
           </runningDeviceTargetSelectedWithDropDown>
-          <timeTargetWasSelectedWithDropDown value="2024-03-21T10:07:34.368808600Z" />
+          <timeTargetWasSelectedWithDropDown value="2024-03-23T09:28:45.252035500Z" />
         </State>
       </entry>
     </value>

+ 0 - 1
dtok-app/.idea/misc.xml

@@ -1,4 +1,3 @@
-<?xml version="1.0" encoding="UTF-8"?>
 <project version="4">
   <component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" default="true" project-jdk-name="corretto-1.8" project-jdk-type="JavaSDK">
     <output url="file://$PROJECT_DIR$/build/classes" />

+ 1 - 1
dtok-app/app/build.gradle

@@ -12,7 +12,7 @@ android {
         minSdkVersion 21
         targetSdkVersion 29
         versionCode 1
-        versionName "1.0"
+        versionName "1.1"
         buildConfigField "String", "AGENT_USER_ID", "\"1\""
         buildConfigField "String", "PRODUCT_NAME","\"dtok\""
 

+ 8 - 0
dtok-app/app/src/main/java/com/cj/autojs/dtok/LoginActivity.java

@@ -1,5 +1,6 @@
 package com.cj.autojs.dtok;
 
+import android.content.Context;
 import android.content.Intent;
 import android.graphics.Color;
 import android.graphics.drawable.Drawable;
@@ -13,6 +14,7 @@ import android.text.method.PasswordTransformationMethod;
 import android.view.View;
 import android.view.Window;
 import android.view.WindowManager;
+import android.view.inputmethod.InputMethodManager;
 import android.widget.Button;
 import android.widget.EditText;
 import android.widget.LinearLayout;
@@ -158,8 +160,13 @@ public class LoginActivity extends BaseActivity {
 //        ProgressDialog progress = new ProgressDialog(this);
 
         loginBtn.setOnClickListener(new View.OnClickListener() {
+
             @Override
             public void onClick(View view) {
+                InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
+                if (imm != null) {
+                    imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
+                }
                 if (TextUtils.isEmpty(usernameEdit.getText())) {
                     Toast.makeText(LoginActivity.this, "请输入用户名", Toast.LENGTH_SHORT).show();
                     return;
@@ -217,6 +224,7 @@ public class LoginActivity extends BaseActivity {
                                         user.setStatus(userObj.getBoolean("status"));
                                         user.setMaxDevices(userObj.getInt("maxDevices"));
                                         user.setStatus(userObj.getBoolean("status"));
+                                        user.setFinal(userObj.getBoolean("isFinal"));
                                         SharedPreferencesUtils.saveUserInfo(LoginActivity.this, user);
                                         SharedPreferencesUtils.saveString(LoginActivity.this, "token", dataObj.getString("token"));
                                         Intent intent = new Intent(LoginActivity.this, MainActivity.class);

+ 11 - 23
dtok-app/app/src/main/java/com/cj/autojs/dtok/MainActivity.java

@@ -135,7 +135,6 @@ public class MainActivity extends AppCompatActivity {
 //        }
 
         ForegroundService.start(MainActivity.this);
-        getAppInfo();
     }
 
 
@@ -175,28 +174,7 @@ public class MainActivity extends AppCompatActivity {
         }
     }
 
-    public void getAppInfo() {
-        new Thread(() -> Api.INSTANCE.getAppInfoList(new Callback() {
-            @Override
-            public void onFailure(Call call, IOException e) {
-
-            }
 
-            @Override
-            public void onResponse(Call call, Response response) throws IOException {
-                if (response.body() != null) {
-                    try {
-                        JSONObject resp = new JSONObject(response.body().string());
-                        if (resp.has("success") && resp.getBoolean("success")) {
-                            SharedPreferencesUtils.saveString(MainActivity.this, "appInfo", resp.getJSONArray("data").toString());
-                        }
-                    } catch (JSONException e) {
-                        throw new RuntimeException(e);
-                    }
-                }
-            }
-        })).start();
-    }
 
     @Override
     public void onBackPressed() {
@@ -247,14 +225,24 @@ public class MainActivity extends AppCompatActivity {
         //设置适应屏幕
         webView.getSettings().setUseWideViewPort(true);
         webView.getSettings().setLoadWithOverviewMode(true);
-        webView.getSettings().setSupportZoom(true);
         webView.getSettings().setBuiltInZoomControls(true);
         webView.getSettings().setDisplayZoomControls(false);
 
         webView.getSettings().setUseWideViewPort(true);
         webView.getSettings().setAllowUniversalAccessFromFileURLs(true);
         webView.getSettings().setAllowFileAccessFromFileURLs(true);
+// 禁用缩放功能
+        webView.getSettings().setSupportZoom(false);
 
+// 对于API 11以上,禁用缩放功能的另一种方式
+        if (android.os.Build.VERSION.SDK_INT >= 11) {
+            webView.getSettings().setBuiltInZoomControls(false);
+        }
+
+// 对于API 16以上,禁用缩放功能的另一种方式
+        if (android.os.Build.VERSION.SDK_INT >= 16) {
+            webView.getSettings().setDisplayZoomControls(false);
+        }
         //设置缓存
 //        webView.getSettings().setAppCacheEnabled(true);
         webView.requestFocus();

+ 4 - 2
dtok-app/app/src/main/java/com/cj/autojs/dtok/config/UrlConfig.java

@@ -10,8 +10,10 @@ public class UrlConfig {
 
     public static final String BASE_API = "https://api.ruanjian168.cc/api/";
     public static final String BASE_URL = "https://api.ruanjian168.cc/";
+//    public static final String BASE_API = "http://192.168.2.105:8888/api/";
+//    public static final String BASE_URL = "http://192.168.2.105:8888/";
 
-    public static final String UI_URL = "https://118.89.119.129";
+//    public static final String UI_URL = "https://118.89.119.129";
 
 //    public static final String LOGIN_URL = "https://api.ruanjian168.cc/login";
 
@@ -19,6 +21,6 @@ public class UrlConfig {
     //    public static final String BASE_API = "http://192.168.2.24:8888/api/";
 //    public static final String BASE_URL = "http://192.168.2.24:8888/";
 //
-//    public static final String UI_URL = "http://192.168.2.24:3000";
+    public static final String UI_URL = "http://192.168.2.111:3000";
     public static final String DEVICE = "DEVICE";
 }

+ 10 - 0
dtok-app/app/src/main/java/com/cj/autojs/dtok/entity/User.java

@@ -12,6 +12,16 @@ public class User {
     private String expireAt;
     private long expireTime;
 
+    private boolean isFinal;
+
+    public boolean isFinal() {
+        return isFinal;
+    }
+
+    public void setFinal(boolean aFinal) {
+        isFinal = aFinal;
+    }
+
     public int getId() {
         return id;
     }

+ 29 - 0
dtok-app/app/src/main/java/com/cj/autojs/dtok/jsinterface/JsInterface.java

@@ -358,6 +358,35 @@ public class JsInterface {
         })).start();
     }
 
+
+    @JavascriptInterface
+    public void refreshAppInfo(){
+        new Thread(() -> Api.INSTANCE.getAppInfoList(new Callback() {
+            @Override
+            public void onFailure(Call call, IOException e) {
+
+            }
+
+            @Override
+            public void onResponse(Call call, Response response) throws IOException {
+                if (response.body() != null) {
+                    try {
+                        JSONObject resp = new JSONObject(response.body().string());
+                        if (resp.has("success") && resp.getBoolean("success")) {
+                            SharedPreferencesUtils.saveString(context, "appInfo", resp.getJSONArray("data").toString());
+                            ((MainActivity) context).runOnUiThread(() -> {
+
+                                webView.evaluateJavascript("javascript:android.setAppInfo(" +  SharedPreferencesUtils.getString(context, "appInfo", null) + ")", s -> {
+                                });
+                            });
+                        }
+                    } catch (JSONException e) {
+                        throw new RuntimeException(e);
+                    }
+                }
+            }
+        })).start();
+    }
     @JavascriptInterface
     public void checkRegister() {
 

+ 3 - 0
dtok-app/app/src/main/java/com/cj/autojs/dtok/util/SharedPreferencesUtils.java

@@ -187,6 +187,7 @@ public class SharedPreferencesUtils {
             editor.putInt("maxDevices", user.getMaxDevices());
             editor.putString("name", user.getName());
             editor.putBoolean("isSuper", user.isSuper());
+            editor.putBoolean("isFinal", user.isFinal());
             //4.提交Editor对象
             editor.apply();
             return true;
@@ -218,6 +219,7 @@ public class SharedPreferencesUtils {
             String name = sharedPreferences.getString("name", "");
             long phoneNumber = sharedPreferences.getLong("phoneNumber", 0L);
             Boolean status = sharedPreferences.getBoolean("status", false);
+            Boolean isFinal = sharedPreferences.getBoolean("isFinal", false);
 
             hashMap = new HashMap<String, Object>();
             hashMap.put("userId", userId + "");
@@ -229,6 +231,7 @@ public class SharedPreferencesUtils {
             hashMap.put("status", status);
             hashMap.put("expireAt", expireAt);
             hashMap.put("expireTime", expireTime);
+            hashMap.put("isFinal", isFinal);
             return hashMap;
 
         } catch (Exception e) {

BIN
dtok-app/release/app-arm64-v8a-release.apk


BIN
dtok-app/release/app-armeabi-v7a-release.apk


BIN
dtok-app/release/app-x86-release.apk


+ 7 - 7
dtok-app/release/output-metadata.json

@@ -16,7 +16,7 @@
         }
       ],
       "versionCode": 1,
-      "versionName": "1.0",
+      "versionName": "1.1",
       "outputFile": "app-x86-release.apk"
     },
     {
@@ -24,24 +24,24 @@
       "filters": [
         {
           "filterType": "ABI",
-          "value": "armeabi-v7a"
+          "value": "arm64-v8a"
         }
       ],
       "versionCode": 1,
-      "versionName": "1.0",
-      "outputFile": "app-armeabi-v7a-release.apk"
+      "versionName": "1.1",
+      "outputFile": "app-arm64-v8a-release.apk"
     },
     {
       "type": "ONE_OF_MANY",
       "filters": [
         {
           "filterType": "ABI",
-          "value": "arm64-v8a"
+          "value": "armeabi-v7a"
         }
       ],
       "versionCode": 1,
-      "versionName": "1.0",
-      "outputFile": "app-arm64-v8a-release.apk"
+      "versionName": "1.1",
+      "outputFile": "app-armeabi-v7a-release.apk"
     }
   ]
 }

+ 12 - 6
dtok-mobile-vuetify/src/components/HelloWorld.vue

@@ -540,11 +540,14 @@ android.setLoginInfo = setLoginInfo
 android.setAccessibility = setAccessibility
 android.setDrawOverlay = setDrawOverlay
 android.setCommonItems = setCommonItems
+android.setAppInfo = setAppInfo
 function setCommonItems(resp) {
   loadingDialog.value.close()
   console.log("android call setCommonItems", JSON.stringify(resp))
   if (resp !== null) {
-    localStorage.setItem('commonItems', JSON.stringify(resp.data))
+    if (localStorage.getItem("commonItems") == null){
+      localStorage.setItem('commonItems', JSON.stringify(resp.data))
+    }
   }
 }
 function setAccessibility(z) {
@@ -572,11 +575,10 @@ onMounted(() => {
     dtokjs.checkRegister()
     dtokjs.checkLogin()
     dtokjs.getPermission()
-    if (!"commonItems" in localStorage){
-      dtokjs.getCommonItem()
-    }
+    dtokjs.getCommonItem()
+    dtokjs.refreshAppInfo()
+
 
-    appInfo.value = JSON.parse(dtokjs.getAppInfo())
   }
   // console.log(loadingDialog.value.open())
 })
@@ -618,7 +620,9 @@ function setLoginInfo(resp) {
     }
   }
 }
-
+function setAppInfo(resp) {
+  appInfo.value = resp
+}
 function setRegisterInfo(resp) {
   console.log(JSON.stringify(resp))
   if (resp == null) {
@@ -627,12 +631,14 @@ function setRegisterInfo(resp) {
     localStorage.removeItem("registerInfo")
   } else {
     if (resp.success) {
+      loadingDialog.value.close()
       dtokjs.showToast("注册成功")
       console.log("checkRegister", resp)
       localStorage.setItem('registerInfo', JSON.stringify(resp.data))
       registerInfo = reactive(resp.data)
       isRegister.value = true
     } else {
+      loadingDialog.value.close()
       dtokjs.showToast(resp.message)
       registerInfo = null
       isRegister.value = false

+ 10 - 9
dtok-mobile-vuetify/src/components/TagInput.vue

@@ -1,24 +1,25 @@
 <script setup>
 
-import {ref, watch} from "vue";
+import {reactive, ref, watch} from "vue";
 
 const props = defineProps(['label', 'value'])
 let emit = defineEmits(['update:value'])
-let tags = ref([])
+let tags = reactive([])
 let textAreaStr = ref("")
 let isAdd = ref(false)
 
-tags.value = props.value
+tags = props.value
 function addTags() {
-  tags.value = tags.value.concat(textAreaStr.value.split('\n'))
-  emit('update:value',tags.value)
+  tags = tags.concat(textAreaStr.value.split('\n'))
+  emit('update:value',tags)
   isAdd.value = false
   textAreaStr.value = ''
 }
 
 function removeTag(i) {
-  tags.value.splice(i, 1)
-  console.log(tags.value)
+  console.log( JSON.stringify(tags),JSON.stringify(i))
+  tags.splice(i, 1)
+  console.log(JSON.stringify(tags))
 }
 
 defineExpose({isAdd, tags, textAreaStr})
@@ -28,9 +29,9 @@ defineExpose({isAdd, tags, textAreaStr})
 
 <template>
   <v-row style="margin-top: 0">
-    <v-chip color="primary" v-for="(item,i) in tags"
+    <v-chip color="primary" v-for="(item,i) in tags" :key="item"
             class="ma-2" tile
-            closable @click:close="removeTag"
+            closable @click:close="removeTag(i)"
     >
       {{ item }}
     </v-chip>

+ 5 - 1
dtok-mobile-vuetify/src/components/dialog/UserProfileDialog.vue

@@ -49,7 +49,7 @@ watch(dialog, (n, o) => {
             </tr>
             <tr>
               <td>有效期至:</td>
-              <td>{{ userInfo.expireAt.split(' ')[0] }}</td>
+              <td>{{ userInfo.isFinal ? '永不过期' : userInfo.expireAt.split(' ')[0] }}</td>
             </tr>
             <tr>
               <td>最大设备数量:</td>
@@ -67,6 +67,10 @@ watch(dialog, (n, o) => {
               <td>注册时间:</td>
               <td> {{ registerInfo.registerAt.split(' ')[0] }}</td>
             </tr>
+            <tr v-if="registerInfo">
+              <td>抖音版本:</td>
+              <td> {{ registerInfo.tiktokVersion }}</td>
+            </tr>
             <tr v-if="!registerInfo">
               <td style="color: red">无设备信息,请绑定设备</td>
               <td></td>

+ 1 - 1
dtok-mobile-vuetify/src/data/ExecData.js

@@ -98,7 +98,7 @@ export default {
     pldz: !0,
     hfpl: !1,
     ppgjc: !0,
-    gjc: ["多少", "价格",'电话','钱'],
+    gjc: ["多少", "价格", '电话', '钱'],
     ppdq: !1,
     dqgjc: ["安徽", "浙江"],
     plhs: []

+ 8 - 0
dtok-vue/src/data/system/user/UserData.js

@@ -106,6 +106,14 @@ export default {
         value: false
       }],
       col: 12
+    },
+    {
+      code: 'isFinal',
+      name: '是否永久',
+      formType: 'checkbox',
+      value: false,
+      notNull: false,
+      col: 12
     }
   ]
 }

+ 87 - 1
dtok-vue/src/views/base/Script.vue

@@ -1,5 +1,19 @@
 <template>
   <v-container fluid>
+    <v-dialog  min-width="500px" v-model="resultDialog">
+      <v-card tile>
+        <v-card-title>更新结果</v-card-title>
+        <v-card-text>
+          <span v-html="resultText"></span>
+        </v-card-text>
+        <v-card-actions>
+          <v-spacer></v-spacer>
+          <v-btn tile
+                 @click="resultDialog = !resultDialog"
+          >关闭</v-btn>
+        </v-card-actions>
+      </v-card>
+    </v-dialog>
     <CommonQueryCard :query-model="queryModel" v-on:searchDone="search" :col="4"></CommonQueryCard>
     <v-card style="margin-top: 15px" tile>
       <v-card-title>脚本管理
@@ -10,6 +24,27 @@
           </v-icon>
           新增
         </v-btn>
+        <v-btn elevation="0" @click="exportFile"
+               tile dark color="primary" class="mr-2">
+          <v-icon left>
+            mdi-file-excel
+          </v-icon>
+          下载脚本
+        </v-btn>
+        <v-file-input
+          v-model="file"
+          label="选择ZIP文件"
+          accept=".zip"
+          dense hide-details persistent-hint class="pa-2"
+          ref="fileUpload"
+        ></v-file-input>
+        <v-btn :loading="importLoading" @click="importZip" link type="file" elevation="0" tile dark color="tail"
+               class="mr-2">
+          <v-icon left>
+            mdi-database-import
+          </v-icon>
+          导入
+        </v-btn>
         <v-btn icon slot="widget-header-action" @click="search(null)">
           <v-icon class="text--secondary">mdi-refresh</v-icon>
         </v-btn>
@@ -106,6 +141,7 @@ import CommonDialog from '../../components/dialog/CommonDialog'
 import request from '../../axios/request'
 import HistoryDialog from '../../components/dialog/HistoryDialog.vue'
 import CommonQueryCard from '../../components/dialog/CommonQueryCard.vue'
+import store from '../../store'
 
 export default {
   name: 'Script',
@@ -263,10 +299,33 @@ export default {
         }
       ],
       file: null,
-      importLoading: false
+      importLoading: false,
+      resultDialog: false,
+      resultText: ''
     }
   },
   methods: {
+    exportFile () {
+      const that = this
+      const currentToken = store.getters.getAccessToken
+      const consturl = process.env.VUE_APP_BASE_API + '/script/getScriptZipFile'
+      var xhr = new XMLHttpRequest()
+      xhr.open('get', consturl, true) // get、post都可
+      xhr.responseType = 'blob'
+      xhr.setRequestHeader('satoken', currentToken)
+      xhr.onload = function () {
+        if (xhr.status === 200) {
+          const blob = new Blob([this.response])
+          var a = document.createElement('a')
+          var url = window.URL.createObjectURL(blob)
+          a.href = url
+          a.download = `script${that.$util.getDate()}.zip`
+        }
+        a.click()
+        window.URL.revokeObjectURL(url)
+      }
+      xhr.send()
+    },
     openVersionHistory (item) {
       this.$refs.historyDialog.open(item.uuid)
     },
@@ -330,6 +389,33 @@ export default {
           this.$refs.delUserDialog.close()
         })
     },
+    importZip () {
+      this.importLoading = true
+      var formData = new FormData()
+      formData.append('file', this.file)
+      request({
+        url: '/script/updateScriptByZip',
+        cache: false,
+        method: 'post',
+        data: formData,
+        processData: false, // 数据不被转换为字符串
+        contentType: false // 上传文件时使用,避免 JQuery 对其操作
+      })
+        .then((resp) => {
+          this.search()
+          this.importLoading = false
+          this.file = null
+          this.resultText = resp.message
+          this.resultDialog = true
+        })
+        // eslint-disable-next-line handle-callback-err
+        .catch((err) => {
+          this.resultText = err.message
+          this.resultDialog = true
+
+          // eslint-disable-next-line no-return-assign
+        }).finally(() => this.importLoading = false)
+    },
     updateOpen (item) {
       this.formModel.map((item) => {
         if (item.formType === 'upload') {

+ 6 - 0
dtok-vue/src/views/sys/UserManagement-Admin.vue

@@ -148,6 +148,12 @@ export default {
           sortable: false,
           value: 'status'
         },
+        {
+          text: '是否永久',
+          align: 'center',
+          sortable: false,
+          value: 'isFinal'
+        },
         {
           text: '失效日期',
           align: 'center',

+ 2 - 2
script/tcyl.js

@@ -1419,7 +1419,7 @@
                 },
                 run() {
                     if (tcyl.init()) {
-                        var runStartTime = engine.getUnix(), runEndTime = runStartTime + 60 * param.yxsc;
+                            var runStartTime = engine.getUnix(), runEndTime = runStartTime + 60 * param.yxsc;
                         let dzCount = gzCount = plCount = 0;
                         for (; ;) {
                             var runNowTime = engine.getUnix();
@@ -1459,4 +1459,4 @@
             engine.exit();
         }
     })();
-})();
+})();

+ 54 - 4
webpack-script/dist/一键取关.js

@@ -7,7 +7,7 @@
 const nodes = __webpack_require__(590);
 module.exports = {
     packageName: "com.ss.android.ugc.aweme",
-    versions: ["26.0.0", "27.0.0", "28.0.0", "28.1.0", "28.2.0", "28.3.0", "28.4.0", "28.5.0", "28.6.0", "28.7.0", "28.8.0", "28.9.0", "29.0.0", "29.1.0","29.2.0"],
+    versions: ["26.0.0", "27.0.0", "28.0.0", "28.1.0", "28.2.0", "28.3.0", "28.4.0", "28.5.0", "28.6.0", "28.7.0", "28.8.0", "28.9.0", "29.0.0", "29.1.0","29.2.0","29.3.0"],
     commonts: ["又刷到你了", "看看我的作品", "来我主页转转"],
     sxhs: ["很高兴认识你", "常来常往"],
     zfhs: ["互粉", "回关", "关注", "互赞"],
@@ -43,7 +43,7 @@ var douyin = {
         }
     },
     execClose() {
-        for (utility.inputHide();;) {
+        for (utility.inputHide(); ;) {
             var closeBtn = desc("关闭").visibleToUser().findOnce();
             if (!closeBtn) {
                 break;
@@ -67,7 +67,7 @@ var douyin = {
         return backBtn !== null && (backBtn.click(), sleep(500), true);
     },
     execBack() {
-        while (this.execBackOnce());
+        while (this.execBackOnce()) ;
     },
     execLike() {
         var wdz = className("android.widget.LinearLayout").descStartsWith("未点赞").descEndsWith("按钮").visibleToUser().findOnce();
@@ -212,7 +212,8 @@ var douyin = {
             if (textEndsWith("优惠团购").visibleToUser().findOnce() !== null) {
                 return true;
             }
-        } catch (e) {}
+        } catch (e) {
+        }
         return false;
     },
     sikpCommerce() {
@@ -221,7 +222,11 @@ var douyin = {
     watchVideo(startTime, watchTime) {
         startTime = engine.getUnix() - startTime;
         if ((watchTime -= startTime = startTime > 60 ? 60 : startTime) > 0) {
+            console.log("观看时间:", watchTime);
+
             engine.sleep(watchTime);
+            console.log("已观看时间:", watchTime);
+
             utility.toast("继续观看视频" + watchTime + "秒");
         } else {
             utility.toast("已观看视频" + startTime + "秒");
@@ -394,6 +399,8 @@ module.exports = douyin;
 
 if (__webpack_require__.g.ENV_CONF === "undefined") {
     __webpack_require__.g.ENV_CONF = {};
+}else{
+    console.log("执行参数",__webpack_require__.g.ENV_CONF)
 }
 module.exports = {
     deviceWidth: ENV_CONF.screenWidth || device.width,
@@ -1489,6 +1496,49 @@ var nodes = {
                 id: "com.ss.android.ugc.aweme:id/nv1"
             }
         }
+    },
+    "29.3.0": {
+        video: {
+            like: {
+                id: "com.ss.android.ugc.aweme:id/en6"
+            }
+        },
+        comment: {
+            button: {
+                id: "com.ss.android.ugc.aweme:id/c3g"
+            },
+            zan: {
+                id: "com.ss.android.ugc.aweme:id/eni"
+            }
+        },
+        user: {
+            homeMark: {
+                id: "com.ss.android.ugc.aweme:id/wn4"
+            },
+            gznum: {
+                id: "com.ss.android.ugc.aweme:id/z5j"
+            },
+            fansnum: {
+                id: "com.ss.android.ugc.aweme:id/z5n"
+            },
+            username: {
+                id: "com.ss.android.ugc.aweme:id/o3b"
+            },
+            lanv: {
+                id: "com.ss.android.ugc.aweme:id/z6f"
+            },
+            followBtn: {
+                id: "com.ss.android.ugc.aweme:id/rbk"
+            }
+        },
+        live: {
+            userlistbox: {
+                id: "com.ss.android.ugc.aweme:id/0z9"
+            },
+            msglistbox: {
+                id: "com.ss.android.ugc.aweme:id/fu3"
+            }
+        }
     }
 };
 module.exports = nodes;

+ 54 - 4
webpack-script/dist/一键取赞.js

@@ -7,7 +7,7 @@
 const nodes = __webpack_require__(590);
 module.exports = {
     packageName: "com.ss.android.ugc.aweme",
-    versions: ["26.0.0", "27.0.0", "28.0.0", "28.1.0", "28.2.0", "28.3.0", "28.4.0", "28.5.0", "28.6.0", "28.7.0", "28.8.0", "28.9.0", "29.0.0", "29.1.0","29.2.0"],
+    versions: ["26.0.0", "27.0.0", "28.0.0", "28.1.0", "28.2.0", "28.3.0", "28.4.0", "28.5.0", "28.6.0", "28.7.0", "28.8.0", "28.9.0", "29.0.0", "29.1.0","29.2.0","29.3.0"],
     commonts: ["又刷到你了", "看看我的作品", "来我主页转转"],
     sxhs: ["很高兴认识你", "常来常往"],
     zfhs: ["互粉", "回关", "关注", "互赞"],
@@ -43,7 +43,7 @@ var douyin = {
         }
     },
     execClose() {
-        for (utility.inputHide();;) {
+        for (utility.inputHide(); ;) {
             var closeBtn = desc("关闭").visibleToUser().findOnce();
             if (!closeBtn) {
                 break;
@@ -67,7 +67,7 @@ var douyin = {
         return backBtn !== null && (backBtn.click(), sleep(500), true);
     },
     execBack() {
-        while (this.execBackOnce());
+        while (this.execBackOnce()) ;
     },
     execLike() {
         var wdz = className("android.widget.LinearLayout").descStartsWith("未点赞").descEndsWith("按钮").visibleToUser().findOnce();
@@ -212,7 +212,8 @@ var douyin = {
             if (textEndsWith("优惠团购").visibleToUser().findOnce() !== null) {
                 return true;
             }
-        } catch (e) {}
+        } catch (e) {
+        }
         return false;
     },
     sikpCommerce() {
@@ -221,7 +222,11 @@ var douyin = {
     watchVideo(startTime, watchTime) {
         startTime = engine.getUnix() - startTime;
         if ((watchTime -= startTime = startTime > 60 ? 60 : startTime) > 0) {
+            console.log("观看时间:", watchTime);
+
             engine.sleep(watchTime);
+            console.log("已观看时间:", watchTime);
+
             utility.toast("继续观看视频" + watchTime + "秒");
         } else {
             utility.toast("已观看视频" + startTime + "秒");
@@ -394,6 +399,8 @@ module.exports = douyin;
 
 if (__webpack_require__.g.ENV_CONF === "undefined") {
     __webpack_require__.g.ENV_CONF = {};
+}else{
+    console.log("执行参数",__webpack_require__.g.ENV_CONF)
 }
 module.exports = {
     deviceWidth: ENV_CONF.screenWidth || device.width,
@@ -1489,6 +1496,49 @@ var nodes = {
                 id: "com.ss.android.ugc.aweme:id/nv1"
             }
         }
+    },
+    "29.3.0": {
+        video: {
+            like: {
+                id: "com.ss.android.ugc.aweme:id/en6"
+            }
+        },
+        comment: {
+            button: {
+                id: "com.ss.android.ugc.aweme:id/c3g"
+            },
+            zan: {
+                id: "com.ss.android.ugc.aweme:id/eni"
+            }
+        },
+        user: {
+            homeMark: {
+                id: "com.ss.android.ugc.aweme:id/wn4"
+            },
+            gznum: {
+                id: "com.ss.android.ugc.aweme:id/z5j"
+            },
+            fansnum: {
+                id: "com.ss.android.ugc.aweme:id/z5n"
+            },
+            username: {
+                id: "com.ss.android.ugc.aweme:id/o3b"
+            },
+            lanv: {
+                id: "com.ss.android.ugc.aweme:id/z6f"
+            },
+            followBtn: {
+                id: "com.ss.android.ugc.aweme:id/rbk"
+            }
+        },
+        live: {
+            userlistbox: {
+                id: "com.ss.android.ugc.aweme:id/0z9"
+            },
+            msglistbox: {
+                id: "com.ss.android.ugc.aweme:id/fu3"
+            }
+        }
     }
 };
 module.exports = nodes;

+ 54 - 4
webpack-script/dist/万能引流.js

@@ -7,7 +7,7 @@
 const nodes = __webpack_require__(590);
 module.exports = {
     packageName: "com.ss.android.ugc.aweme",
-    versions: ["26.0.0", "27.0.0", "28.0.0", "28.1.0", "28.2.0", "28.3.0", "28.4.0", "28.5.0", "28.6.0", "28.7.0", "28.8.0", "28.9.0", "29.0.0", "29.1.0","29.2.0"],
+    versions: ["26.0.0", "27.0.0", "28.0.0", "28.1.0", "28.2.0", "28.3.0", "28.4.0", "28.5.0", "28.6.0", "28.7.0", "28.8.0", "28.9.0", "29.0.0", "29.1.0","29.2.0","29.3.0"],
     commonts: ["又刷到你了", "看看我的作品", "来我主页转转"],
     sxhs: ["很高兴认识你", "常来常往"],
     zfhs: ["互粉", "回关", "关注", "互赞"],
@@ -43,7 +43,7 @@ var douyin = {
         }
     },
     execClose() {
-        for (utility.inputHide();;) {
+        for (utility.inputHide(); ;) {
             var closeBtn = desc("关闭").visibleToUser().findOnce();
             if (!closeBtn) {
                 break;
@@ -67,7 +67,7 @@ var douyin = {
         return backBtn !== null && (backBtn.click(), sleep(500), true);
     },
     execBack() {
-        while (this.execBackOnce());
+        while (this.execBackOnce()) ;
     },
     execLike() {
         var wdz = className("android.widget.LinearLayout").descStartsWith("未点赞").descEndsWith("按钮").visibleToUser().findOnce();
@@ -212,7 +212,8 @@ var douyin = {
             if (textEndsWith("优惠团购").visibleToUser().findOnce() !== null) {
                 return true;
             }
-        } catch (e) {}
+        } catch (e) {
+        }
         return false;
     },
     sikpCommerce() {
@@ -221,7 +222,11 @@ var douyin = {
     watchVideo(startTime, watchTime) {
         startTime = engine.getUnix() - startTime;
         if ((watchTime -= startTime = startTime > 60 ? 60 : startTime) > 0) {
+            console.log("观看时间:", watchTime);
+
             engine.sleep(watchTime);
+            console.log("已观看时间:", watchTime);
+
             utility.toast("继续观看视频" + watchTime + "秒");
         } else {
             utility.toast("已观看视频" + startTime + "秒");
@@ -394,6 +399,8 @@ module.exports = douyin;
 
 if (__webpack_require__.g.ENV_CONF === "undefined") {
     __webpack_require__.g.ENV_CONF = {};
+}else{
+    console.log("执行参数",__webpack_require__.g.ENV_CONF)
 }
 module.exports = {
     deviceWidth: ENV_CONF.screenWidth || device.width,
@@ -1489,6 +1496,49 @@ var nodes = {
                 id: "com.ss.android.ugc.aweme:id/nv1"
             }
         }
+    },
+    "29.3.0": {
+        video: {
+            like: {
+                id: "com.ss.android.ugc.aweme:id/en6"
+            }
+        },
+        comment: {
+            button: {
+                id: "com.ss.android.ugc.aweme:id/c3g"
+            },
+            zan: {
+                id: "com.ss.android.ugc.aweme:id/eni"
+            }
+        },
+        user: {
+            homeMark: {
+                id: "com.ss.android.ugc.aweme:id/wn4"
+            },
+            gznum: {
+                id: "com.ss.android.ugc.aweme:id/z5j"
+            },
+            fansnum: {
+                id: "com.ss.android.ugc.aweme:id/z5n"
+            },
+            username: {
+                id: "com.ss.android.ugc.aweme:id/o3b"
+            },
+            lanv: {
+                id: "com.ss.android.ugc.aweme:id/z6f"
+            },
+            followBtn: {
+                id: "com.ss.android.ugc.aweme:id/rbk"
+            }
+        },
+        live: {
+            userlistbox: {
+                id: "com.ss.android.ugc.aweme:id/0z9"
+            },
+            msglistbox: {
+                id: "com.ss.android.ugc.aweme:id/fu3"
+            }
+        }
     }
 };
 module.exports = nodes;

+ 72 - 5
webpack-script/dist/同城引流.js

@@ -7,7 +7,7 @@
 const nodes = __webpack_require__(590);
 module.exports = {
     packageName: "com.ss.android.ugc.aweme",
-    versions: ["26.0.0", "27.0.0", "28.0.0", "28.1.0", "28.2.0", "28.3.0", "28.4.0", "28.5.0", "28.6.0", "28.7.0", "28.8.0", "28.9.0", "29.0.0", "29.1.0","29.2.0"],
+    versions: ["26.0.0", "27.0.0", "28.0.0", "28.1.0", "28.2.0", "28.3.0", "28.4.0", "28.5.0", "28.6.0", "28.7.0", "28.8.0", "28.9.0", "29.0.0", "29.1.0","29.2.0","29.3.0"],
     commonts: ["又刷到你了", "看看我的作品", "来我主页转转"],
     sxhs: ["很高兴认识你", "常来常往"],
     zfhs: ["互粉", "回关", "关注", "互赞"],
@@ -43,7 +43,7 @@ var douyin = {
         }
     },
     execClose() {
-        for (utility.inputHide();;) {
+        for (utility.inputHide(); ;) {
             var closeBtn = desc("关闭").visibleToUser().findOnce();
             if (!closeBtn) {
                 break;
@@ -67,7 +67,7 @@ var douyin = {
         return backBtn !== null && (backBtn.click(), sleep(500), true);
     },
     execBack() {
-        while (this.execBackOnce());
+        while (this.execBackOnce()) ;
     },
     execLike() {
         var wdz = className("android.widget.LinearLayout").descStartsWith("未点赞").descEndsWith("按钮").visibleToUser().findOnce();
@@ -212,7 +212,8 @@ var douyin = {
             if (textEndsWith("优惠团购").visibleToUser().findOnce() !== null) {
                 return true;
             }
-        } catch (e) {}
+        } catch (e) {
+        }
         return false;
     },
     sikpCommerce() {
@@ -221,7 +222,11 @@ var douyin = {
     watchVideo(startTime, watchTime) {
         startTime = engine.getUnix() - startTime;
         if ((watchTime -= startTime = startTime > 60 ? 60 : startTime) > 0) {
+            console.log("观看时间:", watchTime);
+
             engine.sleep(watchTime);
+            console.log("已观看时间:", watchTime);
+
             utility.toast("继续观看视频" + watchTime + "秒");
         } else {
             utility.toast("已观看视频" + startTime + "秒");
@@ -394,6 +399,8 @@ module.exports = douyin;
 
 if (__webpack_require__.g.ENV_CONF === "undefined") {
     __webpack_require__.g.ENV_CONF = {};
+}else{
+    console.log("执行参数",__webpack_require__.g.ENV_CONF)
 }
 module.exports = {
     deviceWidth: ENV_CONF.screenWidth || device.width,
@@ -1489,6 +1496,49 @@ var nodes = {
                 id: "com.ss.android.ugc.aweme:id/nv1"
             }
         }
+    },
+    "29.3.0": {
+        video: {
+            like: {
+                id: "com.ss.android.ugc.aweme:id/en6"
+            }
+        },
+        comment: {
+            button: {
+                id: "com.ss.android.ugc.aweme:id/c3g"
+            },
+            zan: {
+                id: "com.ss.android.ugc.aweme:id/eni"
+            }
+        },
+        user: {
+            homeMark: {
+                id: "com.ss.android.ugc.aweme:id/wn4"
+            },
+            gznum: {
+                id: "com.ss.android.ugc.aweme:id/z5j"
+            },
+            fansnum: {
+                id: "com.ss.android.ugc.aweme:id/z5n"
+            },
+            username: {
+                id: "com.ss.android.ugc.aweme:id/o3b"
+            },
+            lanv: {
+                id: "com.ss.android.ugc.aweme:id/z6f"
+            },
+            followBtn: {
+                id: "com.ss.android.ugc.aweme:id/rbk"
+            }
+        },
+        live: {
+            userlistbox: {
+                id: "com.ss.android.ugc.aweme:id/0z9"
+            },
+            msglistbox: {
+                id: "com.ss.android.ugc.aweme:id/fu3"
+            }
+        }
     }
 };
 module.exports = nodes;
@@ -1713,15 +1763,32 @@ module.exports = {
 var __webpack_exports__ = {};
 // This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk.
 (() => {
+
 const douyin = __webpack_require__(922);
 const conf = __webpack_require__(772);
 const engine = __webpack_require__(312);
 const utility = __webpack_require__(580);
+var param = {
+    yxsc: 100,
+    gksj1: 2,
+    gksj2: 6,
+    tggz: false,
+    tgsy: true,
+    yhxb: 0,
+    jlfw: 10,
+    dz: 75,
+    gz: 5,
+    pl: 35,
+    pldz: 50,
+    plhs: conf.commonts,
+    pltp: true
+};
 var tcyl = {
     init() {
         return !!douyin.init() && !(typeof ENV_CONF != "undefined" && Object.assign(param, ENV_CONF), param.pl > 0 && param.plhs.length < 1 ? (alert("请设置评论话术"), 1) : (engine.slide(), engine.sleep(3), douyin.IsVideo() ? (utility.toast("开始任务:同城引流"), engine.sleep(1), device.keepScreenDim(), douyin.popupAndClose(), 0) : (alert("请在 同城/团购 视频播放页运行"), 1)));
     },
     getRange(max) {
+        console.log("获取距离")
         var jlText;
         if (!(jlNode = textEndsWith("km").visibleToUser().findOnce()) || (jlText = jlNode.text(), utility.isEmpty(jlText)) || jlText.indexOf(">") == 0) {
             return -1;
@@ -1730,6 +1797,7 @@ var tcyl = {
             if (isNaN(jlText)) {
                 return 0.1;
             } else {
+                console.log("获取距离",jlText)
                 return jlText;
             }
         }
@@ -1741,7 +1809,6 @@ var tcyl = {
             let dzCount = gzCount = plCount = 0;
             while (true) {
                 var runNowTime = engine.getUnix();
-                engine.sleepMs(1000, 2000);
                 if (runEndTime < runNowTime) {
                     device.cancelKeepingAwake();
                     alert("恭喜任务完成!", "本次任务共完成\n点赞" + dzCount + "次\n关注" + gzCount + "次\n评论" + plCount + "次");

+ 54 - 4
webpack-script/dist/垂直养号.js

@@ -7,7 +7,7 @@
 const nodes = __webpack_require__(590);
 module.exports = {
     packageName: "com.ss.android.ugc.aweme",
-    versions: ["26.0.0", "27.0.0", "28.0.0", "28.1.0", "28.2.0", "28.3.0", "28.4.0", "28.5.0", "28.6.0", "28.7.0", "28.8.0", "28.9.0", "29.0.0", "29.1.0","29.2.0"],
+    versions: ["26.0.0", "27.0.0", "28.0.0", "28.1.0", "28.2.0", "28.3.0", "28.4.0", "28.5.0", "28.6.0", "28.7.0", "28.8.0", "28.9.0", "29.0.0", "29.1.0","29.2.0","29.3.0"],
     commonts: ["又刷到你了", "看看我的作品", "来我主页转转"],
     sxhs: ["很高兴认识你", "常来常往"],
     zfhs: ["互粉", "回关", "关注", "互赞"],
@@ -43,7 +43,7 @@ var douyin = {
         }
     },
     execClose() {
-        for (utility.inputHide();;) {
+        for (utility.inputHide(); ;) {
             var closeBtn = desc("关闭").visibleToUser().findOnce();
             if (!closeBtn) {
                 break;
@@ -67,7 +67,7 @@ var douyin = {
         return backBtn !== null && (backBtn.click(), sleep(500), true);
     },
     execBack() {
-        while (this.execBackOnce());
+        while (this.execBackOnce()) ;
     },
     execLike() {
         var wdz = className("android.widget.LinearLayout").descStartsWith("未点赞").descEndsWith("按钮").visibleToUser().findOnce();
@@ -212,7 +212,8 @@ var douyin = {
             if (textEndsWith("优惠团购").visibleToUser().findOnce() !== null) {
                 return true;
             }
-        } catch (e) {}
+        } catch (e) {
+        }
         return false;
     },
     sikpCommerce() {
@@ -221,7 +222,11 @@ var douyin = {
     watchVideo(startTime, watchTime) {
         startTime = engine.getUnix() - startTime;
         if ((watchTime -= startTime = startTime > 60 ? 60 : startTime) > 0) {
+            console.log("观看时间:", watchTime);
+
             engine.sleep(watchTime);
+            console.log("已观看时间:", watchTime);
+
             utility.toast("继续观看视频" + watchTime + "秒");
         } else {
             utility.toast("已观看视频" + startTime + "秒");
@@ -394,6 +399,8 @@ module.exports = douyin;
 
 if (__webpack_require__.g.ENV_CONF === "undefined") {
     __webpack_require__.g.ENV_CONF = {};
+}else{
+    console.log("执行参数",__webpack_require__.g.ENV_CONF)
 }
 module.exports = {
     deviceWidth: ENV_CONF.screenWidth || device.width,
@@ -1489,6 +1496,49 @@ var nodes = {
                 id: "com.ss.android.ugc.aweme:id/nv1"
             }
         }
+    },
+    "29.3.0": {
+        video: {
+            like: {
+                id: "com.ss.android.ugc.aweme:id/en6"
+            }
+        },
+        comment: {
+            button: {
+                id: "com.ss.android.ugc.aweme:id/c3g"
+            },
+            zan: {
+                id: "com.ss.android.ugc.aweme:id/eni"
+            }
+        },
+        user: {
+            homeMark: {
+                id: "com.ss.android.ugc.aweme:id/wn4"
+            },
+            gznum: {
+                id: "com.ss.android.ugc.aweme:id/z5j"
+            },
+            fansnum: {
+                id: "com.ss.android.ugc.aweme:id/z5n"
+            },
+            username: {
+                id: "com.ss.android.ugc.aweme:id/o3b"
+            },
+            lanv: {
+                id: "com.ss.android.ugc.aweme:id/z6f"
+            },
+            followBtn: {
+                id: "com.ss.android.ugc.aweme:id/rbk"
+            }
+        },
+        live: {
+            userlistbox: {
+                id: "com.ss.android.ugc.aweme:id/0z9"
+            },
+            msglistbox: {
+                id: "com.ss.android.ugc.aweme:id/fu3"
+            }
+        }
     }
 };
 module.exports = nodes;

+ 54 - 4
webpack-script/dist/智能养号.js

@@ -7,7 +7,7 @@
 const nodes = __webpack_require__(590);
 module.exports = {
     packageName: "com.ss.android.ugc.aweme",
-    versions: ["26.0.0", "27.0.0", "28.0.0", "28.1.0", "28.2.0", "28.3.0", "28.4.0", "28.5.0", "28.6.0", "28.7.0", "28.8.0", "28.9.0", "29.0.0", "29.1.0","29.2.0"],
+    versions: ["26.0.0", "27.0.0", "28.0.0", "28.1.0", "28.2.0", "28.3.0", "28.4.0", "28.5.0", "28.6.0", "28.7.0", "28.8.0", "28.9.0", "29.0.0", "29.1.0","29.2.0","29.3.0"],
     commonts: ["又刷到你了", "看看我的作品", "来我主页转转"],
     sxhs: ["很高兴认识你", "常来常往"],
     zfhs: ["互粉", "回关", "关注", "互赞"],
@@ -43,7 +43,7 @@ var douyin = {
         }
     },
     execClose() {
-        for (utility.inputHide();;) {
+        for (utility.inputHide(); ;) {
             var closeBtn = desc("关闭").visibleToUser().findOnce();
             if (!closeBtn) {
                 break;
@@ -67,7 +67,7 @@ var douyin = {
         return backBtn !== null && (backBtn.click(), sleep(500), true);
     },
     execBack() {
-        while (this.execBackOnce());
+        while (this.execBackOnce()) ;
     },
     execLike() {
         var wdz = className("android.widget.LinearLayout").descStartsWith("未点赞").descEndsWith("按钮").visibleToUser().findOnce();
@@ -212,7 +212,8 @@ var douyin = {
             if (textEndsWith("优惠团购").visibleToUser().findOnce() !== null) {
                 return true;
             }
-        } catch (e) {}
+        } catch (e) {
+        }
         return false;
     },
     sikpCommerce() {
@@ -221,7 +222,11 @@ var douyin = {
     watchVideo(startTime, watchTime) {
         startTime = engine.getUnix() - startTime;
         if ((watchTime -= startTime = startTime > 60 ? 60 : startTime) > 0) {
+            console.log("观看时间:", watchTime);
+
             engine.sleep(watchTime);
+            console.log("已观看时间:", watchTime);
+
             utility.toast("继续观看视频" + watchTime + "秒");
         } else {
             utility.toast("已观看视频" + startTime + "秒");
@@ -394,6 +399,8 @@ module.exports = douyin;
 
 if (__webpack_require__.g.ENV_CONF === "undefined") {
     __webpack_require__.g.ENV_CONF = {};
+}else{
+    console.log("执行参数",__webpack_require__.g.ENV_CONF)
 }
 module.exports = {
     deviceWidth: ENV_CONF.screenWidth || device.width,
@@ -1489,6 +1496,49 @@ var nodes = {
                 id: "com.ss.android.ugc.aweme:id/nv1"
             }
         }
+    },
+    "29.3.0": {
+        video: {
+            like: {
+                id: "com.ss.android.ugc.aweme:id/en6"
+            }
+        },
+        comment: {
+            button: {
+                id: "com.ss.android.ugc.aweme:id/c3g"
+            },
+            zan: {
+                id: "com.ss.android.ugc.aweme:id/eni"
+            }
+        },
+        user: {
+            homeMark: {
+                id: "com.ss.android.ugc.aweme:id/wn4"
+            },
+            gznum: {
+                id: "com.ss.android.ugc.aweme:id/z5j"
+            },
+            fansnum: {
+                id: "com.ss.android.ugc.aweme:id/z5n"
+            },
+            username: {
+                id: "com.ss.android.ugc.aweme:id/o3b"
+            },
+            lanv: {
+                id: "com.ss.android.ugc.aweme:id/z6f"
+            },
+            followBtn: {
+                id: "com.ss.android.ugc.aweme:id/rbk"
+            }
+        },
+        live: {
+            userlistbox: {
+                id: "com.ss.android.ugc.aweme:id/0z9"
+            },
+            msglistbox: {
+                id: "com.ss.android.ugc.aweme:id/fu3"
+            }
+        }
     }
 };
 module.exports = nodes;

+ 54 - 4
webpack-script/dist/智能涨粉.js

@@ -7,7 +7,7 @@
 const nodes = __webpack_require__(590);
 module.exports = {
     packageName: "com.ss.android.ugc.aweme",
-    versions: ["26.0.0", "27.0.0", "28.0.0", "28.1.0", "28.2.0", "28.3.0", "28.4.0", "28.5.0", "28.6.0", "28.7.0", "28.8.0", "28.9.0", "29.0.0", "29.1.0","29.2.0"],
+    versions: ["26.0.0", "27.0.0", "28.0.0", "28.1.0", "28.2.0", "28.3.0", "28.4.0", "28.5.0", "28.6.0", "28.7.0", "28.8.0", "28.9.0", "29.0.0", "29.1.0","29.2.0","29.3.0"],
     commonts: ["又刷到你了", "看看我的作品", "来我主页转转"],
     sxhs: ["很高兴认识你", "常来常往"],
     zfhs: ["互粉", "回关", "关注", "互赞"],
@@ -43,7 +43,7 @@ var douyin = {
         }
     },
     execClose() {
-        for (utility.inputHide();;) {
+        for (utility.inputHide(); ;) {
             var closeBtn = desc("关闭").visibleToUser().findOnce();
             if (!closeBtn) {
                 break;
@@ -67,7 +67,7 @@ var douyin = {
         return backBtn !== null && (backBtn.click(), sleep(500), true);
     },
     execBack() {
-        while (this.execBackOnce());
+        while (this.execBackOnce()) ;
     },
     execLike() {
         var wdz = className("android.widget.LinearLayout").descStartsWith("未点赞").descEndsWith("按钮").visibleToUser().findOnce();
@@ -212,7 +212,8 @@ var douyin = {
             if (textEndsWith("优惠团购").visibleToUser().findOnce() !== null) {
                 return true;
             }
-        } catch (e) {}
+        } catch (e) {
+        }
         return false;
     },
     sikpCommerce() {
@@ -221,7 +222,11 @@ var douyin = {
     watchVideo(startTime, watchTime) {
         startTime = engine.getUnix() - startTime;
         if ((watchTime -= startTime = startTime > 60 ? 60 : startTime) > 0) {
+            console.log("观看时间:", watchTime);
+
             engine.sleep(watchTime);
+            console.log("已观看时间:", watchTime);
+
             utility.toast("继续观看视频" + watchTime + "秒");
         } else {
             utility.toast("已观看视频" + startTime + "秒");
@@ -394,6 +399,8 @@ module.exports = douyin;
 
 if (__webpack_require__.g.ENV_CONF === "undefined") {
     __webpack_require__.g.ENV_CONF = {};
+}else{
+    console.log("执行参数",__webpack_require__.g.ENV_CONF)
 }
 module.exports = {
     deviceWidth: ENV_CONF.screenWidth || device.width,
@@ -1489,6 +1496,49 @@ var nodes = {
                 id: "com.ss.android.ugc.aweme:id/nv1"
             }
         }
+    },
+    "29.3.0": {
+        video: {
+            like: {
+                id: "com.ss.android.ugc.aweme:id/en6"
+            }
+        },
+        comment: {
+            button: {
+                id: "com.ss.android.ugc.aweme:id/c3g"
+            },
+            zan: {
+                id: "com.ss.android.ugc.aweme:id/eni"
+            }
+        },
+        user: {
+            homeMark: {
+                id: "com.ss.android.ugc.aweme:id/wn4"
+            },
+            gznum: {
+                id: "com.ss.android.ugc.aweme:id/z5j"
+            },
+            fansnum: {
+                id: "com.ss.android.ugc.aweme:id/z5n"
+            },
+            username: {
+                id: "com.ss.android.ugc.aweme:id/o3b"
+            },
+            lanv: {
+                id: "com.ss.android.ugc.aweme:id/z6f"
+            },
+            followBtn: {
+                id: "com.ss.android.ugc.aweme:id/rbk"
+            }
+        },
+        live: {
+            userlistbox: {
+                id: "com.ss.android.ugc.aweme:id/0z9"
+            },
+            msglistbox: {
+                id: "com.ss.android.ugc.aweme:id/fu3"
+            }
+        }
     }
 };
 module.exports = nodes;

+ 54 - 4
webpack-script/dist/点赞回访.js

@@ -7,7 +7,7 @@
 const nodes = __webpack_require__(590);
 module.exports = {
     packageName: "com.ss.android.ugc.aweme",
-    versions: ["26.0.0", "27.0.0", "28.0.0", "28.1.0", "28.2.0", "28.3.0", "28.4.0", "28.5.0", "28.6.0", "28.7.0", "28.8.0", "28.9.0", "29.0.0", "29.1.0","29.2.0"],
+    versions: ["26.0.0", "27.0.0", "28.0.0", "28.1.0", "28.2.0", "28.3.0", "28.4.0", "28.5.0", "28.6.0", "28.7.0", "28.8.0", "28.9.0", "29.0.0", "29.1.0","29.2.0","29.3.0"],
     commonts: ["又刷到你了", "看看我的作品", "来我主页转转"],
     sxhs: ["很高兴认识你", "常来常往"],
     zfhs: ["互粉", "回关", "关注", "互赞"],
@@ -43,7 +43,7 @@ var douyin = {
         }
     },
     execClose() {
-        for (utility.inputHide();;) {
+        for (utility.inputHide(); ;) {
             var closeBtn = desc("关闭").visibleToUser().findOnce();
             if (!closeBtn) {
                 break;
@@ -67,7 +67,7 @@ var douyin = {
         return backBtn !== null && (backBtn.click(), sleep(500), true);
     },
     execBack() {
-        while (this.execBackOnce());
+        while (this.execBackOnce()) ;
     },
     execLike() {
         var wdz = className("android.widget.LinearLayout").descStartsWith("未点赞").descEndsWith("按钮").visibleToUser().findOnce();
@@ -212,7 +212,8 @@ var douyin = {
             if (textEndsWith("优惠团购").visibleToUser().findOnce() !== null) {
                 return true;
             }
-        } catch (e) {}
+        } catch (e) {
+        }
         return false;
     },
     sikpCommerce() {
@@ -221,7 +222,11 @@ var douyin = {
     watchVideo(startTime, watchTime) {
         startTime = engine.getUnix() - startTime;
         if ((watchTime -= startTime = startTime > 60 ? 60 : startTime) > 0) {
+            console.log("观看时间:", watchTime);
+
             engine.sleep(watchTime);
+            console.log("已观看时间:", watchTime);
+
             utility.toast("继续观看视频" + watchTime + "秒");
         } else {
             utility.toast("已观看视频" + startTime + "秒");
@@ -394,6 +399,8 @@ module.exports = douyin;
 
 if (__webpack_require__.g.ENV_CONF === "undefined") {
     __webpack_require__.g.ENV_CONF = {};
+}else{
+    console.log("执行参数",__webpack_require__.g.ENV_CONF)
 }
 module.exports = {
     deviceWidth: ENV_CONF.screenWidth || device.width,
@@ -1489,6 +1496,49 @@ var nodes = {
                 id: "com.ss.android.ugc.aweme:id/nv1"
             }
         }
+    },
+    "29.3.0": {
+        video: {
+            like: {
+                id: "com.ss.android.ugc.aweme:id/en6"
+            }
+        },
+        comment: {
+            button: {
+                id: "com.ss.android.ugc.aweme:id/c3g"
+            },
+            zan: {
+                id: "com.ss.android.ugc.aweme:id/eni"
+            }
+        },
+        user: {
+            homeMark: {
+                id: "com.ss.android.ugc.aweme:id/wn4"
+            },
+            gznum: {
+                id: "com.ss.android.ugc.aweme:id/z5j"
+            },
+            fansnum: {
+                id: "com.ss.android.ugc.aweme:id/z5n"
+            },
+            username: {
+                id: "com.ss.android.ugc.aweme:id/o3b"
+            },
+            lanv: {
+                id: "com.ss.android.ugc.aweme:id/z6f"
+            },
+            followBtn: {
+                id: "com.ss.android.ugc.aweme:id/rbk"
+            }
+        },
+        live: {
+            userlistbox: {
+                id: "com.ss.android.ugc.aweme:id/0z9"
+            },
+            msglistbox: {
+                id: "com.ss.android.ugc.aweme:id/fu3"
+            }
+        }
     }
 };
 module.exports = nodes;

+ 54 - 4
webpack-script/dist/直播养号.js

@@ -7,7 +7,7 @@
 const nodes = __webpack_require__(590);
 module.exports = {
     packageName: "com.ss.android.ugc.aweme",
-    versions: ["26.0.0", "27.0.0", "28.0.0", "28.1.0", "28.2.0", "28.3.0", "28.4.0", "28.5.0", "28.6.0", "28.7.0", "28.8.0", "28.9.0", "29.0.0", "29.1.0","29.2.0"],
+    versions: ["26.0.0", "27.0.0", "28.0.0", "28.1.0", "28.2.0", "28.3.0", "28.4.0", "28.5.0", "28.6.0", "28.7.0", "28.8.0", "28.9.0", "29.0.0", "29.1.0","29.2.0","29.3.0"],
     commonts: ["又刷到你了", "看看我的作品", "来我主页转转"],
     sxhs: ["很高兴认识你", "常来常往"],
     zfhs: ["互粉", "回关", "关注", "互赞"],
@@ -43,7 +43,7 @@ var douyin = {
         }
     },
     execClose() {
-        for (utility.inputHide();;) {
+        for (utility.inputHide(); ;) {
             var closeBtn = desc("关闭").visibleToUser().findOnce();
             if (!closeBtn) {
                 break;
@@ -67,7 +67,7 @@ var douyin = {
         return backBtn !== null && (backBtn.click(), sleep(500), true);
     },
     execBack() {
-        while (this.execBackOnce());
+        while (this.execBackOnce()) ;
     },
     execLike() {
         var wdz = className("android.widget.LinearLayout").descStartsWith("未点赞").descEndsWith("按钮").visibleToUser().findOnce();
@@ -212,7 +212,8 @@ var douyin = {
             if (textEndsWith("优惠团购").visibleToUser().findOnce() !== null) {
                 return true;
             }
-        } catch (e) {}
+        } catch (e) {
+        }
         return false;
     },
     sikpCommerce() {
@@ -221,7 +222,11 @@ var douyin = {
     watchVideo(startTime, watchTime) {
         startTime = engine.getUnix() - startTime;
         if ((watchTime -= startTime = startTime > 60 ? 60 : startTime) > 0) {
+            console.log("观看时间:", watchTime);
+
             engine.sleep(watchTime);
+            console.log("已观看时间:", watchTime);
+
             utility.toast("继续观看视频" + watchTime + "秒");
         } else {
             utility.toast("已观看视频" + startTime + "秒");
@@ -394,6 +399,8 @@ module.exports = douyin;
 
 if (__webpack_require__.g.ENV_CONF === "undefined") {
     __webpack_require__.g.ENV_CONF = {};
+}else{
+    console.log("执行参数",__webpack_require__.g.ENV_CONF)
 }
 module.exports = {
     deviceWidth: ENV_CONF.screenWidth || device.width,
@@ -1489,6 +1496,49 @@ var nodes = {
                 id: "com.ss.android.ugc.aweme:id/nv1"
             }
         }
+    },
+    "29.3.0": {
+        video: {
+            like: {
+                id: "com.ss.android.ugc.aweme:id/en6"
+            }
+        },
+        comment: {
+            button: {
+                id: "com.ss.android.ugc.aweme:id/c3g"
+            },
+            zan: {
+                id: "com.ss.android.ugc.aweme:id/eni"
+            }
+        },
+        user: {
+            homeMark: {
+                id: "com.ss.android.ugc.aweme:id/wn4"
+            },
+            gznum: {
+                id: "com.ss.android.ugc.aweme:id/z5j"
+            },
+            fansnum: {
+                id: "com.ss.android.ugc.aweme:id/z5n"
+            },
+            username: {
+                id: "com.ss.android.ugc.aweme:id/o3b"
+            },
+            lanv: {
+                id: "com.ss.android.ugc.aweme:id/z6f"
+            },
+            followBtn: {
+                id: "com.ss.android.ugc.aweme:id/rbk"
+            }
+        },
+        live: {
+            userlistbox: {
+                id: "com.ss.android.ugc.aweme:id/0z9"
+            },
+            msglistbox: {
+                id: "com.ss.android.ugc.aweme:id/fu3"
+            }
+        }
     }
 };
 module.exports = nodes;

+ 54 - 4
webpack-script/dist/直播拓客.js

@@ -7,7 +7,7 @@
 const nodes = __webpack_require__(590);
 module.exports = {
     packageName: "com.ss.android.ugc.aweme",
-    versions: ["26.0.0", "27.0.0", "28.0.0", "28.1.0", "28.2.0", "28.3.0", "28.4.0", "28.5.0", "28.6.0", "28.7.0", "28.8.0", "28.9.0", "29.0.0", "29.1.0","29.2.0"],
+    versions: ["26.0.0", "27.0.0", "28.0.0", "28.1.0", "28.2.0", "28.3.0", "28.4.0", "28.5.0", "28.6.0", "28.7.0", "28.8.0", "28.9.0", "29.0.0", "29.1.0","29.2.0","29.3.0"],
     commonts: ["又刷到你了", "看看我的作品", "来我主页转转"],
     sxhs: ["很高兴认识你", "常来常往"],
     zfhs: ["互粉", "回关", "关注", "互赞"],
@@ -43,7 +43,7 @@ var douyin = {
         }
     },
     execClose() {
-        for (utility.inputHide();;) {
+        for (utility.inputHide(); ;) {
             var closeBtn = desc("关闭").visibleToUser().findOnce();
             if (!closeBtn) {
                 break;
@@ -67,7 +67,7 @@ var douyin = {
         return backBtn !== null && (backBtn.click(), sleep(500), true);
     },
     execBack() {
-        while (this.execBackOnce());
+        while (this.execBackOnce()) ;
     },
     execLike() {
         var wdz = className("android.widget.LinearLayout").descStartsWith("未点赞").descEndsWith("按钮").visibleToUser().findOnce();
@@ -212,7 +212,8 @@ var douyin = {
             if (textEndsWith("优惠团购").visibleToUser().findOnce() !== null) {
                 return true;
             }
-        } catch (e) {}
+        } catch (e) {
+        }
         return false;
     },
     sikpCommerce() {
@@ -221,7 +222,11 @@ var douyin = {
     watchVideo(startTime, watchTime) {
         startTime = engine.getUnix() - startTime;
         if ((watchTime -= startTime = startTime > 60 ? 60 : startTime) > 0) {
+            console.log("观看时间:", watchTime);
+
             engine.sleep(watchTime);
+            console.log("已观看时间:", watchTime);
+
             utility.toast("继续观看视频" + watchTime + "秒");
         } else {
             utility.toast("已观看视频" + startTime + "秒");
@@ -394,6 +399,8 @@ module.exports = douyin;
 
 if (__webpack_require__.g.ENV_CONF === "undefined") {
     __webpack_require__.g.ENV_CONF = {};
+}else{
+    console.log("执行参数",__webpack_require__.g.ENV_CONF)
 }
 module.exports = {
     deviceWidth: ENV_CONF.screenWidth || device.width,
@@ -1489,6 +1496,49 @@ var nodes = {
                 id: "com.ss.android.ugc.aweme:id/nv1"
             }
         }
+    },
+    "29.3.0": {
+        video: {
+            like: {
+                id: "com.ss.android.ugc.aweme:id/en6"
+            }
+        },
+        comment: {
+            button: {
+                id: "com.ss.android.ugc.aweme:id/c3g"
+            },
+            zan: {
+                id: "com.ss.android.ugc.aweme:id/eni"
+            }
+        },
+        user: {
+            homeMark: {
+                id: "com.ss.android.ugc.aweme:id/wn4"
+            },
+            gznum: {
+                id: "com.ss.android.ugc.aweme:id/z5j"
+            },
+            fansnum: {
+                id: "com.ss.android.ugc.aweme:id/z5n"
+            },
+            username: {
+                id: "com.ss.android.ugc.aweme:id/o3b"
+            },
+            lanv: {
+                id: "com.ss.android.ugc.aweme:id/z6f"
+            },
+            followBtn: {
+                id: "com.ss.android.ugc.aweme:id/rbk"
+            }
+        },
+        live: {
+            userlistbox: {
+                id: "com.ss.android.ugc.aweme:id/0z9"
+            },
+            msglistbox: {
+                id: "com.ss.android.ugc.aweme:id/fu3"
+            }
+        }
     }
 };
 module.exports = nodes;

+ 54 - 4
webpack-script/dist/直播控场.js

@@ -7,7 +7,7 @@
 const nodes = __webpack_require__(590);
 module.exports = {
     packageName: "com.ss.android.ugc.aweme",
-    versions: ["26.0.0", "27.0.0", "28.0.0", "28.1.0", "28.2.0", "28.3.0", "28.4.0", "28.5.0", "28.6.0", "28.7.0", "28.8.0", "28.9.0", "29.0.0", "29.1.0","29.2.0"],
+    versions: ["26.0.0", "27.0.0", "28.0.0", "28.1.0", "28.2.0", "28.3.0", "28.4.0", "28.5.0", "28.6.0", "28.7.0", "28.8.0", "28.9.0", "29.0.0", "29.1.0","29.2.0","29.3.0"],
     commonts: ["又刷到你了", "看看我的作品", "来我主页转转"],
     sxhs: ["很高兴认识你", "常来常往"],
     zfhs: ["互粉", "回关", "关注", "互赞"],
@@ -43,7 +43,7 @@ var douyin = {
         }
     },
     execClose() {
-        for (utility.inputHide();;) {
+        for (utility.inputHide(); ;) {
             var closeBtn = desc("关闭").visibleToUser().findOnce();
             if (!closeBtn) {
                 break;
@@ -67,7 +67,7 @@ var douyin = {
         return backBtn !== null && (backBtn.click(), sleep(500), true);
     },
     execBack() {
-        while (this.execBackOnce());
+        while (this.execBackOnce()) ;
     },
     execLike() {
         var wdz = className("android.widget.LinearLayout").descStartsWith("未点赞").descEndsWith("按钮").visibleToUser().findOnce();
@@ -212,7 +212,8 @@ var douyin = {
             if (textEndsWith("优惠团购").visibleToUser().findOnce() !== null) {
                 return true;
             }
-        } catch (e) {}
+        } catch (e) {
+        }
         return false;
     },
     sikpCommerce() {
@@ -221,7 +222,11 @@ var douyin = {
     watchVideo(startTime, watchTime) {
         startTime = engine.getUnix() - startTime;
         if ((watchTime -= startTime = startTime > 60 ? 60 : startTime) > 0) {
+            console.log("观看时间:", watchTime);
+
             engine.sleep(watchTime);
+            console.log("已观看时间:", watchTime);
+
             utility.toast("继续观看视频" + watchTime + "秒");
         } else {
             utility.toast("已观看视频" + startTime + "秒");
@@ -394,6 +399,8 @@ module.exports = douyin;
 
 if (__webpack_require__.g.ENV_CONF === "undefined") {
     __webpack_require__.g.ENV_CONF = {};
+}else{
+    console.log("执行参数",__webpack_require__.g.ENV_CONF)
 }
 module.exports = {
     deviceWidth: ENV_CONF.screenWidth || device.width,
@@ -1489,6 +1496,49 @@ var nodes = {
                 id: "com.ss.android.ugc.aweme:id/nv1"
             }
         }
+    },
+    "29.3.0": {
+        video: {
+            like: {
+                id: "com.ss.android.ugc.aweme:id/en6"
+            }
+        },
+        comment: {
+            button: {
+                id: "com.ss.android.ugc.aweme:id/c3g"
+            },
+            zan: {
+                id: "com.ss.android.ugc.aweme:id/eni"
+            }
+        },
+        user: {
+            homeMark: {
+                id: "com.ss.android.ugc.aweme:id/wn4"
+            },
+            gznum: {
+                id: "com.ss.android.ugc.aweme:id/z5j"
+            },
+            fansnum: {
+                id: "com.ss.android.ugc.aweme:id/z5n"
+            },
+            username: {
+                id: "com.ss.android.ugc.aweme:id/o3b"
+            },
+            lanv: {
+                id: "com.ss.android.ugc.aweme:id/z6f"
+            },
+            followBtn: {
+                id: "com.ss.android.ugc.aweme:id/rbk"
+            }
+        },
+        live: {
+            userlistbox: {
+                id: "com.ss.android.ugc.aweme:id/0z9"
+            },
+            msglistbox: {
+                id: "com.ss.android.ugc.aweme:id/fu3"
+            }
+        }
     }
 };
 module.exports = nodes;

+ 54 - 4
webpack-script/dist/直播点赞.js

@@ -7,7 +7,7 @@
 const nodes = __webpack_require__(590);
 module.exports = {
     packageName: "com.ss.android.ugc.aweme",
-    versions: ["26.0.0", "27.0.0", "28.0.0", "28.1.0", "28.2.0", "28.3.0", "28.4.0", "28.5.0", "28.6.0", "28.7.0", "28.8.0", "28.9.0", "29.0.0", "29.1.0","29.2.0"],
+    versions: ["26.0.0", "27.0.0", "28.0.0", "28.1.0", "28.2.0", "28.3.0", "28.4.0", "28.5.0", "28.6.0", "28.7.0", "28.8.0", "28.9.0", "29.0.0", "29.1.0","29.2.0","29.3.0"],
     commonts: ["又刷到你了", "看看我的作品", "来我主页转转"],
     sxhs: ["很高兴认识你", "常来常往"],
     zfhs: ["互粉", "回关", "关注", "互赞"],
@@ -43,7 +43,7 @@ var douyin = {
         }
     },
     execClose() {
-        for (utility.inputHide();;) {
+        for (utility.inputHide(); ;) {
             var closeBtn = desc("关闭").visibleToUser().findOnce();
             if (!closeBtn) {
                 break;
@@ -67,7 +67,7 @@ var douyin = {
         return backBtn !== null && (backBtn.click(), sleep(500), true);
     },
     execBack() {
-        while (this.execBackOnce());
+        while (this.execBackOnce()) ;
     },
     execLike() {
         var wdz = className("android.widget.LinearLayout").descStartsWith("未点赞").descEndsWith("按钮").visibleToUser().findOnce();
@@ -212,7 +212,8 @@ var douyin = {
             if (textEndsWith("优惠团购").visibleToUser().findOnce() !== null) {
                 return true;
             }
-        } catch (e) {}
+        } catch (e) {
+        }
         return false;
     },
     sikpCommerce() {
@@ -221,7 +222,11 @@ var douyin = {
     watchVideo(startTime, watchTime) {
         startTime = engine.getUnix() - startTime;
         if ((watchTime -= startTime = startTime > 60 ? 60 : startTime) > 0) {
+            console.log("观看时间:", watchTime);
+
             engine.sleep(watchTime);
+            console.log("已观看时间:", watchTime);
+
             utility.toast("继续观看视频" + watchTime + "秒");
         } else {
             utility.toast("已观看视频" + startTime + "秒");
@@ -394,6 +399,8 @@ module.exports = douyin;
 
 if (__webpack_require__.g.ENV_CONF === "undefined") {
     __webpack_require__.g.ENV_CONF = {};
+}else{
+    console.log("执行参数",__webpack_require__.g.ENV_CONF)
 }
 module.exports = {
     deviceWidth: ENV_CONF.screenWidth || device.width,
@@ -1489,6 +1496,49 @@ var nodes = {
                 id: "com.ss.android.ugc.aweme:id/nv1"
             }
         }
+    },
+    "29.3.0": {
+        video: {
+            like: {
+                id: "com.ss.android.ugc.aweme:id/en6"
+            }
+        },
+        comment: {
+            button: {
+                id: "com.ss.android.ugc.aweme:id/c3g"
+            },
+            zan: {
+                id: "com.ss.android.ugc.aweme:id/eni"
+            }
+        },
+        user: {
+            homeMark: {
+                id: "com.ss.android.ugc.aweme:id/wn4"
+            },
+            gznum: {
+                id: "com.ss.android.ugc.aweme:id/z5j"
+            },
+            fansnum: {
+                id: "com.ss.android.ugc.aweme:id/z5n"
+            },
+            username: {
+                id: "com.ss.android.ugc.aweme:id/o3b"
+            },
+            lanv: {
+                id: "com.ss.android.ugc.aweme:id/z6f"
+            },
+            followBtn: {
+                id: "com.ss.android.ugc.aweme:id/rbk"
+            }
+        },
+        live: {
+            userlistbox: {
+                id: "com.ss.android.ugc.aweme:id/0z9"
+            },
+            msglistbox: {
+                id: "com.ss.android.ugc.aweme:id/fu3"
+            }
+        }
     }
 };
 module.exports = nodes;

+ 54 - 4
webpack-script/dist/粉丝回访.js

@@ -7,7 +7,7 @@
 const nodes = __webpack_require__(590);
 module.exports = {
     packageName: "com.ss.android.ugc.aweme",
-    versions: ["26.0.0", "27.0.0", "28.0.0", "28.1.0", "28.2.0", "28.3.0", "28.4.0", "28.5.0", "28.6.0", "28.7.0", "28.8.0", "28.9.0", "29.0.0", "29.1.0","29.2.0"],
+    versions: ["26.0.0", "27.0.0", "28.0.0", "28.1.0", "28.2.0", "28.3.0", "28.4.0", "28.5.0", "28.6.0", "28.7.0", "28.8.0", "28.9.0", "29.0.0", "29.1.0","29.2.0","29.3.0"],
     commonts: ["又刷到你了", "看看我的作品", "来我主页转转"],
     sxhs: ["很高兴认识你", "常来常往"],
     zfhs: ["互粉", "回关", "关注", "互赞"],
@@ -43,7 +43,7 @@ var douyin = {
         }
     },
     execClose() {
-        for (utility.inputHide();;) {
+        for (utility.inputHide(); ;) {
             var closeBtn = desc("关闭").visibleToUser().findOnce();
             if (!closeBtn) {
                 break;
@@ -67,7 +67,7 @@ var douyin = {
         return backBtn !== null && (backBtn.click(), sleep(500), true);
     },
     execBack() {
-        while (this.execBackOnce());
+        while (this.execBackOnce()) ;
     },
     execLike() {
         var wdz = className("android.widget.LinearLayout").descStartsWith("未点赞").descEndsWith("按钮").visibleToUser().findOnce();
@@ -212,7 +212,8 @@ var douyin = {
             if (textEndsWith("优惠团购").visibleToUser().findOnce() !== null) {
                 return true;
             }
-        } catch (e) {}
+        } catch (e) {
+        }
         return false;
     },
     sikpCommerce() {
@@ -221,7 +222,11 @@ var douyin = {
     watchVideo(startTime, watchTime) {
         startTime = engine.getUnix() - startTime;
         if ((watchTime -= startTime = startTime > 60 ? 60 : startTime) > 0) {
+            console.log("观看时间:", watchTime);
+
             engine.sleep(watchTime);
+            console.log("已观看时间:", watchTime);
+
             utility.toast("继续观看视频" + watchTime + "秒");
         } else {
             utility.toast("已观看视频" + startTime + "秒");
@@ -394,6 +399,8 @@ module.exports = douyin;
 
 if (__webpack_require__.g.ENV_CONF === "undefined") {
     __webpack_require__.g.ENV_CONF = {};
+}else{
+    console.log("执行参数",__webpack_require__.g.ENV_CONF)
 }
 module.exports = {
     deviceWidth: ENV_CONF.screenWidth || device.width,
@@ -1489,6 +1496,49 @@ var nodes = {
                 id: "com.ss.android.ugc.aweme:id/nv1"
             }
         }
+    },
+    "29.3.0": {
+        video: {
+            like: {
+                id: "com.ss.android.ugc.aweme:id/en6"
+            }
+        },
+        comment: {
+            button: {
+                id: "com.ss.android.ugc.aweme:id/c3g"
+            },
+            zan: {
+                id: "com.ss.android.ugc.aweme:id/eni"
+            }
+        },
+        user: {
+            homeMark: {
+                id: "com.ss.android.ugc.aweme:id/wn4"
+            },
+            gznum: {
+                id: "com.ss.android.ugc.aweme:id/z5j"
+            },
+            fansnum: {
+                id: "com.ss.android.ugc.aweme:id/z5n"
+            },
+            username: {
+                id: "com.ss.android.ugc.aweme:id/o3b"
+            },
+            lanv: {
+                id: "com.ss.android.ugc.aweme:id/z6f"
+            },
+            followBtn: {
+                id: "com.ss.android.ugc.aweme:id/rbk"
+            }
+        },
+        live: {
+            userlistbox: {
+                id: "com.ss.android.ugc.aweme:id/0z9"
+            },
+            msglistbox: {
+                id: "com.ss.android.ugc.aweme:id/fu3"
+            }
+        }
     }
 };
 module.exports = nodes;

+ 54 - 4
webpack-script/dist/粉丝私信.js

@@ -7,7 +7,7 @@
 const nodes = __webpack_require__(590);
 module.exports = {
     packageName: "com.ss.android.ugc.aweme",
-    versions: ["26.0.0", "27.0.0", "28.0.0", "28.1.0", "28.2.0", "28.3.0", "28.4.0", "28.5.0", "28.6.0", "28.7.0", "28.8.0", "28.9.0", "29.0.0", "29.1.0","29.2.0"],
+    versions: ["26.0.0", "27.0.0", "28.0.0", "28.1.0", "28.2.0", "28.3.0", "28.4.0", "28.5.0", "28.6.0", "28.7.0", "28.8.0", "28.9.0", "29.0.0", "29.1.0","29.2.0","29.3.0"],
     commonts: ["又刷到你了", "看看我的作品", "来我主页转转"],
     sxhs: ["很高兴认识你", "常来常往"],
     zfhs: ["互粉", "回关", "关注", "互赞"],
@@ -43,7 +43,7 @@ var douyin = {
         }
     },
     execClose() {
-        for (utility.inputHide();;) {
+        for (utility.inputHide(); ;) {
             var closeBtn = desc("关闭").visibleToUser().findOnce();
             if (!closeBtn) {
                 break;
@@ -67,7 +67,7 @@ var douyin = {
         return backBtn !== null && (backBtn.click(), sleep(500), true);
     },
     execBack() {
-        while (this.execBackOnce());
+        while (this.execBackOnce()) ;
     },
     execLike() {
         var wdz = className("android.widget.LinearLayout").descStartsWith("未点赞").descEndsWith("按钮").visibleToUser().findOnce();
@@ -212,7 +212,8 @@ var douyin = {
             if (textEndsWith("优惠团购").visibleToUser().findOnce() !== null) {
                 return true;
             }
-        } catch (e) {}
+        } catch (e) {
+        }
         return false;
     },
     sikpCommerce() {
@@ -221,7 +222,11 @@ var douyin = {
     watchVideo(startTime, watchTime) {
         startTime = engine.getUnix() - startTime;
         if ((watchTime -= startTime = startTime > 60 ? 60 : startTime) > 0) {
+            console.log("观看时间:", watchTime);
+
             engine.sleep(watchTime);
+            console.log("已观看时间:", watchTime);
+
             utility.toast("继续观看视频" + watchTime + "秒");
         } else {
             utility.toast("已观看视频" + startTime + "秒");
@@ -394,6 +399,8 @@ module.exports = douyin;
 
 if (__webpack_require__.g.ENV_CONF === "undefined") {
     __webpack_require__.g.ENV_CONF = {};
+}else{
+    console.log("执行参数",__webpack_require__.g.ENV_CONF)
 }
 module.exports = {
     deviceWidth: ENV_CONF.screenWidth || device.width,
@@ -1489,6 +1496,49 @@ var nodes = {
                 id: "com.ss.android.ugc.aweme:id/nv1"
             }
         }
+    },
+    "29.3.0": {
+        video: {
+            like: {
+                id: "com.ss.android.ugc.aweme:id/en6"
+            }
+        },
+        comment: {
+            button: {
+                id: "com.ss.android.ugc.aweme:id/c3g"
+            },
+            zan: {
+                id: "com.ss.android.ugc.aweme:id/eni"
+            }
+        },
+        user: {
+            homeMark: {
+                id: "com.ss.android.ugc.aweme:id/wn4"
+            },
+            gznum: {
+                id: "com.ss.android.ugc.aweme:id/z5j"
+            },
+            fansnum: {
+                id: "com.ss.android.ugc.aweme:id/z5n"
+            },
+            username: {
+                id: "com.ss.android.ugc.aweme:id/o3b"
+            },
+            lanv: {
+                id: "com.ss.android.ugc.aweme:id/z6f"
+            },
+            followBtn: {
+                id: "com.ss.android.ugc.aweme:id/rbk"
+            }
+        },
+        live: {
+            userlistbox: {
+                id: "com.ss.android.ugc.aweme:id/0z9"
+            },
+            msglistbox: {
+                id: "com.ss.android.ugc.aweme:id/fu3"
+            }
+        }
     }
 };
 module.exports = nodes;

+ 54 - 4
webpack-script/dist/粉丝转化.js

@@ -7,7 +7,7 @@
 const nodes = __webpack_require__(590);
 module.exports = {
     packageName: "com.ss.android.ugc.aweme",
-    versions: ["26.0.0", "27.0.0", "28.0.0", "28.1.0", "28.2.0", "28.3.0", "28.4.0", "28.5.0", "28.6.0", "28.7.0", "28.8.0", "28.9.0", "29.0.0", "29.1.0","29.2.0"],
+    versions: ["26.0.0", "27.0.0", "28.0.0", "28.1.0", "28.2.0", "28.3.0", "28.4.0", "28.5.0", "28.6.0", "28.7.0", "28.8.0", "28.9.0", "29.0.0", "29.1.0","29.2.0","29.3.0"],
     commonts: ["又刷到你了", "看看我的作品", "来我主页转转"],
     sxhs: ["很高兴认识你", "常来常往"],
     zfhs: ["互粉", "回关", "关注", "互赞"],
@@ -43,7 +43,7 @@ var douyin = {
         }
     },
     execClose() {
-        for (utility.inputHide();;) {
+        for (utility.inputHide(); ;) {
             var closeBtn = desc("关闭").visibleToUser().findOnce();
             if (!closeBtn) {
                 break;
@@ -67,7 +67,7 @@ var douyin = {
         return backBtn !== null && (backBtn.click(), sleep(500), true);
     },
     execBack() {
-        while (this.execBackOnce());
+        while (this.execBackOnce()) ;
     },
     execLike() {
         var wdz = className("android.widget.LinearLayout").descStartsWith("未点赞").descEndsWith("按钮").visibleToUser().findOnce();
@@ -212,7 +212,8 @@ var douyin = {
             if (textEndsWith("优惠团购").visibleToUser().findOnce() !== null) {
                 return true;
             }
-        } catch (e) {}
+        } catch (e) {
+        }
         return false;
     },
     sikpCommerce() {
@@ -221,7 +222,11 @@ var douyin = {
     watchVideo(startTime, watchTime) {
         startTime = engine.getUnix() - startTime;
         if ((watchTime -= startTime = startTime > 60 ? 60 : startTime) > 0) {
+            console.log("观看时间:", watchTime);
+
             engine.sleep(watchTime);
+            console.log("已观看时间:", watchTime);
+
             utility.toast("继续观看视频" + watchTime + "秒");
         } else {
             utility.toast("已观看视频" + startTime + "秒");
@@ -394,6 +399,8 @@ module.exports = douyin;
 
 if (__webpack_require__.g.ENV_CONF === "undefined") {
     __webpack_require__.g.ENV_CONF = {};
+}else{
+    console.log("执行参数",__webpack_require__.g.ENV_CONF)
 }
 module.exports = {
     deviceWidth: ENV_CONF.screenWidth || device.width,
@@ -1489,6 +1496,49 @@ var nodes = {
                 id: "com.ss.android.ugc.aweme:id/nv1"
             }
         }
+    },
+    "29.3.0": {
+        video: {
+            like: {
+                id: "com.ss.android.ugc.aweme:id/en6"
+            }
+        },
+        comment: {
+            button: {
+                id: "com.ss.android.ugc.aweme:id/c3g"
+            },
+            zan: {
+                id: "com.ss.android.ugc.aweme:id/eni"
+            }
+        },
+        user: {
+            homeMark: {
+                id: "com.ss.android.ugc.aweme:id/wn4"
+            },
+            gznum: {
+                id: "com.ss.android.ugc.aweme:id/z5j"
+            },
+            fansnum: {
+                id: "com.ss.android.ugc.aweme:id/z5n"
+            },
+            username: {
+                id: "com.ss.android.ugc.aweme:id/o3b"
+            },
+            lanv: {
+                id: "com.ss.android.ugc.aweme:id/z6f"
+            },
+            followBtn: {
+                id: "com.ss.android.ugc.aweme:id/rbk"
+            }
+        },
+        live: {
+            userlistbox: {
+                id: "com.ss.android.ugc.aweme:id/0z9"
+            },
+            msglistbox: {
+                id: "com.ss.android.ugc.aweme:id/fu3"
+            }
+        }
     }
 };
 module.exports = nodes;

+ 54 - 4
webpack-script/dist/自动回评.js

@@ -7,7 +7,7 @@
 const nodes = __webpack_require__(590);
 module.exports = {
     packageName: "com.ss.android.ugc.aweme",
-    versions: ["26.0.0", "27.0.0", "28.0.0", "28.1.0", "28.2.0", "28.3.0", "28.4.0", "28.5.0", "28.6.0", "28.7.0", "28.8.0", "28.9.0", "29.0.0", "29.1.0","29.2.0"],
+    versions: ["26.0.0", "27.0.0", "28.0.0", "28.1.0", "28.2.0", "28.3.0", "28.4.0", "28.5.0", "28.6.0", "28.7.0", "28.8.0", "28.9.0", "29.0.0", "29.1.0","29.2.0","29.3.0"],
     commonts: ["又刷到你了", "看看我的作品", "来我主页转转"],
     sxhs: ["很高兴认识你", "常来常往"],
     zfhs: ["互粉", "回关", "关注", "互赞"],
@@ -43,7 +43,7 @@ var douyin = {
         }
     },
     execClose() {
-        for (utility.inputHide();;) {
+        for (utility.inputHide(); ;) {
             var closeBtn = desc("关闭").visibleToUser().findOnce();
             if (!closeBtn) {
                 break;
@@ -67,7 +67,7 @@ var douyin = {
         return backBtn !== null && (backBtn.click(), sleep(500), true);
     },
     execBack() {
-        while (this.execBackOnce());
+        while (this.execBackOnce()) ;
     },
     execLike() {
         var wdz = className("android.widget.LinearLayout").descStartsWith("未点赞").descEndsWith("按钮").visibleToUser().findOnce();
@@ -212,7 +212,8 @@ var douyin = {
             if (textEndsWith("优惠团购").visibleToUser().findOnce() !== null) {
                 return true;
             }
-        } catch (e) {}
+        } catch (e) {
+        }
         return false;
     },
     sikpCommerce() {
@@ -221,7 +222,11 @@ var douyin = {
     watchVideo(startTime, watchTime) {
         startTime = engine.getUnix() - startTime;
         if ((watchTime -= startTime = startTime > 60 ? 60 : startTime) > 0) {
+            console.log("观看时间:", watchTime);
+
             engine.sleep(watchTime);
+            console.log("已观看时间:", watchTime);
+
             utility.toast("继续观看视频" + watchTime + "秒");
         } else {
             utility.toast("已观看视频" + startTime + "秒");
@@ -394,6 +399,8 @@ module.exports = douyin;
 
 if (__webpack_require__.g.ENV_CONF === "undefined") {
     __webpack_require__.g.ENV_CONF = {};
+}else{
+    console.log("执行参数",__webpack_require__.g.ENV_CONF)
 }
 module.exports = {
     deviceWidth: ENV_CONF.screenWidth || device.width,
@@ -1489,6 +1496,49 @@ var nodes = {
                 id: "com.ss.android.ugc.aweme:id/nv1"
             }
         }
+    },
+    "29.3.0": {
+        video: {
+            like: {
+                id: "com.ss.android.ugc.aweme:id/en6"
+            }
+        },
+        comment: {
+            button: {
+                id: "com.ss.android.ugc.aweme:id/c3g"
+            },
+            zan: {
+                id: "com.ss.android.ugc.aweme:id/eni"
+            }
+        },
+        user: {
+            homeMark: {
+                id: "com.ss.android.ugc.aweme:id/wn4"
+            },
+            gznum: {
+                id: "com.ss.android.ugc.aweme:id/z5j"
+            },
+            fansnum: {
+                id: "com.ss.android.ugc.aweme:id/z5n"
+            },
+            username: {
+                id: "com.ss.android.ugc.aweme:id/o3b"
+            },
+            lanv: {
+                id: "com.ss.android.ugc.aweme:id/z6f"
+            },
+            followBtn: {
+                id: "com.ss.android.ugc.aweme:id/rbk"
+            }
+        },
+        live: {
+            userlistbox: {
+                id: "com.ss.android.ugc.aweme:id/0z9"
+            },
+            msglistbox: {
+                id: "com.ss.android.ugc.aweme:id/fu3"
+            }
+        }
     }
 };
 module.exports = nodes;

+ 54 - 4
webpack-script/dist/行业转化.js

@@ -7,7 +7,7 @@
 const nodes = __webpack_require__(590);
 module.exports = {
     packageName: "com.ss.android.ugc.aweme",
-    versions: ["26.0.0", "27.0.0", "28.0.0", "28.1.0", "28.2.0", "28.3.0", "28.4.0", "28.5.0", "28.6.0", "28.7.0", "28.8.0", "28.9.0", "29.0.0", "29.1.0","29.2.0"],
+    versions: ["26.0.0", "27.0.0", "28.0.0", "28.1.0", "28.2.0", "28.3.0", "28.4.0", "28.5.0", "28.6.0", "28.7.0", "28.8.0", "28.9.0", "29.0.0", "29.1.0","29.2.0","29.3.0"],
     commonts: ["又刷到你了", "看看我的作品", "来我主页转转"],
     sxhs: ["很高兴认识你", "常来常往"],
     zfhs: ["互粉", "回关", "关注", "互赞"],
@@ -43,7 +43,7 @@ var douyin = {
         }
     },
     execClose() {
-        for (utility.inputHide();;) {
+        for (utility.inputHide(); ;) {
             var closeBtn = desc("关闭").visibleToUser().findOnce();
             if (!closeBtn) {
                 break;
@@ -67,7 +67,7 @@ var douyin = {
         return backBtn !== null && (backBtn.click(), sleep(500), true);
     },
     execBack() {
-        while (this.execBackOnce());
+        while (this.execBackOnce()) ;
     },
     execLike() {
         var wdz = className("android.widget.LinearLayout").descStartsWith("未点赞").descEndsWith("按钮").visibleToUser().findOnce();
@@ -212,7 +212,8 @@ var douyin = {
             if (textEndsWith("优惠团购").visibleToUser().findOnce() !== null) {
                 return true;
             }
-        } catch (e) {}
+        } catch (e) {
+        }
         return false;
     },
     sikpCommerce() {
@@ -221,7 +222,11 @@ var douyin = {
     watchVideo(startTime, watchTime) {
         startTime = engine.getUnix() - startTime;
         if ((watchTime -= startTime = startTime > 60 ? 60 : startTime) > 0) {
+            console.log("观看时间:", watchTime);
+
             engine.sleep(watchTime);
+            console.log("已观看时间:", watchTime);
+
             utility.toast("继续观看视频" + watchTime + "秒");
         } else {
             utility.toast("已观看视频" + startTime + "秒");
@@ -394,6 +399,8 @@ module.exports = douyin;
 
 if (__webpack_require__.g.ENV_CONF === "undefined") {
     __webpack_require__.g.ENV_CONF = {};
+}else{
+    console.log("执行参数",__webpack_require__.g.ENV_CONF)
 }
 module.exports = {
     deviceWidth: ENV_CONF.screenWidth || device.width,
@@ -1489,6 +1496,49 @@ var nodes = {
                 id: "com.ss.android.ugc.aweme:id/nv1"
             }
         }
+    },
+    "29.3.0": {
+        video: {
+            like: {
+                id: "com.ss.android.ugc.aweme:id/en6"
+            }
+        },
+        comment: {
+            button: {
+                id: "com.ss.android.ugc.aweme:id/c3g"
+            },
+            zan: {
+                id: "com.ss.android.ugc.aweme:id/eni"
+            }
+        },
+        user: {
+            homeMark: {
+                id: "com.ss.android.ugc.aweme:id/wn4"
+            },
+            gznum: {
+                id: "com.ss.android.ugc.aweme:id/z5j"
+            },
+            fansnum: {
+                id: "com.ss.android.ugc.aweme:id/z5n"
+            },
+            username: {
+                id: "com.ss.android.ugc.aweme:id/o3b"
+            },
+            lanv: {
+                id: "com.ss.android.ugc.aweme:id/z6f"
+            },
+            followBtn: {
+                id: "com.ss.android.ugc.aweme:id/rbk"
+            }
+        },
+        live: {
+            userlistbox: {
+                id: "com.ss.android.ugc.aweme:id/0z9"
+            },
+            msglistbox: {
+                id: "com.ss.android.ugc.aweme:id/fu3"
+            }
+        }
     }
 };
 module.exports = nodes;

+ 54 - 4
webpack-script/dist/视频筛选.js

@@ -7,7 +7,7 @@
 const nodes = __webpack_require__(590);
 module.exports = {
     packageName: "com.ss.android.ugc.aweme",
-    versions: ["26.0.0", "27.0.0", "28.0.0", "28.1.0", "28.2.0", "28.3.0", "28.4.0", "28.5.0", "28.6.0", "28.7.0", "28.8.0", "28.9.0", "29.0.0", "29.1.0","29.2.0"],
+    versions: ["26.0.0", "27.0.0", "28.0.0", "28.1.0", "28.2.0", "28.3.0", "28.4.0", "28.5.0", "28.6.0", "28.7.0", "28.8.0", "28.9.0", "29.0.0", "29.1.0","29.2.0","29.3.0"],
     commonts: ["又刷到你了", "看看我的作品", "来我主页转转"],
     sxhs: ["很高兴认识你", "常来常往"],
     zfhs: ["互粉", "回关", "关注", "互赞"],
@@ -43,7 +43,7 @@ var douyin = {
         }
     },
     execClose() {
-        for (utility.inputHide();;) {
+        for (utility.inputHide(); ;) {
             var closeBtn = desc("关闭").visibleToUser().findOnce();
             if (!closeBtn) {
                 break;
@@ -67,7 +67,7 @@ var douyin = {
         return backBtn !== null && (backBtn.click(), sleep(500), true);
     },
     execBack() {
-        while (this.execBackOnce());
+        while (this.execBackOnce()) ;
     },
     execLike() {
         var wdz = className("android.widget.LinearLayout").descStartsWith("未点赞").descEndsWith("按钮").visibleToUser().findOnce();
@@ -212,7 +212,8 @@ var douyin = {
             if (textEndsWith("优惠团购").visibleToUser().findOnce() !== null) {
                 return true;
             }
-        } catch (e) {}
+        } catch (e) {
+        }
         return false;
     },
     sikpCommerce() {
@@ -221,7 +222,11 @@ var douyin = {
     watchVideo(startTime, watchTime) {
         startTime = engine.getUnix() - startTime;
         if ((watchTime -= startTime = startTime > 60 ? 60 : startTime) > 0) {
+            console.log("观看时间:", watchTime);
+
             engine.sleep(watchTime);
+            console.log("已观看时间:", watchTime);
+
             utility.toast("继续观看视频" + watchTime + "秒");
         } else {
             utility.toast("已观看视频" + startTime + "秒");
@@ -394,6 +399,8 @@ module.exports = douyin;
 
 if (__webpack_require__.g.ENV_CONF === "undefined") {
     __webpack_require__.g.ENV_CONF = {};
+}else{
+    console.log("执行参数",__webpack_require__.g.ENV_CONF)
 }
 module.exports = {
     deviceWidth: ENV_CONF.screenWidth || device.width,
@@ -1489,6 +1496,49 @@ var nodes = {
                 id: "com.ss.android.ugc.aweme:id/nv1"
             }
         }
+    },
+    "29.3.0": {
+        video: {
+            like: {
+                id: "com.ss.android.ugc.aweme:id/en6"
+            }
+        },
+        comment: {
+            button: {
+                id: "com.ss.android.ugc.aweme:id/c3g"
+            },
+            zan: {
+                id: "com.ss.android.ugc.aweme:id/eni"
+            }
+        },
+        user: {
+            homeMark: {
+                id: "com.ss.android.ugc.aweme:id/wn4"
+            },
+            gznum: {
+                id: "com.ss.android.ugc.aweme:id/z5j"
+            },
+            fansnum: {
+                id: "com.ss.android.ugc.aweme:id/z5n"
+            },
+            username: {
+                id: "com.ss.android.ugc.aweme:id/o3b"
+            },
+            lanv: {
+                id: "com.ss.android.ugc.aweme:id/z6f"
+            },
+            followBtn: {
+                id: "com.ss.android.ugc.aweme:id/rbk"
+            }
+        },
+        live: {
+            userlistbox: {
+                id: "com.ss.android.ugc.aweme:id/0z9"
+            },
+            msglistbox: {
+                id: "com.ss.android.ugc.aweme:id/fu3"
+            }
+        }
     }
 };
 module.exports = nodes;

+ 54 - 4
webpack-script/dist/评论区回复.js

@@ -7,7 +7,7 @@
 const nodes = __webpack_require__(590);
 module.exports = {
     packageName: "com.ss.android.ugc.aweme",
-    versions: ["26.0.0", "27.0.0", "28.0.0", "28.1.0", "28.2.0", "28.3.0", "28.4.0", "28.5.0", "28.6.0", "28.7.0", "28.8.0", "28.9.0", "29.0.0", "29.1.0","29.2.0"],
+    versions: ["26.0.0", "27.0.0", "28.0.0", "28.1.0", "28.2.0", "28.3.0", "28.4.0", "28.5.0", "28.6.0", "28.7.0", "28.8.0", "28.9.0", "29.0.0", "29.1.0","29.2.0","29.3.0"],
     commonts: ["又刷到你了", "看看我的作品", "来我主页转转"],
     sxhs: ["很高兴认识你", "常来常往"],
     zfhs: ["互粉", "回关", "关注", "互赞"],
@@ -43,7 +43,7 @@ var douyin = {
         }
     },
     execClose() {
-        for (utility.inputHide();;) {
+        for (utility.inputHide(); ;) {
             var closeBtn = desc("关闭").visibleToUser().findOnce();
             if (!closeBtn) {
                 break;
@@ -67,7 +67,7 @@ var douyin = {
         return backBtn !== null && (backBtn.click(), sleep(500), true);
     },
     execBack() {
-        while (this.execBackOnce());
+        while (this.execBackOnce()) ;
     },
     execLike() {
         var wdz = className("android.widget.LinearLayout").descStartsWith("未点赞").descEndsWith("按钮").visibleToUser().findOnce();
@@ -212,7 +212,8 @@ var douyin = {
             if (textEndsWith("优惠团购").visibleToUser().findOnce() !== null) {
                 return true;
             }
-        } catch (e) {}
+        } catch (e) {
+        }
         return false;
     },
     sikpCommerce() {
@@ -221,7 +222,11 @@ var douyin = {
     watchVideo(startTime, watchTime) {
         startTime = engine.getUnix() - startTime;
         if ((watchTime -= startTime = startTime > 60 ? 60 : startTime) > 0) {
+            console.log("观看时间:", watchTime);
+
             engine.sleep(watchTime);
+            console.log("已观看时间:", watchTime);
+
             utility.toast("继续观看视频" + watchTime + "秒");
         } else {
             utility.toast("已观看视频" + startTime + "秒");
@@ -394,6 +399,8 @@ module.exports = douyin;
 
 if (__webpack_require__.g.ENV_CONF === "undefined") {
     __webpack_require__.g.ENV_CONF = {};
+}else{
+    console.log("执行参数",__webpack_require__.g.ENV_CONF)
 }
 module.exports = {
     deviceWidth: ENV_CONF.screenWidth || device.width,
@@ -1489,6 +1496,49 @@ var nodes = {
                 id: "com.ss.android.ugc.aweme:id/nv1"
             }
         }
+    },
+    "29.3.0": {
+        video: {
+            like: {
+                id: "com.ss.android.ugc.aweme:id/en6"
+            }
+        },
+        comment: {
+            button: {
+                id: "com.ss.android.ugc.aweme:id/c3g"
+            },
+            zan: {
+                id: "com.ss.android.ugc.aweme:id/eni"
+            }
+        },
+        user: {
+            homeMark: {
+                id: "com.ss.android.ugc.aweme:id/wn4"
+            },
+            gznum: {
+                id: "com.ss.android.ugc.aweme:id/z5j"
+            },
+            fansnum: {
+                id: "com.ss.android.ugc.aweme:id/z5n"
+            },
+            username: {
+                id: "com.ss.android.ugc.aweme:id/o3b"
+            },
+            lanv: {
+                id: "com.ss.android.ugc.aweme:id/z6f"
+            },
+            followBtn: {
+                id: "com.ss.android.ugc.aweme:id/rbk"
+            }
+        },
+        live: {
+            userlistbox: {
+                id: "com.ss.android.ugc.aweme:id/0z9"
+            },
+            msglistbox: {
+                id: "com.ss.android.ugc.aweme:id/fu3"
+            }
+        }
     }
 };
 module.exports = nodes;

+ 54 - 4
webpack-script/dist/超级转发.js

@@ -7,7 +7,7 @@
 const nodes = __webpack_require__(590);
 module.exports = {
     packageName: "com.ss.android.ugc.aweme",
-    versions: ["26.0.0", "27.0.0", "28.0.0", "28.1.0", "28.2.0", "28.3.0", "28.4.0", "28.5.0", "28.6.0", "28.7.0", "28.8.0", "28.9.0", "29.0.0", "29.1.0","29.2.0"],
+    versions: ["26.0.0", "27.0.0", "28.0.0", "28.1.0", "28.2.0", "28.3.0", "28.4.0", "28.5.0", "28.6.0", "28.7.0", "28.8.0", "28.9.0", "29.0.0", "29.1.0","29.2.0","29.3.0"],
     commonts: ["又刷到你了", "看看我的作品", "来我主页转转"],
     sxhs: ["很高兴认识你", "常来常往"],
     zfhs: ["互粉", "回关", "关注", "互赞"],
@@ -43,7 +43,7 @@ var douyin = {
         }
     },
     execClose() {
-        for (utility.inputHide();;) {
+        for (utility.inputHide(); ;) {
             var closeBtn = desc("关闭").visibleToUser().findOnce();
             if (!closeBtn) {
                 break;
@@ -67,7 +67,7 @@ var douyin = {
         return backBtn !== null && (backBtn.click(), sleep(500), true);
     },
     execBack() {
-        while (this.execBackOnce());
+        while (this.execBackOnce()) ;
     },
     execLike() {
         var wdz = className("android.widget.LinearLayout").descStartsWith("未点赞").descEndsWith("按钮").visibleToUser().findOnce();
@@ -212,7 +212,8 @@ var douyin = {
             if (textEndsWith("优惠团购").visibleToUser().findOnce() !== null) {
                 return true;
             }
-        } catch (e) {}
+        } catch (e) {
+        }
         return false;
     },
     sikpCommerce() {
@@ -221,7 +222,11 @@ var douyin = {
     watchVideo(startTime, watchTime) {
         startTime = engine.getUnix() - startTime;
         if ((watchTime -= startTime = startTime > 60 ? 60 : startTime) > 0) {
+            console.log("观看时间:", watchTime);
+
             engine.sleep(watchTime);
+            console.log("已观看时间:", watchTime);
+
             utility.toast("继续观看视频" + watchTime + "秒");
         } else {
             utility.toast("已观看视频" + startTime + "秒");
@@ -394,6 +399,8 @@ module.exports = douyin;
 
 if (__webpack_require__.g.ENV_CONF === "undefined") {
     __webpack_require__.g.ENV_CONF = {};
+}else{
+    console.log("执行参数",__webpack_require__.g.ENV_CONF)
 }
 module.exports = {
     deviceWidth: ENV_CONF.screenWidth || device.width,
@@ -1489,6 +1496,49 @@ var nodes = {
                 id: "com.ss.android.ugc.aweme:id/nv1"
             }
         }
+    },
+    "29.3.0": {
+        video: {
+            like: {
+                id: "com.ss.android.ugc.aweme:id/en6"
+            }
+        },
+        comment: {
+            button: {
+                id: "com.ss.android.ugc.aweme:id/c3g"
+            },
+            zan: {
+                id: "com.ss.android.ugc.aweme:id/eni"
+            }
+        },
+        user: {
+            homeMark: {
+                id: "com.ss.android.ugc.aweme:id/wn4"
+            },
+            gznum: {
+                id: "com.ss.android.ugc.aweme:id/z5j"
+            },
+            fansnum: {
+                id: "com.ss.android.ugc.aweme:id/z5n"
+            },
+            username: {
+                id: "com.ss.android.ugc.aweme:id/o3b"
+            },
+            lanv: {
+                id: "com.ss.android.ugc.aweme:id/z6f"
+            },
+            followBtn: {
+                id: "com.ss.android.ugc.aweme:id/rbk"
+            }
+        },
+        live: {
+            userlistbox: {
+                id: "com.ss.android.ugc.aweme:id/0z9"
+            },
+            msglistbox: {
+                id: "com.ss.android.ugc.aweme:id/fu3"
+            }
+        }
     }
 };
 module.exports = nodes;

+ 54 - 4
webpack-script/dist/通讯录转化.js

@@ -7,7 +7,7 @@
 const nodes = __webpack_require__(590);
 module.exports = {
     packageName: "com.ss.android.ugc.aweme",
-    versions: ["26.0.0", "27.0.0", "28.0.0", "28.1.0", "28.2.0", "28.3.0", "28.4.0", "28.5.0", "28.6.0", "28.7.0", "28.8.0", "28.9.0", "29.0.0", "29.1.0","29.2.0"],
+    versions: ["26.0.0", "27.0.0", "28.0.0", "28.1.0", "28.2.0", "28.3.0", "28.4.0", "28.5.0", "28.6.0", "28.7.0", "28.8.0", "28.9.0", "29.0.0", "29.1.0","29.2.0","29.3.0"],
     commonts: ["又刷到你了", "看看我的作品", "来我主页转转"],
     sxhs: ["很高兴认识你", "常来常往"],
     zfhs: ["互粉", "回关", "关注", "互赞"],
@@ -43,7 +43,7 @@ var douyin = {
         }
     },
     execClose() {
-        for (utility.inputHide();;) {
+        for (utility.inputHide(); ;) {
             var closeBtn = desc("关闭").visibleToUser().findOnce();
             if (!closeBtn) {
                 break;
@@ -67,7 +67,7 @@ var douyin = {
         return backBtn !== null && (backBtn.click(), sleep(500), true);
     },
     execBack() {
-        while (this.execBackOnce());
+        while (this.execBackOnce()) ;
     },
     execLike() {
         var wdz = className("android.widget.LinearLayout").descStartsWith("未点赞").descEndsWith("按钮").visibleToUser().findOnce();
@@ -212,7 +212,8 @@ var douyin = {
             if (textEndsWith("优惠团购").visibleToUser().findOnce() !== null) {
                 return true;
             }
-        } catch (e) {}
+        } catch (e) {
+        }
         return false;
     },
     sikpCommerce() {
@@ -221,7 +222,11 @@ var douyin = {
     watchVideo(startTime, watchTime) {
         startTime = engine.getUnix() - startTime;
         if ((watchTime -= startTime = startTime > 60 ? 60 : startTime) > 0) {
+            console.log("观看时间:", watchTime);
+
             engine.sleep(watchTime);
+            console.log("已观看时间:", watchTime);
+
             utility.toast("继续观看视频" + watchTime + "秒");
         } else {
             utility.toast("已观看视频" + startTime + "秒");
@@ -394,6 +399,8 @@ module.exports = douyin;
 
 if (__webpack_require__.g.ENV_CONF === "undefined") {
     __webpack_require__.g.ENV_CONF = {};
+}else{
+    console.log("执行参数",__webpack_require__.g.ENV_CONF)
 }
 module.exports = {
     deviceWidth: ENV_CONF.screenWidth || device.width,
@@ -1489,6 +1496,49 @@ var nodes = {
                 id: "com.ss.android.ugc.aweme:id/nv1"
             }
         }
+    },
+    "29.3.0": {
+        video: {
+            like: {
+                id: "com.ss.android.ugc.aweme:id/en6"
+            }
+        },
+        comment: {
+            button: {
+                id: "com.ss.android.ugc.aweme:id/c3g"
+            },
+            zan: {
+                id: "com.ss.android.ugc.aweme:id/eni"
+            }
+        },
+        user: {
+            homeMark: {
+                id: "com.ss.android.ugc.aweme:id/wn4"
+            },
+            gznum: {
+                id: "com.ss.android.ugc.aweme:id/z5j"
+            },
+            fansnum: {
+                id: "com.ss.android.ugc.aweme:id/z5n"
+            },
+            username: {
+                id: "com.ss.android.ugc.aweme:id/o3b"
+            },
+            lanv: {
+                id: "com.ss.android.ugc.aweme:id/z6f"
+            },
+            followBtn: {
+                id: "com.ss.android.ugc.aweme:id/rbk"
+            }
+        },
+        live: {
+            userlistbox: {
+                id: "com.ss.android.ugc.aweme:id/0z9"
+            },
+            msglistbox: {
+                id: "com.ss.android.ugc.aweme:id/fu3"
+            }
+        }
     }
 };
 module.exports = nodes;

+ 1 - 1
webpack-script/src/common/conf.js

@@ -1,7 +1,7 @@
 const nodes = require("./node");
 module.exports = {
     packageName: "com.ss.android.ugc.aweme",
-    versions: ["26.0.0", "27.0.0", "28.0.0", "28.1.0", "28.2.0", "28.3.0", "28.4.0", "28.5.0", "28.6.0", "28.7.0", "28.8.0", "28.9.0", "29.0.0", "29.1.0","29.2.0"],
+    versions: ["26.0.0", "27.0.0", "28.0.0", "28.1.0", "28.2.0", "28.3.0", "28.4.0", "28.5.0", "28.6.0", "28.7.0", "28.8.0", "28.9.0", "29.0.0", "29.1.0","29.2.0","29.3.0"],
     commonts: ["又刷到你了", "看看我的作品", "来我主页转转"],
     sxhs: ["很高兴认识你", "常来常往"],
     zfhs: ["互粉", "回关", "关注", "互赞"],

+ 8 - 3
webpack-script/src/common/douyin.js

@@ -19,7 +19,7 @@ var douyin = {
         }
     },
     execClose() {
-        for (utility.inputHide();;) {
+        for (utility.inputHide(); ;) {
             var closeBtn = desc("关闭").visibleToUser().findOnce();
             if (!closeBtn) {
                 break;
@@ -43,7 +43,7 @@ var douyin = {
         return backBtn !== null && (backBtn.click(), sleep(500), true);
     },
     execBack() {
-        while (this.execBackOnce());
+        while (this.execBackOnce()) ;
     },
     execLike() {
         var wdz = className("android.widget.LinearLayout").descStartsWith("未点赞").descEndsWith("按钮").visibleToUser().findOnce();
@@ -188,7 +188,8 @@ var douyin = {
             if (textEndsWith("优惠团购").visibleToUser().findOnce() !== null) {
                 return true;
             }
-        } catch (e) {}
+        } catch (e) {
+        }
         return false;
     },
     sikpCommerce() {
@@ -197,7 +198,11 @@ var douyin = {
     watchVideo(startTime, watchTime) {
         startTime = engine.getUnix() - startTime;
         if ((watchTime -= startTime = startTime > 60 ? 60 : startTime) > 0) {
+            console.log("观看时间:", watchTime);
+
             engine.sleep(watchTime);
+            console.log("已观看时间:", watchTime);
+
             utility.toast("继续观看视频" + watchTime + "秒");
         } else {
             utility.toast("已观看视频" + startTime + "秒");

+ 2 - 0
webpack-script/src/common/engine.js

@@ -1,5 +1,7 @@
 if (global.ENV_CONF === "undefined") {
     global.ENV_CONF = {};
+}else{
+    console.log("执行参数",global.ENV_CONF)
 }
 module.exports = {
     deviceWidth: ENV_CONF.screenWidth || device.width,

+ 43 - 0
webpack-script/src/common/node.js

@@ -960,6 +960,49 @@ var nodes = {
                 id: "com.ss.android.ugc.aweme:id/nv1"
             }
         }
+    },
+    "29.3.0": {
+        video: {
+            like: {
+                id: "com.ss.android.ugc.aweme:id/en6"
+            }
+        },
+        comment: {
+            button: {
+                id: "com.ss.android.ugc.aweme:id/c3g"
+            },
+            zan: {
+                id: "com.ss.android.ugc.aweme:id/eni"
+            }
+        },
+        user: {
+            homeMark: {
+                id: "com.ss.android.ugc.aweme:id/wn4"
+            },
+            gznum: {
+                id: "com.ss.android.ugc.aweme:id/z5j"
+            },
+            fansnum: {
+                id: "com.ss.android.ugc.aweme:id/z5n"
+            },
+            username: {
+                id: "com.ss.android.ugc.aweme:id/o3b"
+            },
+            lanv: {
+                id: "com.ss.android.ugc.aweme:id/z6f"
+            },
+            followBtn: {
+                id: "com.ss.android.ugc.aweme:id/rbk"
+            }
+        },
+        live: {
+            userlistbox: {
+                id: "com.ss.android.ugc.aweme:id/0z9"
+            },
+            msglistbox: {
+                id: "com.ss.android.ugc.aweme:id/fu3"
+            }
+        }
     }
 };
 module.exports = nodes;

+ 18 - 1
webpack-script/src/tcyl.js

@@ -1,12 +1,29 @@
+
 const douyin = require("./common/douyin");
 const conf = require("./common/conf");
 const engine = require("./common/engine");
 const utility = require("./common/utility");
+var param = {
+    yxsc: 100,
+    gksj1: 2,
+    gksj2: 6,
+    tggz: false,
+    tgsy: true,
+    yhxb: 0,
+    jlfw: 10,
+    dz: 75,
+    gz: 5,
+    pl: 35,
+    pldz: 50,
+    plhs: conf.commonts,
+    pltp: true
+};
 var tcyl = {
     init() {
         return !!douyin.init() && !(typeof ENV_CONF != "undefined" && Object.assign(param, ENV_CONF), param.pl > 0 && param.plhs.length < 1 ? (alert("请设置评论话术"), 1) : (engine.slide(), engine.sleep(3), douyin.IsVideo() ? (utility.toast("开始任务:同城引流"), engine.sleep(1), device.keepScreenDim(), douyin.popupAndClose(), 0) : (alert("请在 同城/团购 视频播放页运行"), 1)));
     },
     getRange(max) {
+        console.log("获取距离")
         var jlText;
         if (!(jlNode = textEndsWith("km").visibleToUser().findOnce()) || (jlText = jlNode.text(), utility.isEmpty(jlText)) || jlText.indexOf(">") == 0) {
             return -1;
@@ -15,6 +32,7 @@ var tcyl = {
             if (isNaN(jlText)) {
                 return 0.1;
             } else {
+                console.log("获取距离",jlText)
                 return jlText;
             }
         }
@@ -26,7 +44,6 @@ var tcyl = {
             let dzCount = gzCount = plCount = 0;
             while (true) {
                 var runNowTime = engine.getUnix();
-                engine.sleepMs(1000, 2000);
                 if (runEndTime < runNowTime) {
                     device.cancelKeepingAwake();
                     alert("恭喜任务完成!", "本次任务共完成\n点赞" + dzCount + "次\n关注" + gzCount + "次\n评论" + plCount + "次");