From b21a3d472c8f34caac5515c989385651bb012f49 Mon Sep 17 00:00:00 2001 From: CounterFire2023 <136581895+CounterFire2023@users.noreply.github.com> Date: Mon, 8 Jan 2024 15:53:53 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=AF=8F=E6=97=A5=E7=AD=BE?= =?UTF-8?q?=E5=88=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- initdatas/activity_info.json | 13 ++++++++++ src/services/chain.svr.ts | 12 +++++++++ src/tasks/DailyCheckIn.ts | 49 ++++++++++++++++++++++++++++++++++++ 3 files changed, 74 insertions(+) create mode 100644 src/services/chain.svr.ts create mode 100644 src/tasks/DailyCheckIn.ts diff --git a/initdatas/activity_info.json b/initdatas/activity_info.json index 09b3e82..823734b 100644 --- a/initdatas/activity_info.json +++ b/initdatas/activity_info.json @@ -98,6 +98,18 @@ "pretasks": [], "cfg": {"account": "okx", "icon": "okx"}, "params": {} + }, { + "id": "e2f7fplj30vwcpe0l98", + "task": "DailyCheckIn", + "title": "daily checkin", + "type": 1, + "desc": "", + "category": "Special Quests", + "score": 100, + "autoclaim": false, + "pretasks": [], + "cfg": {}, + "params": {"days": 1} }, { "id": "e2f7t4lj30vwcpe0ldr", "task": "ShareCode", @@ -106,6 +118,7 @@ "autoclaim": false, "pretasks": [], "cfg": {}, + "score": 100, "params": {"score": [100, 20]} }], "startTime": 1702628292366, diff --git a/src/services/chain.svr.ts b/src/services/chain.svr.ts new file mode 100644 index 0000000..10049e7 --- /dev/null +++ b/src/services/chain.svr.ts @@ -0,0 +1,12 @@ + +export const queryCheckInList = async (address: string, days: string | number | string[], max: number = 0) => { + const url = process.env.CHAIN_SVR + '/task/check_in' + return fetch(url, { + method: 'POST', + body: JSON.stringify({ + address, + days, + max + }) + }).then((res) => res.json()) +} \ No newline at end of file diff --git a/src/tasks/DailyCheckIn.ts b/src/tasks/DailyCheckIn.ts new file mode 100644 index 0000000..b4b0622 --- /dev/null +++ b/src/tasks/DailyCheckIn.ts @@ -0,0 +1,49 @@ +import { ITask } from "./base/ITask"; +import { ZError } from "common/ZError"; +import { TaskStatusEnum } from "models/ActivityUser"; +import { TaskCfg } from "models/ActivityInfo"; +import { queryCheckInList } from "services/chain.svr"; + +// TODO:: test +/** + * 检查每日签到 + * days + * limit: 如果该值大于0, 则days表示一共签到几天 + * 否则days表示连续几天签到 + */ +export default class DailyCheckIn extends ITask { + static desc = 'daily checkin' + static show: boolean = true + + async execute(data: any) { + const { address } = this.params.user + const { task } = data + let cfg = this.params.activity.tasks.find((t: TaskCfg) => t.id === task.id) + const days = cfg.params.days || 1 + const limit = cfg.params.limit || 0 + const res = await queryCheckInList(address, days - 1, limit) + if (res.errcode) { + throw new ZError(res.errcode, res.errmsg) + } + + if (task.status === TaskStatusEnum.RUNNING && res.data.length >= days) { + task.status = TaskStatusEnum.SUCCESS + task.timeFinish = Date.now() + task.data = res.data + try { + await this.params.user.save() + } catch(err) { + throw new ZError(100, 'save daily checkin failed') + } + if (cfg.autoclaim) { + try { + await this.claimReward(task); + } catch(err) { + console.log(err) + } + } + } + return true + } + +} \ No newline at end of file