diff --git a/initdatas/activity_info.json b/initdatas/activity_info.json index 5576565..a7f3a10 100644 --- a/initdatas/activity_info.json +++ b/initdatas/activity_info.json @@ -66,14 +66,29 @@ }, { "id": "e2fuah0j30vwcpe0my7", "task": "TwitterRetweet", - "title": "Repost and like on X", + "title": "Repost on X", "type": 1, "desc": "Show your friends Counter Fire.", "category": "Social Tasks", - "score": 150, + "score": 50, "autoclaim": false, "pretasks": [], - "cfg": {"icon": "twitter", "content": "Just joined Counter Fire! 🎮 Excited about the endless opportunities ahead. 🔥 Let's team up and conquer together! Come in with me #CounterFire #GamingAdventures"}, + "cfg": {"icon": "twitter", "content": "1779507826714681538"}, + "start": "2024-01-01 00:00", + "end": "2025-01-01 00:00", + "checkChain": true, + "params": {"time": 6, "failRate": 0} + }, { + "id": "e2fuah0j30vwcpe0my9", + "task": "TwitterLike", + "title": "Like on X", + "type": 1, + "desc": "Show your friends Counter Fire.", + "category": "Social Tasks", + "score": 50, + "autoclaim": false, + "pretasks": [], + "cfg": {"icon": "twitter", "content": "1779507826714681538"}, "start": "2024-01-01 00:00", "end": "2025-01-01 00:00", "checkChain": true, diff --git a/src/controllers/activity.controller.ts b/src/controllers/activity.controller.ts index 4092105..90a222f 100644 --- a/src/controllers/activity.controller.ts +++ b/src/controllers/activity.controller.ts @@ -116,7 +116,7 @@ export default class ActivityController extends BaseController { @router('get /api/activity/score_list') async scoreList(req) { let user = req.user - const records = await ScoreRecord.find({ user: user.id, activity: user.activity }) + const records = await ScoreRecord.find({ user: user.id, activity: user.activity, score: { $gt: 0 } }) return records.map(record => { return { score: formatNumShow(record.score), diff --git a/src/controllers/voucher.controller.ts b/src/controllers/voucher.controller.ts new file mode 100644 index 0000000..d94a81c --- /dev/null +++ b/src/controllers/voucher.controller.ts @@ -0,0 +1,26 @@ +import { isValidShareCode } from 'common/Utils' +import logger from 'logger/logger' +import { ChestStatusEnum } from 'models/ActivityChest' +import { NFTHolderRecord } from 'models/NFTHodlerRecord' +import { queryNftBalance } from 'services/chain.svr' +import { generateChestLevel, generateNewChest } from 'services/game.svr' +import { checkDiscordRole } from 'services/oauth.svr' +import { SyncLocker, BaseController, router, role, ROLE_ANON, ZError } from 'zutils' + +/** + * 礼品券相关接口 + */ +class VoucherController extends BaseController { + @router('post /api/voucher/claim') + async claimVoucherReward(req) { + new SyncLocker().checkLock(req) + logger.db('claim_voucher', req) + const user = req.user + const { id } = req.params + if (!id || !isValidShareCode(id)) { + throw new ZError(10, 'invild voucher id') + } + + return {} + } +} diff --git a/src/tasks/TwitterLike.ts b/src/tasks/TwitterLike.ts new file mode 100644 index 0000000..c56b39c --- /dev/null +++ b/src/tasks/TwitterLike.ts @@ -0,0 +1,36 @@ +import { ZError } from 'zutils' +import { ITask } from './base/ITask' +import { TaskStatusEnum } from 'models/ActivityUser' + +export default class TwitterLike extends ITask { + static desc = 'twitter like' + static show: boolean = true + async execute(data: any) { + const { task } = data + let cfg = this.activity.tasks.find(t => t.id === task.id) + let time = cfg.params.time + if (Date.now() - task.timeStart < time * 1000) { + throw new ZError(11, 'like failed') + } + let num = Math.random() * 100 + if (num < cfg.params.failRate) { + throw new ZError(12, 'like failed') + } + task.status = TaskStatusEnum.SUCCESS + task.timeFinish = Date.now() + task.data = {} + try { + await this.user.save() + } catch (err) { + throw new ZError(100, 'save failed') + } + if (cfg.autoclaim) { + try { + await this.claimReward(task) + } catch (err) { + console.log(err) + } + } + return true + } +} diff --git a/src/tasks/TwitterTweet.ts b/src/tasks/TwitterTweet.ts new file mode 100644 index 0000000..f08b127 --- /dev/null +++ b/src/tasks/TwitterTweet.ts @@ -0,0 +1,36 @@ +import { ZError } from 'zutils' +import { ITask } from './base/ITask' +import { TaskStatusEnum } from 'models/ActivityUser' + +export default class TwitterTweet extends ITask { + static desc = 'twitter retweet' + static show: boolean = true + async execute(data: any) { + const { task } = data + let cfg = this.activity.tasks.find(t => t.id === task.id) + let time = cfg.params.time + if (Date.now() - task.timeStart < time * 1000) { + throw new ZError(11, 'tweet failed') + } + let num = Math.random() * 100 + if (num < cfg.params.failRate) { + throw new ZError(12, 'tweet failed') + } + task.status = TaskStatusEnum.SUCCESS + task.timeFinish = Date.now() + task.data = {} + try { + await this.user.save() + } catch (err) { + throw new ZError(100, 'save failed') + } + if (cfg.autoclaim) { + try { + await this.claimReward(task) + } catch (err) { + console.log(err) + } + } + return true + } +}