增加每日签到

This commit is contained in:
CounterFire2023 2024-01-08 15:53:53 +08:00
parent a5f67cf4da
commit b21a3d472c
3 changed files with 74 additions and 0 deletions

View File

@ -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,

12
src/services/chain.svr.ts Normal file
View File

@ -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())
}

49
src/tasks/DailyCheckIn.ts Normal file
View File

@ -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
}
}