mirror of
https://github.com/ZZZure/ZZZ-Plugin.git
synced 2025-12-16 05:07:46 +00:00
feat:国际服更新抽卡记录
This commit is contained in:
parent
b0f887c8f0
commit
cd5ad2457a
4 changed files with 113 additions and 38 deletions
|
|
@ -124,7 +124,19 @@ export class GachaLog extends ZZZPlugin {
|
||||||
async refreshGachaLog() {
|
async refreshGachaLog() {
|
||||||
const uid = await this.getUID();
|
const uid = await this.getUID();
|
||||||
if (/^(1[0-9])[0-9]{8}/i.test(uid)) {
|
if (/^(1[0-9])[0-9]{8}/i.test(uid)) {
|
||||||
return this.reply('国际服不支持此功能');
|
const { api } = await this.getAPI();
|
||||||
|
this.reply('抽卡记录获取中请稍等...可能需要一段时间,请耐心等待');
|
||||||
|
const { data, count } = await updateGachaLog(api, uid);
|
||||||
|
let msg = [];
|
||||||
|
msg.push(`抽卡记录更新成功,共${Object.keys(data).length}个卡池`);
|
||||||
|
for (const name in data) {
|
||||||
|
msg.push(
|
||||||
|
`${name}新增${count[name] || 0}条记录,一共${data[name].length}条记录`
|
||||||
|
);
|
||||||
|
}
|
||||||
|
return this.reply(
|
||||||
|
await common.makeForwardMsg(this.e, msg.join('\n'), '抽卡记录更新成功')
|
||||||
|
);
|
||||||
}
|
}
|
||||||
if (!uid) return false;
|
if (!uid) return false;
|
||||||
const lastQueryTime = await redis.get(`ZZZ:GACHA:${uid}:LASTTIME`);
|
const lastQueryTime = await redis.get(`ZZZ:GACHA:${uid}:LASTTIME`);
|
||||||
|
|
|
||||||
94
lib/gacha.js
94
lib/gacha.js
|
|
@ -4,6 +4,9 @@ import { rank } from './convert.js';
|
||||||
import { getGachaLog, saveGachaLog } from './db.js';
|
import { getGachaLog, saveGachaLog } from './db.js';
|
||||||
import {
|
import {
|
||||||
gacha_type_meta_data,
|
gacha_type_meta_data,
|
||||||
|
gacha_type_meta_data_os,
|
||||||
|
item_type_os,
|
||||||
|
rarity_os,
|
||||||
FLOORS_MAP,
|
FLOORS_MAP,
|
||||||
HOMO_TAG,
|
HOMO_TAG,
|
||||||
EMOJI,
|
EMOJI,
|
||||||
|
|
@ -11,6 +14,7 @@ import {
|
||||||
} from './gacha/const.js';
|
} from './gacha/const.js';
|
||||||
import { getLevelFromList } from './gacha/tool.js';
|
import { getLevelFromList } from './gacha/tool.js';
|
||||||
import { getZZZGachaLogByAuthkey } from './gacha/core.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 = {};
|
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]) {
|
if (!previousLog[name]) {
|
||||||
// 如果没有数据,初始化为空数组
|
// 如果没有数据,初始化为空数组
|
||||||
previousLog[name] = [];
|
previousLog[name] = [];
|
||||||
|
|
@ -52,36 +57,71 @@ export const updateGachaLog = async (authKey, uid, region, game_biz) => {
|
||||||
// 新数据
|
// 新数据
|
||||||
const newData = [];
|
const newData = [];
|
||||||
// 遍历当前池子的所有类型
|
// 遍历当前池子的所有类型
|
||||||
for (const type of gacha_type_meta_data[name]) {
|
for (const type of gacha_type[name]) {
|
||||||
// 循环获取数据
|
// 循环获取数据
|
||||||
queryLabel: while (true) {
|
queryLabel: while (true) {
|
||||||
// 获取抽卡记录
|
if (/^(1[0-9])[0-9]{8}/i.test(uid)) {
|
||||||
const log = await getZZZGachaLogByAuthkey(
|
const api = authKey;
|
||||||
authKey,
|
// 获取抽卡记录
|
||||||
type,
|
const sdk = api.getUrl('zzzGacha_Record', { type, endId } );
|
||||||
type[0],
|
const res = await request(sdk.url, {
|
||||||
page,
|
headers: sdk.headers,
|
||||||
endId,
|
method: 'get',
|
||||||
region,
|
});
|
||||||
game_biz
|
const log = await res.json();
|
||||||
);
|
if (!log || !log?.data?.gacha_item_list || log?.data?.gacha_item_list?.length === 0) {
|
||||||
if (!log || !log?.list || log?.list?.length === 0) {
|
break;
|
||||||
break;
|
|
||||||
}
|
|
||||||
// 遍历数据 (从最新的开始)
|
|
||||||
for (const item of log.list) {
|
|
||||||
if (lastSaved && lastSaved.equals(item)) {
|
|
||||||
// 如果数据相同,说明已经获取完毕
|
|
||||||
break queryLabel;
|
|
||||||
}
|
}
|
||||||
// 添加到新数据中
|
// 遍历数据 (从最新的开始)
|
||||||
newData.push(item);
|
for (let item of log.data.gacha_item_list) {
|
||||||
// 当前池子新数据计数加一
|
item = {
|
||||||
newCount[name]++;
|
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);
|
await sleep(1000);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -6,6 +6,25 @@ export const gacha_type_meta_data = {
|
||||||
邦布频段: ['5001'],
|
邦布频段: ['5001'],
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export const gacha_type_meta_data_os = {
|
||||||
|
音擎频段: ['GACHA_TYPE_WEAPON_UP'],
|
||||||
|
独家频段: ['GACHA_TYPE_CHARACTER_UP'],
|
||||||
|
常驻频段: ['GACHA_TYPE_PERMANENT'],
|
||||||
|
邦布频段: ['GACHA_TYPE_BANGBOO'],
|
||||||
|
};
|
||||||
|
|
||||||
|
export const item_type_os = {
|
||||||
|
ITEM_TYPE_WEAPON: '音擎',
|
||||||
|
ITEM_TYPE_AVATAR: '代理人',
|
||||||
|
ITEM_TYPE_BANGBOO: '邦布',
|
||||||
|
};
|
||||||
|
|
||||||
|
export const rarity_os = {
|
||||||
|
B: '2',
|
||||||
|
A: '3',
|
||||||
|
S: '4',
|
||||||
|
};
|
||||||
|
|
||||||
// 欧非阈值
|
// 欧非阈值
|
||||||
export const FLOORS_MAP = {
|
export const FLOORS_MAP = {
|
||||||
邦布频段: [50, 70],
|
邦布频段: [50, 70],
|
||||||
|
|
|
||||||
|
|
@ -74,16 +74,6 @@ export default class ZZZApiTool {
|
||||||
url: `${this.host}event/nap_ledger/month_info`,
|
url: `${this.host}event/nap_ledger/month_info`,
|
||||||
query: `uid=${this.uid}®ion=${this.server}`,
|
query: `uid=${this.uid}®ion=${this.server}`,
|
||||||
},
|
},
|
||||||
zzzAuthKey: {
|
|
||||||
url: `${this.host}binding/api/genAuthKey`,
|
|
||||||
body: {
|
|
||||||
auth_appid: 'webview_gacha',
|
|
||||||
game_biz: this.gameBiz,
|
|
||||||
game_uid: this.uid * 1,
|
|
||||||
region: this.server,
|
|
||||||
},
|
|
||||||
dsSalt: 'web',
|
|
||||||
},
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -125,6 +115,16 @@ export default class ZZZApiTool {
|
||||||
},
|
},
|
||||||
noDs: true,
|
noDs: true,
|
||||||
},
|
},
|
||||||
|
zzzAuthKey: {
|
||||||
|
url: `${this.host}binding/api/genAuthKey`,
|
||||||
|
body: {
|
||||||
|
auth_appid: 'webview_gacha',
|
||||||
|
game_biz: this.gameBiz,
|
||||||
|
game_uid: this.uid * 1,
|
||||||
|
region: this.server,
|
||||||
|
},
|
||||||
|
dsSalt: 'web',
|
||||||
|
},
|
||||||
deviceLogin: {
|
deviceLogin: {
|
||||||
url: `${this.hostBbs}apihub/api/deviceLogin`,
|
url: `${this.hostBbs}apihub/api/deviceLogin`,
|
||||||
body: {
|
body: {
|
||||||
|
|
@ -163,6 +163,10 @@ export default class ZZZApiTool {
|
||||||
},
|
},
|
||||||
noDs: true,
|
noDs: true,
|
||||||
},
|
},
|
||||||
|
zzzGacha_Record: {
|
||||||
|
url: `${this.host}event/game_record_zzz/api/zzz/gacha_record`,
|
||||||
|
query: `lang=zh-cn&uid=${this.uid}®ion=${this.server}&gacha_type=${data.type}&end_id=${data.endId}`,
|
||||||
|
}
|
||||||
}),
|
}),
|
||||||
...this.zzzUrlMap,
|
...this.zzzUrlMap,
|
||||||
},
|
},
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue