task-svr/src/tasks/DiscordRole.ts
2024-01-17 16:14:16 +08:00

38 lines
1.0 KiB
TypeScript

import { ZError } from 'zutils'
import { ITask } from './base/ITask'
import { TaskStatusEnum } from 'models/ActivityUser'
import { TaskCfg } from 'models/ActivityInfo'
export default class DiscordRole extends ITask {
static desc = 'acquire discord role'
static show: boolean = true
async execute(data: any) {
const { task } = data
let cfg = this.activity.tasks.find((t: TaskCfg) => t.id === task.id)
let time = cfg.params.time
if (Date.now() - task.timeStart < time * 1000) {
throw new ZError(11, 'check discord role failed')
}
let num = Math.random() * 100
if (num < cfg.params.failRate) {
throw new ZError(12, 'check discord role failed')
}
task.status = TaskStatusEnum.SUCCESS
task.timeFinish = Date.now()
task.data = {}
try {
await this.user.save()
} catch (err) {
throw new ZError(100, 'already acquired discord role')
}
if (cfg.autoclaim) {
try {
await this.claimReward(task)
} catch (err) {
console.log(err)
}
}
return true
}
}