Files
qinglong/脚本库/web版/抓包/库街区/2025-04-28_sudojia_kuro_7a82b07b.js
2026-05-24 05:33:05 +00:00

359 lines
12 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// # Source: https://github.com/sudojia/AutoTaskScript/blob/script/src/client/sudojia_kuro.js
// # Raw: https://raw.githubusercontent.com/sudojia/AutoTaskScript/script/src/client/sudojia_kuro.js
// # Repo: sudojia/AutoTaskScript
// # Path: src/client/sudojia_kuro.js
// # UploadedAt: 2025-04-28T19:26:13+08:00
// # SHA256: 7a82b07b5b966777c41ba1b02a299c70bcbb4f4826c0ada827c429b9c7874181
// # Category: web版/抓包
// # Evidence: web/H5关键词 + cookie/token/header
//
/**
* 库街区-鸣潮-战双每日签到 https://www.kurobbs.com/
*
* 第一种:打开 APP 登录,抓包 Hosthttps://api.kurobbs.com 找到请求头 token
* 第二种:浏览器打开库街区,登录之后 F12 -> Application -> 左侧 Local storage -> 找到 auth_token 复制其 Value
* export KURO_TOKEN = 'xxxxx'
* 多账号用 & 或换行
*
* @author Telegram@sudojia
* @site https://blog.imzjw.cn
* @date 2024/6/10
*
* const $ = new Env('库街区')
* cron: 22 8 * * *
*/
const initScript = require('../utils/initScript')
const {$, notify, sudojia, checkUpdate} = initScript('库街区');
const moment = require("moment");
const kuroList = process.env.KURO_TOKEN ? process.env.KURO_TOKEN.split(/[\n&]/) : [];
let message = '';
// 接口地址
const baseUrl = 'https://api.kurobbs.com'
// 存储战双的serviceId和roleId
const zsIds = [];
!(async () => {
await checkUpdate($.name, kuroList);
for (let i = 0; i < kuroList.length; i++) {
const index = i + 1;
const kuroToken = kuroList[i];
// 默认为 H5
$.source = 'h5';
console.log(`\n*****第[${index}]个${$.name}账号*****`);
console.log(`正在检测 Token 有效性...`)
const isToken = await isAvailable(kuroToken);
if (!isToken) {
console.error(`Token 已失效`);
await notify.sendNotify(`「Token失效通知」`, `${$.name}账号[${index}] Token 已失效,请重新登录获取 Token\n\n`);
continue;
}
message += `📣====${$.name}账号[${index}]====📣\n`;
await $.wait(sudojia.getRandomWait(800, 1200));
console.log(`Token 有效`);
await main(kuroToken);
await $.wait(sudojia.getRandomWait(2000, 3000));
}
if (message) {
await notify.sendNotify(`${$.name}`, `${message}`);
}
})().catch((e) => $.logErr(e)).finally(() => $.done());
async function main(kuroToken) {
// 社区签到
await kuroSignIn(kuroToken);
await $.wait(sudojia.getRandomWait(1300, 2300))
// 账户库洛币查询
await getTotalGold(kuroToken);
await $.wait(sudojia.getRandomWait(1500, 2600))
// 鸣潮签到
await mcSignIn(kuroToken);
await $.wait(sudojia.getRandomWait(1500, 3000))
// 鸣潮签到奖励查询
await queryRecordMc(kuroToken);
await $.wait(sudojia.getRandomWait(1200, 2600));
// 检测战双是否有角色
const isHaveRole = await getServerAndRoleId(kuroToken);
if (!isHaveRole) {
console.log('检测到战双没有角色,放弃战双签到');
return;
}
await $.wait(sudojia.getRandomWait(1300, 2500));
// 战双签到
const [zs] = zsIds;
await zsSignIn(kuroToken, zs.serverId, zs.roleId);
await $.wait(sudojia.getRandomWait(1300, 2500));
// 战双签到奖励查询
await queryRecordZs(kuroToken, zs.serverId, zs.roleId);
}
/**
* 检测库街区Token是否有效
*
* @param kuroToken
* @param retry
* @return {Promise<boolean>}
*/
async function isAvailable(kuroToken, retry = 1) {
await $.wait(sudojia.getRandomWait(2000, 2800));
try {
const data = await sudojia.sendRequest(`${baseUrl}/gamer/widget/game3/refresh`, 'post', {
"source": $.source,
'token': kuroToken,
}, `type=2&sizeType=1`);
if (220 === data.code) {
if (2 === retry) {
console.log(`\n${data.msg}`);
console.log(`\n已超过最大重试次数:${retry},请正确获取 Token`);
return false;
}
console.log(`\n${retry}次检测 token 失效,正在尝试第${retry + 1}`);
$.source = 'android';
return isAvailable(kuroToken, retry + 1);
} else {
$.serverId = data.data.serverId;
$.userId = data.data.userId;
$.roleId = data.data.roleId;
return true;
}
} catch (e) {
console.error(`检测Token发生异常${e}`);
return false;
}
}
/**
* 检测战双是否有角色
*
* @param kuroToken
* @return {Promise<boolean>}
*/
async function getServerAndRoleId(kuroToken) {
try {
const devCode = [...Array(40)].map(() => 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'[(Math.random() * 36) | 0]).join('');
const data = await sudojia.sendRequest(`${baseUrl}/gamer/widget/game2/refresh`, 'post', {
"source": $.source,
'token': kuroToken,
'devcode': devCode,
}, `gameId=2&type=1&sizeType=1`);
if (!data.data) {
return false;
}
if (200 === data.code) {
console.log(`检测到战双有角色,开始战双每日签到...`);
zsIds.push({
serverId: data.data.serverId,
roleId: data.data.roleId,
});
return true;
} else {
console.log(`${data.msg}`);
return false;
}
} catch (e) {
console.error(`检测战双角色发生异常:${e}`);
return false;
}
}
/**
* 账户总库洛币
*
* @param kuroToken
* @return {Promise<void>}
*/
async function getTotalGold(kuroToken) {
try {
const data = await sudojia.sendRequest(`${baseUrl}/encourage/gold/getTotalGold`, 'post', {
"source": $.source,
'token': kuroToken,
}, ``);
if (200 === data.code) {
message += `当前账户库洛币:${data.data.goldNum}\n`
} else {
console.log(`获取账户库洛币失败,${data.msg}`);
}
} catch (e) {
console.error(`获取账户库洛币发生异常:${e}`);
}
}
/**
* 社区签到
*
* @param kuroToken
* @return {Promise<void>}
*/
async function kuroSignIn(kuroToken) {
try {
console.log(`开始社区签到...`)
const data = await sudojia.sendRequest(`${baseUrl}/user/signIn`, 'post', {
"source": $.source,
'token': kuroToken,
}, `gameId=2`);
if (data.code === 200) {
if (null === data.data) {
console.log('签到失败返回数据为null请检查库街区展示是否打开');
return;
}
// 签到获得的库洛币
const gainValue = data.data.gainVoList[0].gainValue;
// 签到天数
const continueDays = data.data.continueDays;
console.log(`社区签到获得${gainValue}库洛币、连签${continueDays}`);
message += `社区签到获得${gainValue}库洛币、连签${continueDays}\n`
} else {
message += `社区签到失败:${data.msg}\n`
console.log(`社区签到失败:${data.msg}`);
}
} catch (e) {
console.error(`社区签到发生异常:${e}`);
}
}
/**
* 鸣潮签到
*
* @param kuroToken
* @return {Promise<void>}
*/
async function mcSignIn(kuroToken) {
console.log(`开始鸣潮每日签到...`);
try {
const reqMonth = (new Date().getMonth() + 1).toString().padStart(2, '0')
const devCode = [...Array(40)].map(() => 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'[(Math.random() * 36) | 0]).join('');
const params = `gameId=3&serverId=${$.serverId}&roleId=${$.roleId}&userId=${$.userId}&reqMonth=${reqMonth}`
const data = await sudojia.sendRequest(`${baseUrl}/encourage/signIn/v2`, 'post', {
"source": $.source,
'token': kuroToken,
'devcode': devCode,
}, params);
if (data.code === 200) {
if (data.data === null) {
console.error('签到失败返回数据为null请检查库街区展示是否打开');
return;
}
message += `鸣潮每日签到成功\n`
console.log(`鸣潮每日签到成功`);
} else if (data.code === 1511) {
message += `鸣潮签到失败:${data.msg}\n`;
console.log(`鸣潮签到失败:${data.msg}`);
} else {
console.log(`鸣潮其它错误:${data.msg}`);
}
} catch (e) {
console.error(`鸣潮签到发生异常:${e}`);
}
}
/**
* 鸣潮获取签到奖励
*
* @param kuroToken
* @return {Promise<void>}
*/
async function queryRecordMc(kuroToken) {
try {
const params = `gameId=3&serverId=${$.serverId}&roleId=${$.roleId}&userId=${$.userId}`
const data = await sudojia.sendRequest(`${baseUrl}/encourage/signIn/queryRecordV2`, 'post', {
"source": $.source,
'token': kuroToken,
}, params);
if (data.code === 200) {
if (data.data === null) {
console.error('鸣潮获取签到奖励失败返回数据为null');
return;
}
message += `鸣潮今日签到奖励:`
for (const item of data.data) {
if (item.sigInDate) {
const signInDateOnly = moment(item.sigInDate).format('YYYY-MM-DD');
const currentDate = moment().format('YYYY-MM-DD');
if (signInDateOnly === currentDate) {
let goodsName = item.goodsName;
let goodsNum = item.goodsNum
message += `${goodsName}x${goodsNum} `
}
}
}
message += `\n`
}
} catch (e) {
console.error(`获取鸣潮签到奖励时发生异常:${e}`);
}
}
/**
* 战双签到
*
* @param kuroToken
* @param serverId
* @param roleId
* @return {Promise<void>}
*/
async function zsSignIn(kuroToken, serverId, roleId) {
try {
const reqMonth = (new Date().getMonth() + 1).toString().padStart(2, '0')
const devCode = [...Array(40)].map(() => 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'[(Math.random() * 36) | 0]).join('');
const params = `gameId=2&serverId=${serverId}&roleId=${roleId}&userId=${$.userId}&reqMonth=${reqMonth}`
const data = await sudojia.sendRequest(`${baseUrl}/encourage/signIn/v2`, 'post', {
"source": $.source,
'token': kuroToken,
'devcode': devCode,
}, params);
if (data.code === 200) {
if (data.data === null) {
console.error('签到失败返回数据为null请检查库街区展示是否打开');
return;
}
message += `战双每日签到成功\n`
console.log(`战双每日签到成功`);
} else if (data.code === 1511) {
message += `战双签到失败:${data.msg}\n`;
console.log(`战双签到失败:${data.msg}`);
} else {
console.log(`战双其它错误:${data.msg}`);
}
} catch (e) {
console.error(`战双签到时发生异常:${e}`);
}
}
/**
* 战双获取签到奖励
*
* @param kuroToken
* @param serverId
* @param roleId
* @return {Promise<void>}
*/
async function queryRecordZs(kuroToken, serverId, roleId) {
try {
const params = `gameId=2&serverId=${serverId}&roleId=${roleId}&userId=${$.userId}`
const data = await sudojia.sendRequest(`${baseUrl}/encourage/signIn/queryRecordV2`, 'post', {
"source": $.source,
'token': kuroToken,
}, params);
if (data.code === 200) {
if (data.data === null) {
console.error('战双获取签到奖励失败返回数据为null');
return;
}
message += `战双今日签到奖励:`
for (const item of data.data) {
if (item.sigInDate) {
const signInDateOnly = moment(item.sigInDate).format('YYYY-MM-DD');
const currentDate = moment().format('YYYY-MM-DD');
if (signInDateOnly === currentDate) {
let goodsName = item.goodsName;
let goodsNum = item.goodsNum
message += `${goodsName}x${goodsNum} `
}
}
}
message += `\n\n`
}
} catch (e) {
console.error(`获取战双签到奖励发生异常:${e}`);
}
}