feat:国际服更新抽卡记录

This commit is contained in:
kissnavel 2025-11-30 20:56:51 +08:00
parent b0f887c8f0
commit cd5ad2457a
4 changed files with 113 additions and 38 deletions

View file

@ -4,6 +4,9 @@ import { rank } from './convert.js';
import { getGachaLog, saveGachaLog } from './db.js';
import {
gacha_type_meta_data,
gacha_type_meta_data_os,
item_type_os,
rarity_os,
FLOORS_MAP,
HOMO_TAG,
EMOJI,
@ -11,6 +14,7 @@ import {
} from './gacha/const.js';
import { getLevelFromList } from './gacha/tool.js';
import { getZZZGachaLogByAuthkey } from './gacha/core.js';
import request from '../utils/request.js';
/**
* 更新抽卡数据
@ -35,7 +39,8 @@ export const updateGachaLog = async (authKey, uid, region, game_biz) => {
// 新的抽卡数据
let newCount = {};
// 遍历所有池子
for (const name in gacha_type_meta_data) {
let gacha_type = /^(1[0-9])[0-9]{8}/i.test(uid) ? gacha_type_meta_data_os : gacha_type_meta_data
for (const name in gacha_type) {
if (!previousLog[name]) {
// 如果没有数据,初始化为空数组
previousLog[name] = [];
@ -52,36 +57,71 @@ export const updateGachaLog = async (authKey, uid, region, game_biz) => {
// 新数据
const newData = [];
// 遍历当前池子的所有类型
for (const type of gacha_type_meta_data[name]) {
for (const type of gacha_type[name]) {
// 循环获取数据
queryLabel: while (true) {
// 获取抽卡记录
const log = await getZZZGachaLogByAuthkey(
authKey,
type,
type[0],
page,
endId,
region,
game_biz
);
if (!log || !log?.list || log?.list?.length === 0) {
break;
}
// 遍历数据 (从最新的开始)
for (const item of log.list) {
if (lastSaved && lastSaved.equals(item)) {
// 如果数据相同,说明已经获取完毕
break queryLabel;
if (/^(1[0-9])[0-9]{8}/i.test(uid)) {
const api = authKey;
// 获取抽卡记录
const sdk = api.getUrl('zzzGacha_Record', { type, endId } );
const res = await request(sdk.url, {
headers: sdk.headers,
method: 'get',
});
const log = await res.json();
if (!log || !log?.data?.gacha_item_list || log?.data?.gacha_item_list?.length === 0) {
break;
}
// 添加到新数据中
newData.push(item);
// 当前池子新数据计数加一
newCount[name]++;
// 遍历数据 (从最新的开始)
for (let item of log.data.gacha_item_list) {
item = {
id: item.id,
item_type: item_type_os[item.item_type],
item_id: item.item_id,
name: item.item_name,
rank_type: rarity_os[item.rarity],
time: `${item.date.year}-${item.date.month.toString().padStart(2, '0')}-${item.date.day.toString().padStart(2, '0')} ${item.date.hour.toString().padStart(2, '0')}:${item.date.minute.toString().padStart(2, '0')}:${item.date.second.toString().padStart(2, '0')}`,
}
if (lastSaved && lastSaved.equals(item)) {
// 如果数据相同,说明已经获取完毕
break queryLabel;
}
// 添加到新数据中
newData.push(item);
// 当前池子新数据计数加一
newCount[name]++;
}
// 更新页数和最后一个数据的 id
endId = log.data.gacha_item_list[log.data.gacha_item_list.length - 1]?.id || endId;
} else {
// 获取抽卡记录
const log = await getZZZGachaLogByAuthkey(
authKey,
type,
type[0],
page,
endId,
region,
game_biz
);
if (!log || !log?.list || log?.list?.length === 0) {
break;
}
// 遍历数据 (从最新的开始)
for (const item of log.list) {
if (lastSaved && lastSaved.equals(item)) {
// 如果数据相同,说明已经获取完毕
break queryLabel;
}
// 添加到新数据中
newData.push(item);
// 当前池子新数据计数加一
newCount[name]++;
}
// 更新页数和最后一个数据的 id
endId = log.list[log.list.length - 1]?.id || endId;
page++;
}
// 更新页数和最后一个数据的 id
endId = log.list[log.list.length - 1]?.id || endId;
page++;
// 防止请求过快
await sleep(1000);
}