得-物任务脚本

news2024/12/27 13:34:10

得某物任务脚本

该脚本主要用于自动化执行“得物”APP中的一些日常任务和活动,包括签到、任务完成、奖励领取等操作。使用了多个第三方库来加密、签名和发送请求。

  1. 任务的定时执行

脚本通过定时任务(cron)设置在每天的11:10执行。使用的依赖库包括crypto-jsjsencrypt

  1. 变量设置
  • dewuCK: 用于存储多个账号的cookie信息,包括x-auth-token、dutoken和SK。

  • UAdefult_dewu: 设置默认的User-Agent,如果环境变量中存在,则使用环境变量中的值。

  1. 任务执行流程

脚本主要分为多个部分,各部分代表不同的任务或活动:

3.1 初始化

  • 通过new Env("得物农场")创建一个环境对象,加载环境相关配置。

  • 初始化userList数组,用于存储多个用户信息。

  • 初始化taskall数组,用于存储多个任务的Promise对象。

3.2 主任务流程

  • 树任务: 包括浇水、邀请奖励、获取树信息等操作。

  • 鱼任务: 包括签到、任务列表获取、喂鱼等操作。

  • 上上签: 包括助力其他用户、获取任务列表等操作。

  • 0元抽: 获取活动列表、执行任务等操作。

-盲盒抽奖: 获取盲盒任务、刷新盲盒、抽取盲盒奖励等操作。

  • 潮金币: 获取任务列表、签到、领取奖励等操作。
  1. 任务和API请求封装
  • 脚本封装了多个请求方法,如taskRequesttaskRequest_task,用于发送HTTP请求。

  • 使用CryptoJS进行数据加密,jsencrypt进行数据签名,确保数据的安全性和完整性。

  • 提供了对返回数据的解析、处理和日志记录。

  • 在这里插入图片描述

部分源码

function Env(t, s) {
    return new (class {
        constructor(t, s) {
            this.name = t;
            this.data = null;
            this.dataFile = "box.dat";
            this.logs = [];
            this.logSeparator = "\n";
            this.startTime = new Date().getTime();
            Object.assign(this, s);
            this.log("", `\ud83d\udd14${this.name},\u5f00\u59cb!`);
        }
        isNode() {
            return "undefined" != typeof module && !!module.exports;
        }
        isQuanX() {
            return "undefined" != typeof $task;
        }
        isSurge() {
            return "undefined" != typeof $httpClient && "undefined" == typeof $loon;
        }
        isLoon() {
            return "undefined" != typeof $loon;
        }
        async loaddata() {
            if (!this.isNode()) return {};
            this.fs = this.fs ? this.fs : require("fs");
            this.path = this.path ? this.path : require("path");
            const t = this.path.resolve(this.dataFile),
                s = this.path.resolve(process.cwd(), this.dataFile),
                e = this.fs.existsSync(t),
                i = !e && this.fs.existsSync(s);
            if (!e && !i) this.writeFile(this.dataFile, JSON.stringify([]));
            const pt = e ? t : s;
            let r = await this.readFile(pt);
            return r
        }
        async writedata() {
            if (!this.isNode()) return;
            this.fs = this.fs ? this.fs : require("fs");
            this.path = this.path ? this.path : require("path");
            const t = this.path.resolve(this.dataFile),
                s = this.path.resolve(process.cwd(), this.dataFile),
                e = this.fs.existsSync(t),
                i = !e && this.fs.existsSync(s);
            const o = JSON.stringify(this.data, null, 2);
            const pt = e ? t : i ? s : t;
            await writeFile(pt, o)
        }
        readFile(pt) {
            this.fs = this.fs ? this.fs : require("fs");
            return new Promise((resolve, reject) => {
                this.fs.readFile(pt, "utf8", (r, o) => {
                    if (r) reject({});
                    else o = this.isJSONString(o) ? JSON.parse(o) : o;
                    resolve(o);
                });
            });
        }
        writeFile(pt, o) {
            this.fs = this.fs ? this.fs : require("fs");
            return new Promise((resolve, reject) => {
                this.fs.writeFile(pt, o, (r) => {
                    if (r) reject(r);
                    else resolve();
                });
            });
        }
        async getval(t) {
            if (this.isSurge() || this.isLoon()) {
                return $persistentStore.read(t);
            } else if (this.isQuanX()) {
                return $prefs.valueForKey(t);
            } else if (this.isNode()) {
                this.data = await this.loaddata();
                return await this.data[t];
            } else {
                return (this.data && this.data[t]) || null;
            }
        }
        async setval(t, s) {
            if (this.isSurge() || this.isLoon()) {
                return $persistentStore.write(t, s);
            } else if (this.isQuanX()) {
                return $prefs.setValueForKey(t, s);
            } else if (this.isNode()) {
                this.data = await this.loaddata();
                this.data[s] = t;
                await this.writedata();
                return true;
            } else {
                return (this.data && this.data[s]) || null;
            }
        }
        initRequestEnv(t) {
            try {
                require.resolve("got") &&
                    ((this.requset = require("got")), (this.requestModule = "got"));
            } catch (e) { }
            try {
                require.resolve("axios") &&
                    ((this.requset = require("axios")), (this.requestModule = "axios"));
            } catch (e) { }
            this.cktough = this.cktough ? this.cktough : require("tough-cookie");
            this.ckjar = this.ckjar ? this.ckjar : new this.cktough.CookieJar();
            if (t) {
                t.headers = t.headers ? t.headers : {};
                if (
                    typeof t.headers.Cookie === "undefined" &&
                    typeof t.cookieJar === "undefined"
) {
                    t.cookieJar = this.ckjar;
                }
            }
        }
        queryStr(options) {
            return Object.entries(options)
                .map(
                    ([key, value]) =>
                        `${key}=${typeof value === "object" ? JSON.stringify(value) : value
                        }`
)
                .join("&");
        }
        getURLParams(url) {
            const params = {};
            const queryString = url.split("?")[1];
            if (queryString) {
                const paramPairs = queryString.split("&");
                paramPairs.forEach((pair) => {
                    const [key, value] = pair.split("=");
                    params[key] = value;
                });
            }
            return params;
        }
        isJSONString(str) {
            try {
                return JSON.parse(str) && typeof JSON.parse(str) === "object";
            } catch (e) {
                return false;
            }
        }
        isJson(obj) {
            var isjson =
                typeof obj == "object" &&
                Object.prototype.toString.call(obj).toLowerCase() ==
                "[object object]" &&
                !obj.length;
            return isjson;
        }
        async sendMsg(message) {
            if (!message) return;
            if ($.isNode()) {
                await notify.sendNotify($.name, message);
            } else {
                $.msg($.name, "", message);
            }
        }
        async httpRequest(options) {
            let t = { ...options };
            t.headers = t.headers || {};
            if (t.params) {
                t.url += "?" + this.queryStr(t.params);
            }
            t.method = t.method.toLowerCase();
            if (t.method === "get") {
                delete t.headers["Content-Type"];
                delete t.headers["Content-Length"];
                delete t.headers["content-type"];
                delete t.headers["content-length"];
                delete t.body;
            } else if (t.method === "post") {
                let ContentType;
                if (!t.body) {
                    t.body = "";
                } else if (typeof t.body === "string") {
                    ContentType = this.isJSONString(t.body)
                        ? "application/json"
                        : "application/x-www-form-urlencoded";
                } else if (this.isJson(t.body)) {
                    t.body = JSON.stringify(t.body);
                    ContentType = "application/json";
                }
                if (!t.headers["Content-Type"] && !t.headers["content-type"]) {
                    t.headers["Content-Type"] = ContentType;
                }
            }
            if (this.isNode()) {
                this.initRequestEnv(t);
                if (this.requestModule === "axios" && t.method === "post") {
                    t.data = t.body;
                    delete t.body;
                }
                let httpResult;
                if (this.requestModule === "got") {
                    httpResult = await this.requset(t);
                    if (this.isJSONString(httpResult.body)) {
                        httpResult.body = JSON.parse(httpResult.body);
                    }
                } else if (this.requestModule === "axios") {
                    httpResult = await this.requset(t);
                    httpResult.body = httpResult.data;
                }
                return httpResult;
            }
            if (this.isQuanX()) {
                t.method = t.method.toUpperCase();
                return new Promise((resolve, reject) => {
                    $task.fetch(t).then((response) => {
                        if (this.isJSONString(response.body)) {
                            response.body = JSON.parse(response.body);
                        }
                        resolve(response);
                    });
                });
            }
        }
        randomNumber(length) {
            const characters = "0123456789";
            return Array.from(
                { length },
                () => characters[Math.floor(Math.random() * characters.length)]
).join("");
        }
        randomString(length) {
            const characters = "abcdefghijklmnopqrstuvwxyz0123456789";
            return Array.from(
                { length },
                () => characters[Math.floor(Math.random() * characters.length)]
).join("");
        }
        timeStamp() {
            return new Date().getTime();
        }
        uuid() {
            return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(
                /[xy]/g,
                function (c) {
                    var r = (Math.random() * 16) | 0,
                        v = c == "x" ? r : (r & 0x3) | 0x8;
                    return v.toString(16);
                }
);
        }
        time(t) {
            let s = {
                "M+": new Date().getMonth() + 1,
                "d+": new Date().getDate(),
                "H+": new Date().getHours(),
                "m+": new Date().getMinutes(),
                "s+": new Date().getSeconds(),
                "q+": Math.floor((new Date().getMonth() + 3) / 3),
                S: new Date().getMilliseconds(),
            };
            /(y+)/.test(t) &&
                (t = t.replace(
                    RegExp.$1,
                    (new Date().getFullYear() + "").substr(4 - RegExp.$1.length)
));
            for (let e in s)
                new RegExp("(" + e + ")").test(t) &&
                    (t = t.replace(
                        RegExp.$1,
                        1 == RegExp.$1.length
                            ? s[e]
                            : ("00" + s[e]).substr(("" + s[e]).length)
));
            return t;
        }
        msg(s = t, e = "", i = "", o) {
            const h = (t) =>
                !t || (!this.isLoon() && this.isSurge())
                    ? t
                    : "string" == typeof t
                        ? this.isLoon()
                            ? t
                            : this.isQuanX()
                                ? { "open-url": t }
                                : void 0
                        : "object" == typeof t && (t["open-url"] || t["media-url"])
                            ? this.isLoon()
                                ? t["open-url"]
                                : this.isQuanX()
                                    ? t
                                    : void 0
                            : void 0;
            this.isMute ||
                (this.isSurge() || this.isLoon()
                    ? $notification.post(s, e, i, h(o))
                    : this.isQuanX() && $notify(s, e, i, h(o)));
            let logs = ["", "==============📣系统通知📣=============="];
            logs.push(t);
            e ? logs.push(e) : "";
            i ? logs.push(i) : "";
            console.log(logs.join("\n"));
            this.logs = this.logs.concat(logs);
        }
        log(...t) {
            t.length > 0 && (this.logs = [...this.logs, ...t]),
                console.log(t.join(this.logSeparator));
        }
        logErr(t, s) {
            const e = !this.isSurge() && !this.isQuanX() && !this.isLoon();
            e
                ? this.log("", `\u2757\ufe0f${this.name},\u9519\u8bef!`, t.stack)
                : this.log("", `\u2757\ufe0f${this.name},\u9519\u8bef!`, t);
        }
        wait(t) {
            return new Promise((s) => setTimeout(s, t));
        }
        done(t = {}) {
            const s = new Date().getTime(),
                e = (s - this.startTime) / 1e3;
            this.log(
                "",
                `\ud83d\udd14${this.name},\u7ed3\u675f!\ud83d\udd5b ${e}\u79d2`
);
            this.log();
            if (this.isNode()) {
                process.exit(1);
            }
            if (this.isQuanX()) {
                $done(t);
            }
        }
    })(t, s);

​

请记住,这篇介绍旨在技术分享,使用此类脚本时,请遵守相关平台的规定,感兴趣的可以交流*

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1995593.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

通用人工智能的中国道路

朱松纯 北京大学智能学院院长 北京大学人工智能研究院院长 《为机器立心》、《为人文赋理》 1 什么是“人”——解构人文的认知架构与UV理论 从物体,到生命体、智能体、智人。。。 生命度(Animacy):物体与智能体的边界&#xff0…

LLC数字控制TMS320F28034,4-DSP的epwm配置介绍

LLC数字控制TMS320F28034,4-DSP的epwm配置介绍 1 TMS320F280341.1 概述1.2 PWM详细介绍 2 TMS320F28034 PWM功能框图2.1 ePWM功能模块2.2 ePWM功能寄存器框图 3 TMS320F28034 PWM初始化流程4 结合项目设计5 代码设计5.1 PWM初始化程序5.2 工程代码 6 总结 配套代码示…

OpenCV图像滤波(9)getGaussianKernel()函数的使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 功能描述 cv::getGaussianKernel() 是 OpenCV 中的一个函数,用于生成一维高斯核。这种核通常用于实现高斯模糊滤波器,该滤波器可以…

系统编程 day6 文件5

今天编写小程序实现minishell(简易版文件操作命令函数编写以及实现) 编写过程,以及部分代码展示 终端实现minishell部分功能展示

fastadmin 实现标签打印

项目场景如图,需要打印一批条形码或者二维码,除了市面上成熟的标签机之外,今天挑战一下使用普通的打印机不干胶贴纸,实现低成本的标签打印; 项目框架基于 fastadmin: 1、项目对应的js添加打印按钮的事件监…

C语言指针详解-包过系列(二)目录版

C语言指针详解-包过系列(二)目录版 1、数组名的深入理解1.1、数组名的本质1.2、数组名本质的两个例外1.2.1、sizeof(数组名)1.2.2、&数组名 2、使用指针访问数组3、一维数组传参本质4、二级指针4.1、二级指针介绍4.2、二级指针…

5个国内大厂的AI写真神器,连影楼老板都在用!看看你用过几个

大家好,我是程序员X小鹿,前互联网大厂程序员,自由职业2年,也一名 AIGC 爱好者,持续分享更多前沿的「AI 工具」和「AI副业玩法」,欢迎一起交流~ 如果你的女朋友再缠着你,要你陪她去拍写真&#x…

kickstart自动脚本制作

克隆7主机,配置网络 安装图形 yum group install "Server with GUI" -y 有的话直接切换 init 5 关闭 Vmware dhcp 安装图形化生成kickstar自动安装脚本的工具 yum install system-config-kickstart -y 配置http 安装 yum install httpd -y 启动服务…

Advanced IP Scanner - 网络扫描工具介绍

Advanced IP Scanner 是一款免费、快速且用户友好的网络扫描工具。它能够帮助用户扫描局域网(LAN)中的所有设备,提供详细的设备信息,包括IP地址、MAC地址、设备名称和厂商信息。该工具对IT管理员和普通用户都非常有用,…

CMake内置模块

2024年8月9日,周五晚上 很久没写博客了,主要是最近很长一段时间都在备考研究生 简介 CMake附带了一系列内置模块,这些模块提供了许多常用的功能和宏,以帮助用户在构建项目时完成各种任务。 CMake的内置模块有哪些? …

解锁创意之门:如何使用DALL·E-3创作惊艳的图像

在这个视觉驱动的时代,图像已经成为表达创意和传递信息的重要媒介。最近,OpenAI发布了新一代的图像生成模型——DALLE-3,它以其卓越的生成能力和细致的图像质量迅速成为了创意工作者的热门工具。今天,我将带你一步步了解如何使用D…

springboot中小型酒店管理系统02793

摘要 随着互联网和移动技术的快速发展,酒店行业也面临着巨大的变革和机遇。传统的酒店管理方式存在着信息不透明、预订流程繁琐等问题,无法满足现代消费者对便捷、高效、个性化服务的需求。因此,开发中小型酒店管理系统具有重要的意义。本文旨…

[论文阅读]Mobility-Aware Cooperative Caching in VEC Based on CAFR

论文:Mobility-Aware Cooperative Caching in Vehicular Edge Computing Based on Asynchronous Federated and DRL JSTSP 2022 基于异步联邦和深度强化学习的车载边缘计算移动感知协同缓存 一、Introduction background: 随着车联网(IoV&…

数据结构--单链

#include "link.h" plink get_head() { plink pmalloc(sizeof(Link)); if(pNULL) { printf("申情节点失败\n"); return NULL; } p->len0; p->nextNULL; return p; } void head_insert(plink L,int a) {…

AI动漫生成工具,文生图转换图生视频功能,低成本使用AI工具做项目。AI工具搭建开发。

目录 前言: 一、AI文生动漫有哪些功能? 二、如何低价使用AI工具? 三、AI工具适合现在做哪些互联网项目? 总结: 前言: AI动漫原理就是通过文字描述来生成图片,然后对文本配上语音和音乐生成…

[极客大挑战 2019]FinalSQL1

打开题目 sql注入,点击1试一下 点击2试一下 点击3试一下 点击4 点击5 id6试一下 感觉是sql盲注了 编写脚本 import requests import string from time import sleep url "http://9da9cb18-3096-413a-9476-8a177ffec31a.node4.buuoj.cn:81/search.php?id0^(…

陶瓷材质的防静电架空地板越来越受欢迎的原因

目前市面上的陶瓷防静电架空地板主要分为两种:钢基和硫酸钙基。前者是以全钢冲孔裸板作为板基,经粘接、固定整型和灌浆的方式加工而成,后者是以复合硫酸钙板为基材,表面粘接防静电陶瓷砖,四周导电PVC边条封边。近年来陶…

【网络】套接字socket编程预备知识

1.源IP地址和目的IP 计算机网络中的源地址和目的地址是用来标识网络中的不同主机的。 源地址是指发送数据包的主机的地址,而目的地址则是指接收数据包的主机的地址,在数据包传输过程中,每经过一个路中器感交换机,都会根据目的地址…

乒乓球AI机器人赢了人类!正反手灵活转换,擦网球高球都能接,专业教练:达到中级选手水平

巴黎奥运会乒乓球团体赛如火如荼,谷歌机器人申请出战—— 首个达到人类竞技水平的机器人Agent发布! 你看一个没留神,就赢了专业教练一个球! 正反手快速转换,连续进攻也是不在话下~ 面对一些突发战术,比如…

在线办公小程序的设计

管理员账户功能包括:系统首页,个人中心,通知公告管理,员工管理,部门信息管理,职位信息管理,会议记录管理,待办事项管理,系统管理 微信端账号功能包括:系统首…