特性
- 掘金签到!
- 🌟沾喜气!
- 🌟幸运值统计!
- 免费抽奖!
- 奖品统计!
- 👻消除Bug!
- 🎮 海底掘金游戏!
- 🥳 自动化工作流!
- 📫 邮件通知!
- 🚀 钉钉机器人!
- 🚀 微信Webhook!
- 🚀 PushPlus通知!
自动化
- 稀土掘金助手 - 签到、抽奖、沾喜气、消除Bug、海底掘金游戏、自动化工作流。
自动化工作流支持 邮件通知
、钉钉机器人
、微信Webhook
和 PushPlus通知
.
预览
掘金每日签到 | 海底掘金游戏 |
---|---|
海底掘金游戏Tips
- 每日上限以当日为准.
- 每局地图以当局为准(会存在上下文地图相同状况,具体情况由掘金官方每局派发为准).
自定义脚本
安装
npm i juejin-helper
示例
const JuejinHelper = require("juejin-helper");
const juejin = new JuejinHelper();
await juejin.login("你的掘金Cookie");
const growth = juejin.growth();
await growth.checkIn(); // 签到
// dream code...
await juejin.logout();
更多示例请访问 juejin-helper
网页版
👇复制代码,打开控制台并粘贴,即可一梭到底!
梭哈脚本(签到+沾喜气+免费抽奖+梭哈)
!(({ api, console, utils }) => {
const state = {
simulateSpeed: 100, // ms/进行一次抽奖
sumPoint: 0,
pointCost: 0,
supplyPoint: 0,
freeCount: 0,
luckyValue: 0,
lottery: [],
counter: 0,
prize: {}
};
!(async () => {
await utils.wait(100);
console.clear();
try {
const checkInResult = await api.checkIn();
console.log(checkInResult);
const incrPoint = checkInResult.incr_point;
console.log(`签到成功 +${incrPoint} 矿石`);
const sumPoint = checkInResult.sum_point;
state.sumPoint = sumPoint;
} catch (e) {
console.log(e.message);
const sumPoint = await api.getCurrentPoint();
state.sumPoint = sumPoint;
}
try {
const luckyusersResult = await api.getLotteriesLuckyUsers();
if (luckyusersResult.count > 0) {
const no1LuckyUser = luckyusersResult.lotteries[0];
const dipLuckyResult = await api.dipLucky(no1LuckyUser.history_id);
if (dipLuckyResult.has_dip) {
console.log(`今天你已经沾过喜气,明天再来吧!`);
} else {
console.log(`沾喜气 +${dipLuckyResult.dip_value} 幸运值`);
}
}
} catch {}
console.log(`当前余额:${state.sumPoint} 矿石`);
const luckyResult = await api.getMyLucky();
state.luckyValue = luckyResult.total_value;
console.log(`当前幸运值:${state.luckyValue}/6000`);
const lotteryConfig = await api.getLotteryConfig();
state.lottery = lotteryConfig.lottery;
state.pointCost = lotteryConfig.point_cost;
state.freeCount = lotteryConfig.free_count;
state.sumPoint += state.freeCount * state.pointCost;
console.log(`免费抽奖次数: ${state.freeCount}`);
console.log(`准备梭哈!`);
console.logGroupStart("奖品实况");
const getSupplyPoint = draw => {
const maybe = [
["lottery_id", "6981716980386496552"],
["lottery_name", "随机矿石"],
["lottery_type", 1]
];
if (maybe.findIndex(([prop, value]) => draw[prop] === value) !== -1) {
const supplyPoint = Number.parseInt(draw.lottery_name);
if (!isNaN(supplyPoint)) {
return supplyPoint;
}
}
return 0;
};
const lottery = async () => {
const result = await api.drawLottery();
state.sumPoint -= state.pointCost;
state.sumPoint += getSupplyPoint(result);
state.luckyValue += result.draw_lucky_value;
state.counter++;
state.prize[result.lottery_name] = (state.prize[result.lottery_name] || 0) + 1;
console.log(`[第${state.counter}抽]:${result.lottery_name}`);
};
while (state.freeCount > 0) {
await lottery();
state.freeCount--;
await utils.wait(state.simulateSpeed);
}
while (state.sumPoint >= state.pointCost) {
await lottery();
await utils.wait(state.simulateSpeed);
}
console.logGroupEnd("奖品实况");
console.log(`弹药不足,当前余额:${state.sumPoint} 矿石`);
console.log(`养精蓄锐来日再战!`);
const recordInfo = [];
recordInfo.push("=====[战绩详情]=====");
if (state.counter > 0) {
const prizeList = [];
for (const key in state.prize) {
prizeList.push(`${key}: ${state.prize[key]}`);
}
recordInfo.push(...prizeList);
recordInfo.push("-------------------");
recordInfo.push(`共计: ${state.counter}`);
} else {
recordInfo.push("暂无奖品");
}
recordInfo.push("+++++++++++++++++++");
recordInfo.push(`幸运值: ${state.luckyValue}/6000`);
recordInfo.push("===================");
console.log(recordInfo.join("\n"));
})();
})(
(() => {
const cs = (() => {
const result = [];
return {
done: () => (typeof completion === "function" && completion(result), (result.length = 0)),
log: msg => (result.push(msg), console.log(msg)),
clear: () => ((result.length = 0), console.clear()),
logGroupStart: name => console.group(name),
logGroupEnd: name => console.groupEnd(name)
};
})();
const api = (() => {
return {
async fetch({ path, method, data }) {
return fetch(`https://api.juejin.cn/growth_api/v1${path}`, {
headers: {
cookie: document.cookie
},
method: method,
body: JSON.stringify(data),
credentials: "include"
})
.then(res => res.json())
.then(res => {
if (res.err_no) {
throw new Error(res.err_msg);
}
return res.data;
});
},
async get(path) {
return this.fetch({ path, method: "GET" });
},
async post(path, data) {
return this.fetch({ path, method: "POST", data });
},
async getLotteryConfig() {
return this.get("/lottery_config/get");
},
async getCurrentPoint() {
return this.get("/get_cur_point");
},
async drawLottery() {
return this.post("/lottery/draw");
},
async checkIn() {
return this.post("/check_in");
},
async getLotteriesLuckyUsers() {
return this.post("/lottery_history/global_big", {
page_no: 1,
page_size: 5
});
},
async dipLucky(lottery_history_id) {
return this.post("/lottery_lucky/dip_lucky", {
lottery_history_id
});
},
async getMyLucky() {
return this.post("/lottery_lucky/my_lucky");
}
};
})();
const utils = (() => {
return {
async wait(time = 0) {
return new Promise(resolve => setTimeout(resolve, time));
}
};
})();
return { console: cs, api, utils };
})()
);
祝你好运!
抽奖截图
效果示意仅供参考!
签到脚本(签到+沾喜气+免费抽奖)
!(({ api, console, utils }) => {
const state = {
simulateSpeed: 100, // ms/进行一次抽奖
sumPoint: 0,
pointCost: 0,
supplyPoint: 0,
freeCount: 0,
luckyValue: 0,
lottery: [],
counter: 0,
prize: {}
};
!(async () => {
await utils.wait(100);
console.clear();
try {
const checkInResult = await api.checkIn();
console.log(checkInResult);
const incrPoint = checkInResult.incr_point;
console.log(`签到成功 +${incrPoint} 矿石`);
const sumPoint = checkInResult.sum_point;
state.sumPoint = sumPoint;
} catch (e) {
console.log(e.message);
const sumPoint = await api.getCurrentPoint();
state.sumPoint = sumPoint;
}
try {
const luckyusersResult = await api.getLotteriesLuckyUsers();
if (luckyusersResult.count > 0) {
const no1LuckyUser = luckyusersResult.lotteries[0];
const dipLuckyResult = await api.dipLucky(no1LuckyUser.history_id);
if (dipLuckyResult.has_dip) {
console.log(`今天你已经沾过喜气,明天再来吧!`);
} else {
console.log(`沾喜气 +${dipLuckyResult.dip_value} 幸运值`);
}
}
} catch {}
console.log(`当前余额:${state.sumPoint} 矿石`);
const luckyResult = await api.getMyLucky();
state.luckyValue = luckyResult.total_value;
console.log(`当前幸运值:${state.luckyValue}/6000`);
const lotteryConfig = await api.getLotteryConfig();
state.lottery = lotteryConfig.lottery;
state.pointCost = lotteryConfig.point_cost;
state.freeCount = lotteryConfig.free_count;
state.sumPoint += state.freeCount * state.pointCost;
console.log(`免费抽奖次数: ${state.freeCount}`);
console.log(`准备免费抽奖!`);
console.logGroupStart("奖品实况");
const getSupplyPoint = draw => {
const maybe = [
["lottery_id", "6981716980386496552"],
["lottery_name", "随机矿石"],
["lottery_type", 1]
];
if (maybe.findIndex(([prop, value]) => draw[prop] === value) !== -1) {
const supplyPoint = Number.parseInt(draw.lottery_name);
if (!isNaN(supplyPoint)) {
return supplyPoint;
}
}
return 0;
};
const lottery = async () => {
const result = await api.drawLottery();
state.sumPoint -= state.pointCost;
state.sumPoint += getSupplyPoint(result);
state.luckyValue += result.draw_lucky_value;
state.counter++;
state.prize[result.lottery_name] = (state.prize[result.lottery_name] || 0) + 1;
console.log(`[第${state.counter}抽]:${result.lottery_name}`);
};
while (state.freeCount > 0) {
await lottery();
state.freeCount--;
await utils.wait(state.simulateSpeed);
}
console.logGroupEnd("奖品实况");
console.log(`弹药不足,当前余额:${state.sumPoint} 矿石`);
console.log(`养精蓄锐来日再战!`);
const recordInfo = [];
recordInfo.push("=====[战绩详情]=====");
if (state.counter > 0) {
const prizeList = [];
for (const key in state.prize) {
prizeList.push(`${key}: ${state.prize[key]}`);
}
recordInfo.push(...prizeList);
recordInfo.push("-------------------");
recordInfo.push(`共计: ${state.counter}`);
} else {
recordInfo.push("暂无奖品");
}
recordInfo.push("+++++++++++++++++++");
recordInfo.push(`幸运值: ${state.luckyValue}/6000`);
recordInfo.push("===================");
console.log(recordInfo.join("\n"));
})();
})(
(() => {
const cs = (() => {
const result = [];
return {
done: () => (typeof completion === "function" && completion(result), (result.length = 0)),
log: msg => (result.push(msg), console.log(msg)),
clear: () => ((result.length = 0), console.clear()),
logGroupStart: name => console.group(name),
logGroupEnd: name => console.groupEnd(name)
};
})();
const api = (() => {
return {
async fetch({ path, method, data }) {
return fetch(`https://api.juejin.cn/growth_api/v1${path}`, {
headers: {
cookie: document.cookie
},
method: method,
body: JSON.stringify(data),
credentials: "include"
})
.then(res => res.json())
.then(res => {
if (res.err_no) {
throw new Error(res.err_msg);
}
return res.data;
});
},
async get(path) {
return this.fetch({ path, method: "GET" });
},
async post(path, data) {
return this.fetch({ path, method: "POST", data });
},
async getLotteryConfig() {
return this.get("/lottery_config/get");
},
async getCurrentPoint() {
return this.get("/get_cur_point");
},
async drawLottery() {
return this.post("/lottery/draw");
},
async checkIn() {
return this.post("/check_in");
},
async getLotteriesLuckyUsers() {
return this.post("/lottery_history/global_big", {
page_no: 1,
page_size: 5
});
},
async dipLucky(lottery_history_id) {
return this.post("/lottery_lucky/dip_lucky", {
lottery_history_id
});
},
async getMyLucky() {
return this.post("/lottery_lucky/my_lucky");
}
};
})();
const utils = (() => {
return {
async wait(time = 0) {
return new Promise(resolve => setTimeout(resolve, time));
}
};
})();
return { console: cs, api, utils };
})()
);
祝你好运!
Good luck!