自动签到,抽奖和挖矿之如何实现自动化完成任务

4,852 阅读3分钟

「这是我参与2022首次更文挑战的第1天,活动详情查看:2022首次更文挑战

作为一名前端,经常使用js,但是写脚本却从未有过,贴吧自动签到以及掘金的自动签到都是fork别人的仓库代码,本着学习的态度,我也想动手写一个关于自动挖矿的,对于写这个有什么用,我只能说我学习了如何用nodeJs。

完整代码

项目地址

搭建环境

我之前写过一篇《以吾爱破解的方式打开海底挖矿,关于挖矿需要两个账号认证机制的参数,tokenuuid

然后在这里改成了掘金cookie和挖矿需要的token

所以在nodeJs中,我们要配置环境变量,这里需要依赖包 dotenv

"dependencies": {

  "axios": "^0.24.0", // http 请求需要

  "dotenv": "^10.0.0", // 环境变量配置依赖

  "express": "^4.17.2",

  "jsonwebtoken": "^8.5.1" // x-game-id的加密方式

},

创建项目

npm init

安装依赖

npm install

npm install axios dotenv express jsonwebtoken

创建文件夹及js

项目的文件结构如下图所示

功能

签到和抽奖

分析:

  1. 判断cookie是否存在
  2. 签到
  3. 签到成功后,免费抽奖一次
  4. 沾喜气,无需签到即可,每天一次

代码

if(!COOKIE) {
  message('获取不到cookie,请检查设置')
} else {
  async function junJin() {
    try {
      // 先执行签到、抽奖以及沾喜气
      await jueJinApi.checkIn(); // 抽奖一次
      const drawResult = await jueJinApi.drawApi();
      const dipParams = { lottery_history_id: '7052109119238438925' };
      const dipResult = await jueJinApi.dipLucky(dipParams);
      message(`抽奖成功,获得:${drawResult.lottery_name}; 获取幸运点${dipResult.dip_value}, 当前幸运点${dipResult.total_value}`);
    } catch (e) {
      message(`有异常,请手动操作,${e.message}`);
    }
  }
  junJin().then(() => {});
}

这里说明一下,采用try catch的原因是用了多个await异步,需要捕获异常处理的信息;

es6.ruanyifeng.com/#docs/async

image.png

海底挖矿

分析

Untitled-2022-01-13-1334.png

  • 获取uuid,必须
  • 获取当天的矿石上限以及当天实际获取矿石
  • 开始游戏,选角色3
  • 发起指令,这里是有一段固定的json执行步骤
  • 结束游戏,获取当前的位置,即到达的深度
  • 未超过500米的,更换地图,进入下一步
  • 获取当天实际获取矿石和当天的矿石上限,没有超过,再次执行以上步骤

注意: 频繁的调用接口,会被服务器限制,大概10分钟后才能再次调用接口

所以我加了一段睡眠代码

// 暂停,避免快速请求以及频繁请求

async function sleep(delay) {

  return new Promise(((resolve) => setTimeout(resolve, delay)));
  
}

X-game-id的获取

这里可以在海底掘金页面中通过打断点的方式查看

function getXGameId(id) {
  const time = +new Date().getTime();
  return jwt.sign(
    {
      gameId: id,
      time: time,
      // eslint-disable-next-line max-len
    },
    "-----BEGIN EC PARAMETERS-----\nBggqhkjOPQMBBw==\n-----END EC PARAMETERS-----\n-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIDB7KMVQd+eeKt7AwDMMUaT7DE3Sl0Mto3LEojnEkRiAoAoGCCqGSM49\nAwEHoUQDQgAEEkViJDU8lYJUenS6IxPlvFJtUCDNF0c/F/cX07KCweC4Q/nOKsoU\nnYJsb4O8lMqNXaI1j16OmXk9CkcQQXbzfg==\n-----END EC PRIVATE KEY-----\n",
    {
      algorithm: "ES256",
      expiresIn: 2592e3,
      header: {
        alg: "ES256",
        typ: "JWT",
      },
    }
  );
}

微信通知

这里我们采用的是server酱微信推送消息

github Action部署

1、fork代码

2、填下cookie和token,如果需要推送消息的话,填下server酱的id

3、action运行

运行情况

经过几天的测试,情况还是可以的

image.png