|
| 1 | +import { getToken } from './kuroBBSTokenHandler.js' |
| 2 | +import { getRandomInt, sleepAsync } from './utils.js' |
| 3 | +import kuroApi from './kuroApi.js' |
| 4 | + |
| 5 | +export default class bbsActivityTask { |
| 6 | + constructor(e) { |
| 7 | + this.e = e |
| 8 | + } |
| 9 | + |
| 10 | + async bbsActivityTask(uin) { |
| 11 | + const tokenData = await getToken(uin) |
| 12 | + console.log(tokenData) |
| 13 | + |
| 14 | + if (tokenData && Object.keys(tokenData).length > 0) { |
| 15 | + const accNum = Object.keys(tokenData).length |
| 16 | + await this.e.reply( |
| 17 | + `QQ ${uin} 绑定了 ${accNum} 个 token\n开始活动任务, 稍等一会儿哟...` |
| 18 | + ) |
| 19 | + let startTime = Date.now() |
| 20 | + let msg = '' |
| 21 | + for (const kuro_uid in tokenData) { |
| 22 | + if (tokenData.hasOwnProperty(kuro_uid)) { |
| 23 | + msg += await doBbsActivityTask(this.e.user_id, kuro_uid) |
| 24 | + msg += `\n` |
| 25 | + } else { |
| 26 | + msg += `账号 ${kuro_uid}: \ntoken 格式错误\n\n` |
| 27 | + } |
| 28 | + await sleepAsync(getRandomInt(1000, 3000)) |
| 29 | + } |
| 30 | + msg += `共用时 ${Math.floor((Date.now() - startTime) / 1000)}s\n` |
| 31 | + |
| 32 | + await this.e.reply(msg.trimEnd()) |
| 33 | + return true |
| 34 | + } else { |
| 35 | + this.e.reply( |
| 36 | + `QQ ${uin} 暂未绑定 token, 请发送 #库洛验证码登录 绑定 token ` |
| 37 | + ) |
| 38 | + return false |
| 39 | + } |
| 40 | + } |
| 41 | +} |
| 42 | + |
| 43 | +/** |
| 44 | + * 执行单个库洛账号的活动任务, 可以不经构造调用 |
| 45 | + * @param {number} uin QQ |
| 46 | + * @param {number} kuro_uid 库洛 ID |
| 47 | + * @returns {string} 可以直接发送的签到结果 |
| 48 | + */ |
| 49 | +export async function doBbsActivityTask(uin, kuro_uid) { |
| 50 | + let kuroapi = new kuroApi(uin) |
| 51 | + let doBbsActivityTaskRet = '' |
| 52 | + // getBindRoleInfo, 没绑定直接返回 |
| 53 | + let rsp_getBindRoleInfo = await kuroapi.getBindRoleInfo(kuro_uid) |
| 54 | + logger.mark('rsp_getBindRoleInfo ' + JSON.stringify(rsp_getBindRoleInfo)) |
| 55 | + if (rsp_getBindRoleInfo == `token 失效`) return `账号 ${kuro_uid}: \ntoken 失效\n` |
| 56 | + if (typeof rsp_getBindRoleInfo == 'string') return `账号 ${kuro_uid}: \n发生错误: ${rsp_getBindRoleInfo}\n` |
| 57 | + if(!rsp_getBindRoleInfo.data.haveBind) return `账号 ${kuro_uid}: \n未绑定游戏账号, 请先前往库街区手动绑定\n` // TODO: 暂时没抓绑定账号的 API, 或许会去实现这个 |
| 58 | + doBbsActivityTaskRet += `账号 ${kuro_uid}: \n绑定角色: ${rsp_getBindRoleInfo.data.serverName} - ${rsp_getBindRoleInfo.data.roleName}(${rsp_getBindRoleInfo.data.roleId})\n` |
| 59 | + |
| 60 | + // getList 取活动列表, 成功了根据任务的 status 执行完成和领取 |
| 61 | + let rsp_getActivityTaskList = await kuroapi.getActivityTaskList(kuro_uid) |
| 62 | + logger.mark('rsp_getActivityTaskList ' + JSON.stringify(rsp_getActivityTaskList)) |
| 63 | + if(typeof rsp_getActivityTaskList == 'string') { |
| 64 | + doBbsActivityTaskRet += `获取任务列表失败: ${rsp_getActivityTaskList}\n` |
| 65 | + return doBbsActivityTaskRet |
| 66 | + } |
| 67 | + for(let taskIndex in rsp_getActivityTaskList.data.taskList) { |
| 68 | + let curTask = rsp_getActivityTaskList.data.taskList[taskIndex] |
| 69 | + doBbsActivityTaskRet += curTask.taskName + ': ' |
| 70 | + |
| 71 | + let rsp_completeActivityTask = '' |
| 72 | + if([2, 3, 4].includes(curTask.type)) { |
| 73 | + // 不可以自动做的任务类型 |
| 74 | + // TODO: 3 和 4 的自动完成 |
| 75 | + if(curTask.status == 0) { |
| 76 | + doBbsActivityTaskRet += `未完成且不可自动完成\n` |
| 77 | + continue |
| 78 | + } |
| 79 | + |
| 80 | + } else if(curTask.status == 0) { |
| 81 | + // 可以自动做, 且还未完成的任务 |
| 82 | + rsp_completeActivityTask = await kuroapi.completeActivityTask(kuro_uid, {taskId: curTask.taskId}) |
| 83 | + if(typeof rsp_completeActivityTask == 'string') { |
| 84 | + doBbsActivityTaskRet += `完成失败: ${rsp_completeActivityTask}\n` |
| 85 | + continue |
| 86 | + } |
| 87 | + doBbsActivityTaskRet += `完成成功, ` |
| 88 | + } |
| 89 | + |
| 90 | + // 如果任务待领取, 或者刚刚完成了 |
| 91 | + if(curTask.status == 1 || typeof rsp_completeActivityTask !== 'string'){ |
| 92 | + let rsp_receiveActivityTask = await kuroapi.receiveActivityTask(kuro_uid, {taskId: curTask.taskId}) |
| 93 | + if(typeof rsp_receiveActivityTask == 'string') { |
| 94 | + doBbsActivityTaskRet += `领取失败: ${rsp_receiveActivityTask}\n` |
| 95 | + continue |
| 96 | + } |
| 97 | + doBbsActivityTaskRet += `领取成功\n` |
| 98 | + } |
| 99 | + |
| 100 | + // 任务领取过了 |
| 101 | + if(curTask.status == 2) doBbsActivityTaskRet += `已领取\n` |
| 102 | + } |
| 103 | + |
| 104 | + // 取任务列表 |
| 105 | + // 里程碑, 满足就领不满足就返回 |
| 106 | + // |
| 107 | + // |
| 108 | + // |
| 109 | + return doBbsActivityTaskRet |
| 110 | + |
| 111 | +} |
0 commit comments