「这是我参与2022首次更文挑战的第1天,活动详情查看:2022首次更文挑战」
作为一名前端,经常使用js,但是写脚本却从未有过,贴吧自动签到以及掘金的自动签到都是fork别人的仓库代码,本着学习的态度,我也想动手写一个关于自动挖矿的,对于写这个有什么用,我只能说我学习了如何用nodeJs。
完整代码
搭建环境
我之前写过一篇《以吾爱破解的方式打开海底挖矿》,关于挖矿需要两个账号认证机制的参数,token
和uuid
,
然后在这里改成了掘金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
项目的文件结构如下图所示
功能
签到和抽奖
分析:
- 判断cookie是否存在
- 签到
- 签到成功后,免费抽奖一次
- 沾喜气,无需签到即可,每天一次
代码
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
海底挖矿
分析
- 获取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运行
运行情况
经过几天的测试,情况还是可以的