task-svr/src/tasks/TwitterConnect.ts
2024-01-03 19:10:05 +08:00

44 lines
1.3 KiB
TypeScript

import { checkTwitter } from "services/oauth.svr";
import { ITask } from "./base/ITask";
import { ActivityUser, TaskStatusEnum } from "models/ActivityUser";
import { ZError } from "common/ZError";
import { TaskCfg } from "models/ActivityInfo";
export default class TwitterConnect extends ITask {
static desc = 'twitter connect'
static show: boolean = true
async execute(data: any) {
let { address } = this.params.user
let res = await checkTwitter(address)
if (res.status !== 200) {
throw new ZError(11, 'twitter check failed')
}
if (res.data.errcode) {
throw new ZError(res.data.errcode, res.data.errmsg)
}
const { task } = data
if (res.data.data.userid && task.status === TaskStatusEnum.RUNNING) {
task.status = TaskStatusEnum.SUCCESS
task.timeFinish = Date.now()
task.data = res.data.data
task.twitterId = res.data.data.userid
try {
await this.params.user.save()
} catch(err) {
throw new ZError(100, 'twitter already binded')
}
let cfg = this.params.activity.tasks.find((t: TaskCfg) => t.id === this.constructor.name)
if (cfg.autoclaim) {
try {
await this.claimReward(task);
} catch(err) {
console.log(err)
}
}
}
return true
}
}