From f09ad4b4213fa97afee97f009d3b7ae54ed788df Mon Sep 17 00:00:00 2001 From: bietiaop <1527109126@qq.com> Date: Sat, 13 Jul 2024 19:31:57 +0800 Subject: [PATCH] feat: coldtime --- apps/gachalog.js | 6 ++++-- apps/panel.js | 19 ++++++++++++++++--- defSet/gacha.yaml | 1 + defSet/panel.yaml | 1 + lib/common.js | 2 +- model/avatar.js | 2 +- 6 files changed, 24 insertions(+), 7 deletions(-) create mode 100644 defSet/gacha.yaml create mode 100644 defSet/panel.yaml diff --git a/apps/gachalog.js b/apps/gachalog.js index d62f02b..248e020 100644 --- a/apps/gachalog.js +++ b/apps/gachalog.js @@ -2,6 +2,7 @@ import { ZZZPlugin } from '../lib/plugin.js'; import render from '../lib/render.js'; import { rulePrefix } from '../lib/common.js'; import { getAuthKey } from '../lib/authkey.js'; +import settings from '../lib/settings.js'; import { anaylizeGachaLog, updateGachaLog, @@ -97,8 +98,9 @@ export class GachaLog extends ZZZPlugin { return false; } const lastQueryTime = await redis.get(`ZZZ:GACHA:${uid}:LASTTIME`); - if (lastQueryTime && Date.now() - lastQueryTime < 1000 * 60 * 5) { - await this.reply('1分钟内只能刷新一次,请稍后重试'); + const coldTime = settings.getConfig('panel').interval || 300; + if (lastQueryTime && Date.now() - lastQueryTime < 1000 * coldTime) { + await this.reply(`${coldTime}秒内只能刷新一次,请稍后再试`); return false; } await redis.set(`ZZZ:GACHA:${uid}:LASTTIME`, Date.now()); diff --git a/apps/panel.js b/apps/panel.js index 20fe9f1..8c3579f 100644 --- a/apps/panel.js +++ b/apps/panel.js @@ -2,6 +2,7 @@ import { ZZZPlugin } from '../lib/plugin.js'; import render from '../lib/render.js'; import { rulePrefix } from '../lib/common.js'; import { getPanelList, refreshPanel, getPanel } from '../lib/avatar.js'; +import settings from '../lib/settings.js'; export class Panel extends ZZZPlugin { constructor() { @@ -27,8 +28,18 @@ export class Panel extends ZZZPlugin { }); } async refreshPanel() { - const { api, deviceFp, uid } = await this.getAPI(); - if (!api || !uid) return false; + const uid = await this.getUID(); + if (!uid) return; + const lastQueryTime = await redis.get(`ZZZ:PANEL:${uid}:LASTTIME`); + const coldTime = settings.getConfig('gacha').interval || 300; + if (lastQueryTime && Date.now() - lastQueryTime < 1000 * coldTime) { + await this.reply(`${coldTime}秒内只能刷新一次,请稍后再试`); + return; + } + const { api, deviceFp } = await this.getAPI(); + if (!api) return false; + await redis.set(`ZZZ:PANEL:${uid}:LASTTIME`, Date.now()); + await this.reply('正在刷新面板列表,请稍后...'); await this.getPlayerInfo(); const result = await refreshPanel(this.e, api, uid, deviceFp); const newChar = result.filter(item => item.isNew); @@ -66,11 +77,13 @@ export class Panel extends ZZZPlugin { if (!uid) return false; const reg = new RegExp(`${rulePrefix}(.+)面板$`); const name = this.e.msg.match(reg)[4]; + if (['刷新', '更新'].includes(name)) return this.getCharPanelList(); const data = getPanel(uid, name); if (!data) { await this.reply(`未找到角色${name}的面板信息`); - return false; + return; } + await this.reply('正在下载面板图片资源,请稍后...'); await data.get_detail_assets(); const finalData = { charData: data, diff --git a/defSet/gacha.yaml b/defSet/gacha.yaml new file mode 100644 index 0000000..eb2747c --- /dev/null +++ b/defSet/gacha.yaml @@ -0,0 +1 @@ +interval: 60 diff --git a/defSet/panel.yaml b/defSet/panel.yaml new file mode 100644 index 0000000..eb2747c --- /dev/null +++ b/defSet/panel.yaml @@ -0,0 +1 @@ +interval: 60 diff --git a/lib/common.js b/lib/common.js index 61753e9..e5e5132 100644 --- a/lib/common.js +++ b/lib/common.js @@ -1,7 +1,7 @@ import User from '../../genshin/model/user.js'; import { getStoken } from './authkey.js'; -export const rulePrefix = '((#|\\%)?(zzz|ZZZ|绝区零)|\\*|*)'; +export const rulePrefix = '^((#|\\%)?(zzz|ZZZ|绝区零))'; export async function getCk(e, s = false) { e.isSr = true; diff --git a/model/avatar.js b/model/avatar.js index b4d1222..f089544 100644 --- a/model/avatar.js +++ b/model/avatar.js @@ -294,7 +294,7 @@ export class ZZZAvatarInfo { async get_detail_assets() { const role_icon = await getRoleImage(this.id); this.role_icon = role_icon; - await this.weapon.get_assets(); + await this?.weapon?.get_assets?.(); for (const equip of this.equip) { await equip.get_assets(); }