From ac413bd398a6b0244f71aa550d2050a1575db854 Mon Sep 17 00:00:00 2001 From: Hex Date: Mon, 20 Nov 2023 10:44:24 +0800 Subject: [PATCH] =?UTF-8?q?=E9=87=8D=E6=9E=84=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- library_task.js | 1447 ++++++++++++++++++++++++++++++++++++++++++ package.json | 2 +- smzdm_task.js | 1579 +++------------------------------------------- smzdm_testing.js | 24 +- 5 files changed, 1532 insertions(+), 1522 deletions(-) create mode 100644 library_task.js diff --git a/README.md b/README.md index bd560ee..67e83bd 100644 --- a/README.md +++ b/README.md @@ -26,7 +26,7 @@ ### 青龙拉库 ```bash -ql repo https://github.com/hex-ci/smzdm_script.git "" "env.js|bot.js|sendNotify.js" "env.js|bot.js|sendNotify.js" +ql repo https://github.com/hex-ci/smzdm_script.git "smzdm_" "" "env.js|bot.js|sendNotify.js|library_" "main" ``` 建议自行更改青龙面板的脚本执行时间 diff --git a/library_task.js b/library_task.js new file mode 100644 index 0000000..5af765d --- /dev/null +++ b/library_task.js @@ -0,0 +1,1447 @@ +const { SmzdmBot, requestApi, removeTags, wait } = require('./bot'); + +// ------------------------------------ + +class SmzdmTaskBot extends SmzdmBot { + constructor(cookie, env) { + super(cookie); + + this.$env = env; + } + + // 执行任务列表中的任务 + async doTasks(tasks) { + let notifyMsg = ''; + + for (let i = 0; i < tasks.length; i++) { + const task = tasks[i]; + + // 待领取任务 + if (task.task_status == '3') { + this.$env.log(`领取[${task.task_name}]奖励:`); + + const { isSuccess } = await this.receiveReward(task.task_id); + + notifyMsg += `${isSuccess ? '🟢' : '❌'}领取[${task.task_name}]奖励${isSuccess ? '成功' : '失败!请查看日志'}\n`; + + await wait(5, 15); + } + // 未完成任务 + else if (task.task_status == '2') { + // 浏览文章任务 + if (task.task_event_type == 'interactive.view.article') { + const { isSuccess } = await this.doViewTask(task); + + notifyMsg += this.getTaskNotifyMessage(isSuccess, task); + + await wait(5, 15); + } + // 分享任务 + else if (task.task_event_type == 'interactive.share') { + const { isSuccess } = await this.doShareTask(task); + + notifyMsg += this.getTaskNotifyMessage(isSuccess, task); + + await wait(5, 15); + } + // 抽奖任务 + else if (task.task_event_type == 'guide.crowd') { + const { isSuccess, code } = await this.doCrowdTask(task); + + if (code !== 99) { + notifyMsg += this.getTaskNotifyMessage(isSuccess, task); + } + + await wait(5, 15); + } + // 关注用户任务 + else if (task.task_event_type == 'interactive.follow.user') { + const { isSuccess } = await this.doFollowUserTask(task); + + notifyMsg += this.getTaskNotifyMessage(isSuccess, task); + + await wait(5, 15); + } + // 关注栏目任务 + else if (task.task_event_type == 'interactive.follow.tag') { + const { isSuccess } = await this.doFollowTagTask(task); + + notifyMsg += this.getTaskNotifyMessage(isSuccess, task); + + await wait(5, 15); + } + // 关注品牌 + else if (task.task_event_type == 'interactive.follow.brand') { + const { isSuccess } = await this.doFollowBrandTask(task); + + notifyMsg += this.getTaskNotifyMessage(isSuccess, task); + + await wait(5, 15); + } + // 收藏任务 + else if (task.task_event_type == 'interactive.favorite') { + const { isSuccess } = await this.doFavoriteTask(task); + + notifyMsg += this.getTaskNotifyMessage(isSuccess, task); + + await wait(5, 15); + } + // 点赞任务 + else if (task.task_event_type == 'interactive.rating') { + const { isSuccess } = await this.doRatingTask(task); + + notifyMsg += this.getTaskNotifyMessage(isSuccess, task); + + await wait(5, 15); + } + // 评论任务 + else if (task.task_event_type == 'interactive.comment') { + if (process.env.SMZDM_COMMENT && String(process.env.SMZDM_COMMENT).length > 10) { + const { isSuccess } = await this.doCommentTask(task); + + notifyMsg += this.getTaskNotifyMessage(isSuccess, task); + + await wait(5, 15); + } + else { + this.$env.log('🟡请设置 SMZDM_COMMENT 环境变量后才能做评论任务!'); + } + } + } + } + + return notifyMsg; + } + + getTaskNotifyMessage(isSuccess, task) { + return `${isSuccess ? '🟢' : '❌'}完成[${task.task_name}]任务${isSuccess ? '成功' : '失败!请查看日志'}\n`; + } + + // 执行评论任务 + async doCommentTask(task) { + this.$env.log(`开始任务: ${task.task_name}`); + + const articles = await this.getArticleList(20); + + if (articles.length < 1) { + return { + isSuccess: false + }; + } + + // 随机选一篇文章来评论 + const article = articles[Math.floor(Math.random() * articles.length)]; + + await wait(3, 10); + + const {isSuccess, data } = await this.submitComment({ + articleId: article.article_id, + channelId: article.article_channel_id, + content: process.env.SMZDM_COMMENT + }); + + if (!isSuccess) { + return { + isSuccess + }; + } + + this.$env.log('删除评论'); + await wait(20, 30); + + const {isSuccess: result } = await this.removeComment(data.data.comment_ID); + + if (!result) { + this.$env.log('再试一次'); + await wait(10, 20); + + // 不成功再执行一次删除 + await this.removeComment(data.data.comment_ID); + } + + this.$env.log('领取奖励'); + await wait(5, 15); + + return await this.receiveReward(task.task_id); + } + + // 通过 url 获取文章信息 + async getArticleInfoByLink(link, id) { + const { isSuccess, response } = await requestApi(link, { + method: 'get', + headers: this.getHeaders(), + parseJSON: false, + sign: false + }); + + if (!isSuccess) { + this.$env.log(`获取文章信息失败!${response}`); + return null; + } + + // 通过正则提取页面中的 channel_id + const re = /'channel_id':'(\d+)'/; + const matchRet = response.match(re); + + if (!matchRet) { + this.$env.log(`获取文章信息失败!${response}`); + return null; + } + + return { + 'article_id': id, + 'article_channel_id': matchRet[1] + }; + } + + // 执行点赞任务 + async doRatingTask(task) { + this.$env.log(`开始任务: ${task.task_name}`); + + let article; + + if (task.task_description.indexOf('任意') >= 0 || task.task_redirect_url.link_val == '0' || !task.task_redirect_url.link_val) { + // 随机选一篇文章 + const articles = await this.getArticleList(20); + + if (articles.length < 1) { + return { + isSuccess: false + }; + } + + article = this.getOneByRandom(articles); + } + else if (task.task_redirect_url.link_type === 'lanmu') { + // 从栏目获取文章 + const articles = await this.getArticleListFromLanmu(task.task_redirect_url.link_val, 20); + + if (articles.length < 1) { + return { + isSuccess: false + }; + } + + article = this.getOneByRandom(articles); + } + else if (task.task_redirect_url.link != '' && task.task_redirect_url.link_val != '') { + article = await this.getArticleInfoByLink(task.task_redirect_url.link, task.task_redirect_url.link_val); + + if (!article) { + return { + isSuccess: false + }; + } + } + else { + this.$env.log('尚未支持'); + + return { + isSuccess: false + }; + } + + await wait(3, 10); + + if (article.article_price) { + // 点值 + await this.rating({ + method: 'worth_cancel', + type: 3, + id: article.article_id, + channelId: article.article_channel_id + }); + + await wait(3, 10); + + await this.rating({ + method: 'worth_create', + type: 1, + id: article.article_id, + channelId: article.article_channel_id + }); + + await wait(3, 10); + + await this.rating({ + method: 'worth_cancel', + type: 3, + id: article.article_id, + channelId: article.article_channel_id + }); + } + else { + // 点赞 + await this.rating({ + method: 'like_cancel', + id: article.article_id, + channelId: article.article_channel_id + }); + + await wait(3, 10); + + await this.rating({ + method: 'like_create', + id: article.article_id, + channelId: article.article_channel_id + }); + + await wait(3, 10); + + await this.rating({ + method: 'like_cancel', + id: article.article_id, + channelId: article.article_channel_id + }); + } + + this.$env.log('领取奖励'); + await wait(5, 15); + + return await this.receiveReward(task.task_id); + } + + // 执行收藏任务 + async doFavoriteTask(task) { + this.$env.log(`开始任务: ${task.task_name}`); + + let articleId = ''; + let channelId = ''; + + if (task.task_redirect_url.link_type === 'lanmu') { + // 从栏目获取文章 + const articles = await this.getArticleListFromLanmu(task.task_redirect_url.link_val, 20); + + if (articles.length < 1) { + return { + isSuccess: false + }; + } + + const article = this.getOneByRandom(articles); + + articleId = article.article_id; + channelId = article.article_channel_id; + } + else if (task.task_redirect_url.link_type === 'tag') { + // 从 Tag 获取文章 + const articles = await this.getArticleListFromTag(task.task_redirect_url.link_val, task.task_redirect_url.link_title, 20); + + if (articles.length < 1) { + return { + isSuccess: false + }; + } + + const article = this.getOneByRandom(articles); + + articleId = article.article_id; + channelId = article.article_channel_id; + } + else if (task.task_redirect_url.link_val == '0' || !task.task_redirect_url.link_val) { + // 随机选一篇文章 + const articles = await this.getArticleList(20); + + if (articles.length < 1) { + return { + isSuccess: false + }; + } + + const article = this.getOneByRandom(articles); + + articleId = article.article_id; + channelId = article.article_channel_id; + } + else { + articleId = task.task_redirect_url.link_val; + + // 获取文章信息 + const articleDetail = await this.getArticleDetail(articleId); + + if (articleDetail === false) { + return { + isSuccess: false + }; + } + + channelId = articleDetail.channel_id; + } + + await wait(3, 10); + + await this.favorite({ + method: 'destroy', + id: articleId, + channelId + }); + + await wait(3, 10); + + await this.favorite({ + method: 'create', + id: articleId, + channelId + }); + + await wait(3, 10); + + await this.favorite({ + method: 'destroy', + id: articleId, + channelId + }); + + this.$env.log('领取奖励'); + await wait(5, 15); + + return await this.receiveReward(task.task_id); + } + + // 执行关注用户任务 + async doFollowUserTask(task) { + this.$env.log(`开始任务: ${task.task_name}`); + + // 随机选一个用户 + const user = await this.getUserByRandom(); + + if (!user) { + return { + isSuccess: false + }; + } + + await wait(3, 10); + + for (let i = 0; i < Number(task.task_even_num - task.task_finished_num); i++) { + if (user.is_follow == '1') { + await this.follow({ + method: 'destroy', + type: 'user', + keyword: user.keyword + }); + + await wait(3, 10); + } + + await this.follow({ + method: 'create', + type: 'user', + keyword: user.keyword + }); + + await wait(3, 10); + + if (user.is_follow == '0') { + await this.follow({ + method: 'destroy', + type: 'user', + keyword: user.keyword + }); + } + + await wait(3, 10); + } + + this.$env.log('领取奖励'); + await wait(5, 15); + + return await this.receiveReward(task.task_id); + } + + // 执行关注栏目任务(先取关,再关注,最后取关) + async doFollowTagTask(task) { + this.$env.log(`开始任务: ${task.task_name}`); + + let lanmuId = ''; + + if (task.task_redirect_url.link_val == '0') { + const tag = await this.getTagByRandom(); + + if (tag === false) { + return { + isSuccess: false + }; + } + + lanmuId = tag.lanmu_id; + + await wait(3, 10); + } + else { + lanmuId = task.task_redirect_url.link_val; + } + + // 获取栏目信息 + const tagDetail = await this.getTagDetail(lanmuId); + + if (!tagDetail.lanmu_id) { + this.$env.log('获取栏目信息失败!'); + + return { + isSuccess: false + }; + } + + await wait(3, 10); + + await this.follow({ + method: 'destroy', + type: 'tag', + keywordId: tagDetail.lanmu_id, + keyword: tagDetail.lanmu_info.lanmu_name + }); + + await wait(3, 10); + + await this.follow({ + method: 'create', + type: 'tag', + keywordId: tagDetail.lanmu_id, + keyword: tagDetail.lanmu_info.lanmu_name + }); + + await wait(3, 10); + + await this.follow({ + method: 'destroy', + type: 'tag', + keywordId: tagDetail.lanmu_id, + keyword: tagDetail.lanmu_info.lanmu_name + }); + + this.$env.log('领取奖励'); + await wait(5, 15); + + return await this.receiveReward(task.task_id); + } + + // 执行关注品牌任务(先取关,再关注,最后取关) + async doFollowBrandTask(task) { + this.$env.log(`开始任务: ${task.task_name}`); + + // 获取品牌信息 + const brandDetail = await this.getBrandDetail(task.task_redirect_url.link_val); + + if (!brandDetail.id) { + return { + isSuccess: false + }; + } + + await wait(3, 10); + + await this.followBrand({ + method: 'dingyue_lanmu_del', + keywordId: brandDetail.id, + keyword: brandDetail.title + }); + + await wait(3, 10); + + await this.followBrand({ + method: 'dingyue_lanmu_add', + keywordId: brandDetail.id, + keyword: brandDetail.title + }); + + await wait(3, 10); + + await this.followBrand({ + method: 'dingyue_lanmu_del', + keywordId: brandDetail.id, + keyword: brandDetail.title + }); + + this.$env.log('领取奖励'); + await wait(5, 15); + + return await this.receiveReward(task.task_id); + } + + // 执行抽奖任务 + async doCrowdTask(task) { + this.$env.log(`开始任务: ${task.task_name}`); + + let { isSuccess, data } = await this.getCrowd('免费', 0); + + if (!isSuccess) { + if (process.env.SMZDM_CROWD_SILVER_5 == 'yes') { + ({ isSuccess, data } = await this.getCrowd('5碎银子', 5)); + + if (!isSuccess) { + return { + isSuccess, + code: 99 + }; + } + } + else { + this.$env.log('🟡请设置 SMZDM_CROWD_SILVER_5 环境变量值为 yes 后才能进行5碎银子抽奖!'); + + return { + isSuccess, + code: 99 + }; + } + } + + await wait(5, 15); + + const result = await this.joinCrowd(data); + + if (!result.isSuccess) { + return { + isSuccess: result.isSuccess + }; + } + + this.$env.log('领取奖励'); + await wait(5, 15); + + return await this.receiveReward(task.task_id); + } + + // 执行文章分享任务 + async doShareTask(task) { + this.$env.log(`开始任务: ${task.task_name}`); + + let articles = []; + + if (task.article_id == '0') { + articles = await this.getArticleList(task.task_even_num - task.task_finished_num); + + await wait(3, 10); + } + else { + articles = [{ + article_id: task.article_id, + article_channel_id: task.channel_id + }]; + } + + for (let i = 0; i < articles.length; i++) { + this.$env.log(`开始分享第 ${i + 1} 篇文章...`); + + const article = articles[i]; + + if (task.task_redirect_url.link_type != 'other') { + // 模拟打开文章 + if (/detail_haojia/i.test(task.task_redirect_url.scheme_url)) { + await this.getHaojiaDetail(article.article_id); + } + else { + await this.getArticleDetail(article.article_id); + } + + await wait(8, 20); + } + + await this.shareArticleDone(article.article_id, article.article_channel_id); + await this.shareDailyReward(article.article_channel_id); + await this.shareCallback(article.article_id, article.article_channel_id); + + await wait(5, 15); + } + + this.$env.log('领取奖励'); + await wait(3, 10); + + return await this.receiveReward(task.task_id); + } + + // 执行浏览任务 + async doViewTask(task) { + this.$env.log(`开始任务: ${task.task_name}`); + + let articles = []; + let isRead = true; + + if (task.article_id == '0') { + isRead = true; + articles = await this.getArticleList(task.task_even_num - task.task_finished_num); + + await wait(3, 10); + } + else { + for (let i = 0; i < task.task_even_num - task.task_finished_num; i++) { + articles.push({ + article_id: task.article_id, + article_channel_id: task.channel_id + }); + } + + isRead = task.task_redirect_url.link_val != ''; + } + + for (let i = 0; i < articles.length; i++) { + this.$env.log(`开始阅读第 ${i + 1} 篇文章...`); + + const article = articles[i]; + + if (isRead) { + // 模拟打开文章 + if (/detail_haojia/i.test(task.task_redirect_url.scheme_url)) { + await this.getHaojiaDetail(article.article_id); + } + else { + await this.getArticleDetail(article.article_id); + } + } + + this.$env.log('模拟阅读文章'); + await wait(20, 50); + + const { isSuccess, response } = await requestApi('https://user-api.smzdm.com/task/event_view_article_sync', { + method: 'post', + headers: this.getHeaders(), + data: { + article_id: article.article_id, + channel_id: article.article_channel_id, + task_id: task.task_id + } + }); + + if (isSuccess) { + this.$env.log('完成阅读成功。'); + } + else { + this.$env.log(`完成阅读失败!${response}`); + } + + await wait(5, 15); + } + + this.$env.log('领取奖励'); + await wait(3, 10); + + return await this.receiveReward(task.task_id); + } + + // 关注/取关 + async follow({keywordId, keyword, type, method}) { + let touchstone = ''; + + if (type === 'user') { + touchstone = this.getTouchstoneEvent({ + event_value: { + cid: 'null', + is_detail: false, + p: '1' + }, + sourceMode: '我的_我的任务页', + sourcePage: 'Android/关注/达人/爆料榜', + upperLevel_url: '关注/达人/推荐/' + }); + } + else if (type === 'tag') { + touchstone = this.getTouchstoneEvent({ + event_value: { + cid: 'null', + is_detail: false + }, + sourceMode: '栏目页', + sourcePage: `Android/栏目页/${keyword}/${keywordId}/`, + source_page_type_id: String(keywordId), + upperLevel_url: '个人中心/赚奖励/', + source_area: { + lanmu_id: String(keywordId), + prev_source_scence: '我的_我的任务页' + } + }); + } + + const { isSuccess, response } = await requestApi(`https://dingyue-api.smzdm.com/dingyue/${method}`, { + method: 'post', + headers: this.getHeaders(), + data: { + touchstone_event: touchstone, + refer: '', + keyword_id: keywordId, + keyword, + type + } + }); + + if (isSuccess) { + this.$env.log(`${method} 关注成功: ${keyword}`); + } + else { + this.$env.log(`${method} 关注失败!${response}`); + } + + return { + isSuccess, + response + }; + } + + // 随机获取用户 + async getUserByRandom() { + const { isSuccess, data, response } = await requestApi('https://dingyue-api.smzdm.com/tuijian/search_result', { + method: 'post', + headers: this.getHeaders(), + data: { + nav_id: 0, + page: 1, + type: 'user', + time_code: '' + } + }); + + if (isSuccess) { + return data.data.rows[Math.floor(Math.random() * data.data.rows.length)]; + } + else { + this.$env.log(`获取用户列表失败!${response}`); + + return false; + } + } + + // 参加抽奖 + async joinCrowd(id) { + const { isSuccess, data, response } = await requestApi('https://zhiyou.m.smzdm.com/user/crowd/ajax_participate', { + method: 'post', + sign: false, + headers: { + ...this.getHeadersForWeb(), + Origin: 'https://zhiyou.m.smzdm.com', + Referer: `https://zhiyou.m.smzdm.com/user/crowd/p/${id}/` + }, + data: { + crowd_id: id, + sourcePage: `https://zhiyou.m.smzdm.com/user/crowd/p/${id}/`, + client_type: 'android', + sourceRoot: '个人中心', + sourceMode: '幸运屋抽奖', + price_id: 1 + } + }); + + if (isSuccess) { + this.$env.log(removeTags(data.data.msg)); + } + else { + this.$env.log(`参加免费抽奖失败: ${response}`); + } + + return { + isSuccess, + response + }; + } + + // 获取抽奖信息 + async getCrowd(name, price) { + const { isSuccess, data, response } = await requestApi('https://zhiyou.smzdm.com/user/crowd/', { + sign: false, + parseJSON: false, + headers: this.getHeadersForWeb() + }); + + const re = new RegExp(`]+?)>\\s+?]+?>\\s*${name}(?:抽奖)?\\s*<\\/div>\\s+-${price}<\\/span>[\\s\\S]+?<\\/button>`, 'ig'); + + if (isSuccess) { + const crowds = []; + let match; + + while ((match = re.exec(data)) !== null) { + crowds.push(match[1]); + } + + if (crowds.length < 1) { + this.$env.log(`未找到${name}抽奖`); + + return { + isSuccess: false + }; + } + + let crowd; + + if (price > 0 && process.env.SMZDM_CROWD_KEYWORD) { + crowd = crowds.find((item) => { + const match = item.match(/data-title="([^"]+)"/i); + + return (match && match[1].indexOf(process.env.SMZDM_CROWD_KEYWORD) >= 0); + }); + + if (!crowd) { + this.$env.log('未找到符合关键词的抽奖,执行随机选取'); + crowd = this.getOneByRandom(crowds); + } + } + else { + crowd = this.getOneByRandom(crowds); + } + + const matchCrowd = crowd.match(/data-crowd_id="(\d+)"/i); + + if (matchCrowd) { + this.$env.log(`${name}抽奖ID: ${matchCrowd[1]}`); + + return { + isSuccess: true, + data: matchCrowd[1] + }; + } + else { + this.$env.log(`未找到${name}抽奖ID`); + + return { + isSuccess: false + }; + } + } + else { + this.$env.log(`获取${name}抽奖失败: ${response}`); + + return { + isSuccess: false + }; + } + } + + // 分享完成 + async shareArticleDone(articleId, channelId) { + const { isSuccess, response } = await requestApi('https://user-api.smzdm.com/share/complete_share_rule', { + method: 'post', + headers: this.getHeaders(), + data: { + token: this.token, + article_id: articleId, + channel_id: channelId, + tag_name: 'gerenzhongxin' + } + }); + + if (isSuccess) { + this.$env.log('完成分享成功。'); + + return { + isSuccess, + msg: '完成分享成功。' + }; + } + else { + this.$env.log(`完成分享失败!${response}`); + + return { + isSuccess: false, + msg: '完成分享失败!' + }; + } + } + + // 分享完成后回调接口 + async shareCallback(articleId, channelId) { + const { isSuccess, response } = await requestApi('https://user-api.smzdm.com/share/callback', { + method: 'post', + headers: this.getHeaders(), + data: { + token: this.token, + article_id: articleId, + channel_id: channelId, + touchstone_event: this.getTouchstoneEvent({ + event_value: { + aid: articleId, + cid: channelId, + is_detail: true, + pid: '无' + }, + sourceMode: '排行榜_社区_好文精选', + sourcePage: `Android/长图文/P/${articleId}/`, + upperLevel_url: '排行榜/社区/好文精选/文章_24H/' + }) + } + }); + + if (isSuccess) { + this.$env.log('分享回调完成。'); + + return { + isSuccess, + msg: '' + }; + } + else { + this.$env.log(`分享回调失败!${response}`); + + return { + isSuccess, + msg: '分享回调失败!' + }; + } + } + + // 分享的每日奖励(貌似没啥用) + async shareDailyReward(channelId) { + const { isSuccess, data, response } = await requestApi('https://user-api.smzdm.com/share/daily_reward', { + method: 'post', + headers: this.getHeaders(), + data: { + token: this.token, + channel_id: channelId + } + }); + + if (isSuccess) { + this.$env.log(data.data.reward_desc); + + return { + isSuccess, + msg: data.data.reward_desc + }; + } + else { + if (data) { + this.$env.log(data.error_msg); + + return { + isSuccess, + msg: data.error_msg + }; + } + else { + this.$env.log(`分享每日奖励请求失败!${response}`); + + return { + isSuccess, + msg: '分享每日奖励请求失败!' + }; + } + } + } + + // 获取文章列表 + async getArticleList(num = 1) { + const { isSuccess, data, response } = await requestApi('https://article-api.smzdm.com/ranking_list/articles', { + headers: this.getHeaders(), + data: { + offset: 0, + channel_id: 76, + tab: 2, + order: 0, + limit: 20, + exclude_article_ids: '', + stream: 'a', + ab_code: 'b' + } + }); + + if (isSuccess) { + // 取前 num 个做任务 + return data.data.rows.slice(0, num); + } + else { + this.$env.log(`获取文章列表失败: ${response}`); + return []; + } + } + + async getRobotToken() { + const { isSuccess, data, response } = await requestApi('https://user-api.smzdm.com/robot/token', { + method: 'post', + headers: this.getHeaders() + }); + + if (isSuccess) { + return data.data.token; + } + else { + this.$env.log(`Robot Token 获取失败!${response}`); + + return false; + } + } + + // 获取栏目信息 + async getTagDetail(id) { + const { isSuccess, data, response } = await requestApi('https://common-api.smzdm.com/lanmu/config_data', { + headers: this.getHeaders(), + data: { + middle_page: '', + tab_selects: '', + redirect_params: id + } + }); + + if (isSuccess) { + return data.data; + } + else { + this.$env.log(`获取栏目信息失败!${response}`); + + return {}; + } + } + + // 获取栏目列表 + async getTagByRandom() { + const { isSuccess, data, response } = await requestApi('https://dingyue-api.smzdm.com/tuijian/search_result', { + headers: this.getHeaders(), + data: { + time_code: '', + nav_id: '', + type: 'tag', + limit: 20 + } + }); + + if (isSuccess) { + return data.data.rows[Math.floor(Math.random() * data.data.rows.length)]; + } + else { + this.$env.log(`获取栏目列表失败!${response}`); + + return false; + } + } + + // 获取文章详情 + async getArticleDetail(id) { + const { isSuccess, data, response } = await requestApi(`https://article-api.smzdm.com/article_detail/${id}`, { + headers: this.getHeaders(), + data: { + comment_flow: '', + hashcode: '', + lastest_update_time: '', + uhome: 0, + imgmode: 0, + article_channel_id: 0, + h5hash: '' + } + }); + + if (isSuccess) { + return data.data; + } + else { + this.$env.log(`获取文章详情失败!${response}`); + + return false; + } + } + + // 获取好价详情 + async getHaojiaDetail(id) { + const { isSuccess, data, response } = await requestApi(`https://haojia-api.smzdm.com/detail/${id}`, { + headers: this.getHeaders(), + data: { + imgmode: 0, + hashcode: '', + h5hash: '' + } + }); + + if (isSuccess) { + return data.data; + } + else { + this.$env.log(`获取好价详情失败!${response}`); + + return false; + } + } + + // 收藏 + async favorite({id, channelId, method}) { + const { isSuccess, response } = await requestApi(`https://user-api.smzdm.com/favorites/${method}`, { + method: 'post', + headers: this.getHeaders(), + data: { + touchstone_event: this.getTouchstoneEvent({ + event_value: { + aid: id, + cid: channelId, + is_detail: true + }, + sourceMode: '我的_我的任务页', + sourcePage: `Android/长图文/P/${id}/`, + upperLevel_url: '个人中心/赚奖励/' + }), + token: this.token, + id, + channel_id: channelId + } + }); + + if (isSuccess) { + this.$env.log(`${method} 收藏成功: ${id}`); + } + else { + this.$env.log(`${method} 收藏失败!${response}`); + } + + return { + isSuccess, + response + }; + } + + getTouchstoneEvent(obj) { + const defaultObj = { + search_tv: 'f', + sourceRoot: '个人中心', + trafic_version: '113_a,115_b,116_e,118_b,131_b,132_b,134_b,136_b,139_a,144_a,150_b,153_a,179_a,183_b,185_b,188_b,189_b,193_a,196_b,201_a,204_a,205_a,208_b,222_b,226_a,228_a,22_b,230_b,232_b,239_b,254_a,255_b,256_b,258_b,260_b,265_a,267_a,269_a,270_c,273_b,276_a,278_a,27_a,280_a,281_a,283_b,286_a,287_a,290_a,291_b,295_a,302_a,306_b,308_b,312_b,314_a,317_a,318_a,322_b,325_a,326_a,329_b,32_c,332_b,337_c,341_a,347_a,349_b,34_a,351_a,353_b,355_a,357_b,366_b,373_B,376_b,378_b,380_b,388_b,391_b,401_d,403_b,405_b,407_b,416_a,421_a,424_b,425_b,427_a,436_b,43_j,440_a,442_a,444_b,448_a,450_b,451_b,454_b,455_a,458_c,460_a,463_c,464_b,466_b,467_b,46_a,470_b,471_b,474_b,475_a,484_b,489_a,494_b,496_b,498_a,500_a,503_b,507_b,510_bb,512_b,515_a,520_a,522_b,525_c,527_b,528_a,59_a,65_b,85_b,102_b,103_a,106_b,107_b,10_f,11_b,120_a,143_b,157_g,158_c,159_c,160_f,161_d,162_e,163_a,164_a,165_a,166_f,171_a,174_a,175_e,176_d,209_b,225_a,235_a,236_b,237_c,272_b,296_c,2_f,309_a,315_b,334_a,335_d,339_b,346_b,361_b,362_d,367_b,368_a,369_e,374_b,381_c,382_b,383_d,385_b,386_c,389_i,38_b,390_d,396_a,398_b,3_a,413_a,417_a,418_c,419_b,420_b,422_e,428_a,430_a,431_d,432_e,433_a,437_b,438_c,478_b,479_b,47_a,480_a,481_b,482_a,483_a,488_b,491_j,492_j,504_b,505_a,514_a,518_b,52_d,53_d,54_v,55_z1,56_z3,66_a,67_i,68_a1,69_i,74_i,77_d,93_a', + tv: 'z1' + }; + + return JSON.stringify({...defaultObj, ...obj}); + } + + // 关注品牌 + async followBrand({keywordId, keyword, method}) { + const touchstone = this.getTouchstoneEvent({ + event_value: { + cid: '44', + is_detail: true, + aid: String(keywordId) + }, + sourceMode: '百科_品牌详情页', + sourcePage: `Android/其他/品牌详情页/${keyword}/${keywordId}/`, + upperLevel_url: '个人中心/赚奖励/' + }); + + const { isSuccess, response } = await requestApi(`https://dingyue-api.smzdm.com/dy/util/api/user_action`, { + method: 'post', + headers: this.getHeaders(), + data: { + action: method, + params: JSON.stringify({ + keyword: keywordId, + keyword_id: keywordId, + type: 'brand' + }), + refer: `Android/其他/品牌详情页/${keyword}/${keywordId}/`, + touchstone_event: touchstone + } + }); + + if (isSuccess) { + this.$env.log(`${method} 关注成功: ${keyword}`); + } + else { + this.$env.log(`${method} 关注失败!${response}`); + } + + return { + isSuccess, + response + }; + } + + // 获取品牌信息 + async getBrandDetail(id) { + const { isSuccess, data, response } = await requestApi('https://brand-api.smzdm.com/brand/brand_basic', { + headers: this.getHeaders(), + data: { + brand_id: id + } + }); + + if (isSuccess) { + return data.data; + } + else { + this.$env.log(`获取品牌信息失败!${response}`); + + return {}; + } + } + + // 根据栏目信息获取文章列表 + async getArticleListFromLanmu(id, num = 1) { + const lanmuDetail = await this.getTagDetail(id); + + if (!lanmuDetail.lanmu_id) { + return []; + } + + const { isSuccess, data, response } = await requestApi('https://common-api.smzdm.com/lanmu/list_data', { + headers: this.getHeaders(), + data: { + price_lt: '', + order: '', + category_ids: '', + price_gt: '', + referer_article: '', + tag_params: '', + mall_ids: '', + time_sort: '', + page: 1, + params: id, + limit: 20, + tab_params: lanmuDetail.tab[0].params + } + }); + + if (isSuccess) { + // 取前 num 个做任务 + return data.data.rows.slice(0, num); + } + else { + this.$env.log(`获取文章列表失败: ${response}`); + return []; + } + } + + // 点赞 + async rating({id, channelId, method, type}) { + const { isSuccess, response } = await requestApi(`https://user-api.smzdm.com/rating/${method}`, { + method: 'post', + headers: this.getHeaders(), + data: { + touchstone_event: this.getTouchstoneEvent({ + event_value: { + aid: id, + cid: channelId, + is_detail: true + }, + sourceMode: '栏目页', + sourcePage: `Android//P/${id}/`, + upperLevel_url: '栏目页///' + }), + token: this.token, + id, + channel_id: channelId, + wtype: type + } + }); + + if (isSuccess) { + this.$env.log(`${method} 点赞成功: ${id}`); + } + else { + this.$env.log(`${method} 点赞失败!${response}`); + } + + return { + isSuccess, + response + }; + } + + // 发表评论 + async submitComment({ articleId, channelId, content }) { + const { isSuccess, data, response } = await requestApi('https://comment-api.smzdm.com/comments/submit', { + method: 'post', + headers: this.getHeaders(), + data: { + touchstone_event: this.getTouchstoneEvent({ + event_value: { + aid: articleId, + cid: channelId, + is_detail: true + }, + sourceMode: '好物社区_全部', + sourcePage: `Android/长图文/${articleId}/评论页/`, + upperLevel_url: '好物社区/首页/全部/', + sourceRoot: '社区' + }), + is_like: 3, + reply_from: 3, + smiles: 0, + atta: 0, + parentid: 0, + token: this.token, + article_id: articleId, + channel_id: channelId, + content + } + }); + + if (isSuccess) { + this.$env.log(`评论发表成功: ${data.data.comment_ID}`); + } + else { + this.$env.log(`评论发表失败!${response}`); + } + + return { + isSuccess, + data, + response + }; + } + + // 删除评论 + async removeComment(id) { + const { isSuccess, response } = await requestApi('https://comment-api.smzdm.com/comments/delete_comment', { + method: 'post', + headers: this.getHeaders(), + data: { + comment_id: id + } + }); + + if (isSuccess) { + this.$env.log(`评论删除成功: ${id}`); + } + else { + this.$env.log(`评论删除失败!${response}`); + } + + return { + isSuccess, + response + }; + } + + // 获取 Dingyue 状态 + async getDingyueStatus(name) { + const { isSuccess, data, response } = await requestApi('https://dingyue-api.smzdm.com/dingyue/follow_status', { + method: 'post', + headers: this.getHeaders(), + data: { + rules: JSON.stringify([{ + type: 'tag', + keyword: name + }]) + } + }); + + if (isSuccess) { + return data; + } + else { + this.$env.log(`获取订阅状态失败: ${response}`); + return {}; + } + } + + // 根据 Tag ID 获取文章列表 + async getArticleListFromTag(id, name, num = 1) { + const status = this.getDingyueStatus(name); + + const { isSuccess, data, response } = await requestApi('https://tag-api.smzdm.com/theme/detail_feed', { + headers: this.getHeaders(), + data: { + article_source: 1, + past_num: 0, + feed_sort: 2, + smzdm_id: status.smzdm_id, + tag_id: id, + name, + time_sort: 0, + page: 1, + article_tab: 0, + limit: 20 + } + }); + + if (isSuccess) { + // 取前 num 个做任务 + return data.data.rows.slice(0, num); + } + else { + this.$env.log(`获取文章列表失败: ${response}`); + return []; + } + } +} + +module.exports = { + SmzdmTaskBot +}; diff --git a/package.json b/package.json index 34c908a..184c44e 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "description": "smzdm 自用脚本 for 青龙面板,支持 App 端签到、转盘抽奖、每日任务等功能", "main": "smzdm_checkin.js", "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" + "lint": "eslint --cache --max-warnings 0 \"./*.{js,ts}\" --ignore-path .gitignore" }, "repository": { "type": "git", diff --git a/smzdm_task.js b/smzdm_task.js index af9cc16..7883264 100644 --- a/smzdm_task.js +++ b/smzdm_task.js @@ -6,16 +6,17 @@ cron: 20 14 * * * */ const Env = require('./env'); -const { SmzdmBot, requestApi, removeTags, getEnvCookies, wait } = require('./bot'); +const { requestApi, removeTags, getEnvCookies, wait } = require('./bot'); const notify = require('./sendNotify'); +const { SmzdmTaskBot } = require('./library_task'); // ------------------------------------ const $ = new Env('smzdm 每日任务'); -class SmzdmTaskBot extends SmzdmBot { +class SmzdmNormalTaskBot extends SmzdmTaskBot { constructor(cookie) { - super(cookie); + super(cookie, $); } // 主函数 @@ -51,1125 +52,6 @@ class SmzdmTaskBot extends SmzdmBot { return notifyMsg || '无可执行任务'; } - // 执行任务列表中的任务 - async doTasks(tasks) { - let notifyMsg = ''; - - for (let i = 0; i < tasks.length; i++) { - const task = tasks[i]; - - // 待领取任务 - if (task.task_status == '3') { - $.log(`领取[${task.task_name}]奖励:`); - - const { isSuccess } = await this.receiveReward(task.task_id); - - notifyMsg += `${isSuccess ? '🟢' : '❌'}领取[${task.task_name}]奖励${isSuccess ? '成功' : '失败!请查看日志'}\n`; - - await wait(5, 15); - } - // 未完成任务 - else if (task.task_status == '2') { - // 浏览文章任务 - if (task.task_event_type == 'interactive.view.article') { - const { isSuccess } = await this.doViewTask(task); - - notifyMsg += this.getTaskNotifyMessage(isSuccess, task); - - await wait(5, 15); - } - // 分享任务 - else if (task.task_event_type == 'interactive.share') { - const { isSuccess } = await this.doShareTask(task); - - notifyMsg += this.getTaskNotifyMessage(isSuccess, task); - - await wait(5, 15); - } - // 抽奖任务 - else if (task.task_event_type == 'guide.crowd') { - const { isSuccess, code } = await this.doCrowdTask(task); - - if (code !== 99) { - notifyMsg += this.getTaskNotifyMessage(isSuccess, task); - } - - await wait(5, 15); - } - // 关注用户任务 - else if (task.task_event_type == 'interactive.follow.user') { - const { isSuccess } = await this.doFollowUserTask(task); - - notifyMsg += this.getTaskNotifyMessage(isSuccess, task); - - await wait(5, 15); - } - // 关注栏目任务 - else if (task.task_event_type == 'interactive.follow.tag') { - const { isSuccess } = await this.doFollowTagTask(task); - - notifyMsg += this.getTaskNotifyMessage(isSuccess, task); - - await wait(5, 15); - } - // 关注品牌 - else if (task.task_event_type == 'interactive.follow.brand') { - const { isSuccess } = await this.doFollowBrandTask(task); - - notifyMsg += this.getTaskNotifyMessage(isSuccess, task); - - await wait(5, 15); - } - // 收藏任务 - else if (task.task_event_type == 'interactive.favorite') { - const { isSuccess } = await this.doFavoriteTask(task); - - notifyMsg += this.getTaskNotifyMessage(isSuccess, task); - - await wait(5, 15); - } - // 点赞任务 - else if (task.task_event_type == 'interactive.rating') { - const { isSuccess } = await this.doRatingTask(task); - - notifyMsg += this.getTaskNotifyMessage(isSuccess, task); - - await wait(5, 15); - } - // 评论任务 - else if (task.task_event_type == 'interactive.comment') { - if (process.env.SMZDM_COMMENT && String(process.env.SMZDM_COMMENT).length > 10) { - const { isSuccess } = await this.doCommentTask(task); - - notifyMsg += this.getTaskNotifyMessage(isSuccess, task); - - await wait(5, 15); - } - else { - $.log('🟡请设置 SMZDM_COMMENT 环境变量后才能做评论任务!'); - } - } - } - } - - return notifyMsg; - } - - getTaskNotifyMessage(isSuccess, task) { - return `${isSuccess ? '🟢' : '❌'}完成[${task.task_name}]任务${isSuccess ? '成功' : '失败!请查看日志'}\n`; - } - - // 执行评论任务 - async doCommentTask(task) { - $.log(`开始任务: ${task.task_name}`); - - const articles = await this.getArticleList(20); - - if (articles.length < 1) { - return { - isSuccess: false - }; - } - - // 随机选一篇文章来评论 - const article = articles[Math.floor(Math.random() * articles.length)]; - - await wait(3, 10); - - const {isSuccess, data } = await this.submitComment({ - articleId: article.article_id, - channelId: article.article_channel_id, - content: process.env.SMZDM_COMMENT - }); - - if (!isSuccess) { - return { - isSuccess - }; - } - - $.log('删除评论'); - await wait(20, 30); - - const {isSuccess: result } = await this.removeComment(data.data.comment_ID); - - if (!result) { - $.log('再试一次'); - await wait(10, 20); - - // 不成功再执行一次删除 - await this.removeComment(data.data.comment_ID); - } - - $.log('领取奖励'); - await wait(5, 15); - - return await this.receiveReward(task.task_id); - } - - // 通过 url 获取文章信息 - async getArticleInfoByLink(link, id) { - const { isSuccess, response } = await requestApi(link, { - method: 'get', - headers: this.getHeaders(), - parseJSON: false, - sign: false - }); - - if (!isSuccess) { - $.log(`获取文章信息失败!${response}`); - return null; - } - - // 通过正则提取页面中的 channel_id - const re = /'channel_id':'(\d+)'/; - const matchRet = response.match(re); - - if (!matchRet) { - $.log(`获取文章信息失败!${response}`); - return null; - } - - return { - 'article_id': id, - 'article_channel_id': matchRet[1] - }; - } - - // 执行点赞任务 - async doRatingTask(task) { - $.log(`开始任务: ${task.task_name}`); - - let article; - - if (task.task_description.indexOf('任意') >= 0 || task.task_redirect_url.link_val == '0' || !task.task_redirect_url.link_val) { - // 随机选一篇文章 - const articles = await this.getArticleList(20); - - if (articles.length < 1) { - return { - isSuccess: false - }; - } - - article = this.getOneByRandom(articles); - } - else if (task.task_redirect_url.link_type === 'lanmu') { - // 从栏目获取文章 - const articles = await this.getArticleListFromLanmu(task.task_redirect_url.link_val, 20); - - if (articles.length < 1) { - return { - isSuccess: false - }; - } - - article = this.getOneByRandom(articles); - } - else if (task.task_redirect_url.link != '' && task.task_redirect_url.link_val != '') { - article = await this.getArticleInfoByLink(task.task_redirect_url.link, task.task_redirect_url.link_val); - - if (!article) { - return { - isSuccess: false - }; - } - } - else { - $.log('尚未支持'); - - return { - isSuccess: false - }; - } - - await wait(3, 10); - - if (article.article_price) { - // 点值 - await this.rating({ - method: 'worth_cancel', - type: 3, - id: article.article_id, - channelId: article.article_channel_id - }); - - await wait(3, 10); - - await this.rating({ - method: 'worth_create', - type: 1, - id: article.article_id, - channelId: article.article_channel_id - }); - - await wait(3, 10); - - await this.rating({ - method: 'worth_cancel', - type: 3, - id: article.article_id, - channelId: article.article_channel_id - }); - } - else { - // 点赞 - await this.rating({ - method: 'like_cancel', - id: article.article_id, - channelId: article.article_channel_id - }); - - await wait(3, 10); - - await this.rating({ - method: 'like_create', - id: article.article_id, - channelId: article.article_channel_id - }); - - await wait(3, 10); - - await this.rating({ - method: 'like_cancel', - id: article.article_id, - channelId: article.article_channel_id - }); - } - - $.log('领取奖励'); - await wait(5, 15); - - return await this.receiveReward(task.task_id); - } - - // 执行收藏任务 - async doFavoriteTask(task) { - $.log(`开始任务: ${task.task_name}`); - - let articleId = ''; - let channelId = ''; - - if (task.task_redirect_url.link_type === 'lanmu') { - // 从栏目获取文章 - const articles = await this.getArticleListFromLanmu(task.task_redirect_url.link_val, 20); - - if (articles.length < 1) { - return { - isSuccess: false - }; - } - - const article = this.getOneByRandom(articles); - - articleId = article.article_id; - channelId = article.article_channel_id; - } - else if (task.task_redirect_url.link_type === 'tag') { - // 从 Tag 获取文章 - const articles = await this.getArticleListFromTag(task.task_redirect_url.link_val, task.task_redirect_url.link_title, 20); - - if (articles.length < 1) { - return { - isSuccess: false - }; - } - - const article = this.getOneByRandom(articles); - - articleId = article.article_id; - channelId = article.article_channel_id; - } - else if (task.task_redirect_url.link_val == '0' || !task.task_redirect_url.link_val) { - // 随机选一篇文章 - const articles = await this.getArticleList(20); - - if (articles.length < 1) { - return { - isSuccess: false - }; - } - - const article = this.getOneByRandom(articles); - - articleId = article.article_id; - channelId = article.article_channel_id; - } - else { - articleId = task.task_redirect_url.link_val; - - // 获取文章信息 - const articleDetail = await this.getArticleDetail(articleId); - - if (articleDetail === false) { - return { - isSuccess: false - }; - } - - channelId = articleDetail.channel_id; - } - - await wait(3, 10); - - await this.favorite({ - method: 'destroy', - id: articleId, - channelId - }); - - await wait(3, 10); - - await this.favorite({ - method: 'create', - id: articleId, - channelId - }); - - await wait(3, 10); - - await this.favorite({ - method: 'destroy', - id: articleId, - channelId - }); - - $.log('领取奖励'); - await wait(5, 15); - - return await this.receiveReward(task.task_id); - } - - // 执行关注用户任务 - async doFollowUserTask(task) { - $.log(`开始任务: ${task.task_name}`); - - // 随机选一个用户 - const user = await this.getUserByRandom(); - - if (!user) { - return { - isSuccess: false - }; - } - - await wait(3, 10); - - for (let i = 0; i < Number(task.task_even_num - task.task_finished_num); i++) { - if (user.is_follow == '1') { - await this.follow({ - method: 'destroy', - type: 'user', - keyword: user.keyword - }); - - await wait(3, 10); - } - - await this.follow({ - method: 'create', - type: 'user', - keyword: user.keyword - }); - - await wait(3, 10); - - if (user.is_follow == '0') { - await this.follow({ - method: 'destroy', - type: 'user', - keyword: user.keyword - }); - } - - await wait(3, 10); - } - - $.log('领取奖励'); - await wait(5, 15); - - return await this.receiveReward(task.task_id); - } - - // 执行关注栏目任务(先取关,再关注,最后取关) - async doFollowTagTask(task) { - $.log(`开始任务: ${task.task_name}`); - - let lanmuId = ''; - - if (task.task_redirect_url.link_val == '0') { - const tag = await this.getTagByRandom(); - - if (tag === false) { - return { - isSuccess: false - }; - } - - lanmuId = tag.lanmu_id; - - await wait(3, 10); - } - else { - lanmuId = task.task_redirect_url.link_val; - } - - // 获取栏目信息 - const tagDetail = await this.getTagDetail(lanmuId); - - if (!tagDetail.lanmu_id) { - $.log('获取栏目信息失败!'); - - return { - isSuccess: false - }; - } - - await wait(3, 10); - - await this.follow({ - method: 'destroy', - type: 'tag', - keywordId: tagDetail.lanmu_id, - keyword: tagDetail.lanmu_info.lanmu_name - }); - - await wait(3, 10); - - await this.follow({ - method: 'create', - type: 'tag', - keywordId: tagDetail.lanmu_id, - keyword: tagDetail.lanmu_info.lanmu_name - }); - - await wait(3, 10); - - await this.follow({ - method: 'destroy', - type: 'tag', - keywordId: tagDetail.lanmu_id, - keyword: tagDetail.lanmu_info.lanmu_name - }); - - $.log('领取奖励'); - await wait(5, 15); - - return await this.receiveReward(task.task_id); - } - - // 执行关注品牌任务(先取关,再关注,最后取关) - async doFollowBrandTask(task) { - $.log(`开始任务: ${task.task_name}`); - - // 获取品牌信息 - const brandDetail = await this.getBrandDetail(task.task_redirect_url.link_val); - - if (!brandDetail.id) { - return { - isSuccess: false - }; - } - - await wait(3, 10); - - await this.followBrand({ - method: 'dingyue_lanmu_del', - keywordId: brandDetail.id, - keyword: brandDetail.title - }); - - await wait(3, 10); - - await this.followBrand({ - method: 'dingyue_lanmu_add', - keywordId: brandDetail.id, - keyword: brandDetail.title - }); - - await wait(3, 10); - - await this.followBrand({ - method: 'dingyue_lanmu_del', - keywordId: brandDetail.id, - keyword: brandDetail.title - }); - - $.log('领取奖励'); - await wait(5, 15); - - return await this.receiveReward(task.task_id); - } - - // 执行抽奖任务 - async doCrowdTask(task) { - $.log(`开始任务: ${task.task_name}`); - - let { isSuccess, data } = await this.getCrowd('免费', 0); - - if (!isSuccess) { - if (process.env.SMZDM_CROWD_SILVER_5 == 'yes') { - ({ isSuccess, data } = await this.getCrowd('5碎银子', 5)); - - if (!isSuccess) { - return { - isSuccess, - code: 99 - }; - } - } - else { - $.log('🟡请设置 SMZDM_CROWD_SILVER_5 环境变量值为 yes 后才能进行5碎银子抽奖!'); - - return { - isSuccess, - code: 99 - }; - } - } - - await wait(5, 15); - - const result = await this.joinCrowd(data); - - if (!result.isSuccess) { - return { - isSuccess: result.isSuccess - }; - } - - $.log('领取奖励'); - await wait(5, 15); - - return await this.receiveReward(task.task_id); - } - - // 执行文章分享任务 - async doShareTask(task) { - $.log(`开始任务: ${task.task_name}`); - - let articles = []; - - if (task.article_id == '0') { - articles = await this.getArticleList(task.task_even_num - task.task_finished_num); - - await wait(3, 10); - } - else { - articles = [{ - article_id: task.article_id, - article_channel_id: task.channel_id - }]; - } - - for (let i = 0; i < articles.length; i++) { - $.log(`开始分享第 ${i + 1} 篇文章...`); - - const article = articles[i]; - - if (task.task_redirect_url.link_type != 'other') { - // 模拟打开文章 - if (/detail_haojia/i.test(task.task_redirect_url.scheme_url)) { - await this.getHaojiaDetail(article.article_id); - } - else { - await this.getArticleDetail(article.article_id); - } - - await wait(8, 20); - } - - await this.shareArticleDone(article.article_id, article.article_channel_id); - await this.shareDailyReward(article.article_channel_id); - await this.shareCallback(article.article_id, article.article_channel_id); - - await wait(5, 15); - } - - $.log('领取奖励'); - await wait(3, 10); - - return await this.receiveReward(task.task_id); - } - - // 执行浏览任务 - async doViewTask(task) { - $.log(`开始任务: ${task.task_name}`); - - let articles = []; - let isRead = true; - - if (task.article_id == '0') { - isRead = true; - articles = await this.getArticleList(task.task_even_num - task.task_finished_num); - - await wait(3, 10); - } - else { - for (let i = 0; i < task.task_even_num - task.task_finished_num; i++) { - articles.push({ - article_id: task.article_id, - article_channel_id: task.channel_id - }); - } - - isRead = task.task_redirect_url.link_val != ''; - } - - for (let i = 0; i < articles.length; i++) { - $.log(`开始阅读第 ${i + 1} 篇文章...`); - - const article = articles[i]; - - if (isRead) { - // 模拟打开文章 - if (/detail_haojia/i.test(task.task_redirect_url.scheme_url)) { - await this.getHaojiaDetail(article.article_id); - } - else { - await this.getArticleDetail(article.article_id); - } - } - - $.log('模拟阅读文章'); - await wait(20, 50); - - const { isSuccess, response } = await requestApi('https://user-api.smzdm.com/task/event_view_article_sync', { - method: 'post', - headers: this.getHeaders(), - data: { - article_id: article.article_id, - channel_id: article.article_channel_id, - task_id: task.task_id - } - }); - - if (isSuccess) { - $.log('完成阅读成功。'); - } - else { - $.log(`完成阅读失败!${response}`); - } - - await wait(5, 15); - } - - $.log('领取奖励'); - await wait(3, 10); - - return await this.receiveReward(task.task_id); - } - - // 领取活动奖励 - async receiveActivity(activity) { - $.log(`领取奖励: ${activity.activity_name}`); - - const { isSuccess, data, response } = await requestApi('https://user-api.smzdm.com/task/activity_receive', { - method: 'post', - headers: this.getHeaders(), - data: { - activity_id: activity.activity_id - } - }); - - if (isSuccess) { - $.log(removeTags(data.data.reward_msg)); - - return { - isSuccess - }; - } - else { - $.log(`领取奖励失败!${response}`); - - return { - isSuccess - }; - } - } - - // 关注/取关 - async follow({keywordId, keyword, type, method}) { - let touchstone = ''; - - if (type === 'user') { - touchstone = this.getTouchstoneEvent({ - event_value: { - cid: 'null', - is_detail: false, - p: '1' - }, - sourceMode: '我的_我的任务页', - sourcePage: 'Android/关注/达人/爆料榜', - upperLevel_url: '关注/达人/推荐/' - }); - } - else if (type === 'tag') { - touchstone = this.getTouchstoneEvent({ - event_value: { - cid: 'null', - is_detail: false - }, - sourceMode: '栏目页', - sourcePage: `Android/栏目页/${keyword}/${keywordId}/`, - source_page_type_id: String(keywordId), - upperLevel_url: '个人中心/赚奖励/', - source_area: { - lanmu_id: String(keywordId), - prev_source_scence: '我的_我的任务页' - } - }); - } - - const { isSuccess, response } = await requestApi(`https://dingyue-api.smzdm.com/dingyue/${method}`, { - method: 'post', - headers: this.getHeaders(), - data: { - touchstone_event: touchstone, - refer: '', - keyword_id: keywordId, - keyword, - type - } - }); - - if (isSuccess) { - $.log(`${method} 关注成功: ${keyword}`); - } - else { - $.log(`${method} 关注失败!${response}`); - } - - return { - isSuccess, - response - }; - } - - // 随机获取用户 - async getUserByRandom() { - const { isSuccess, data, response } = await requestApi('https://dingyue-api.smzdm.com/tuijian/search_result', { - method: 'post', - headers: this.getHeaders(), - data: { - nav_id: 0, - page: 1, - type: 'user', - time_code: '' - } - }); - - if (isSuccess) { - return data.data.rows[Math.floor(Math.random() * data.data.rows.length)]; - } - else { - $.log(`获取用户列表失败!${response}`); - - return false; - } - } - - // 参加抽奖 - async joinCrowd(id) { - const { isSuccess, data, response } = await requestApi('https://zhiyou.m.smzdm.com/user/crowd/ajax_participate', { - method: 'post', - sign: false, - headers: { - ...this.getHeadersForWeb(), - Origin: 'https://zhiyou.m.smzdm.com', - Referer: `https://zhiyou.m.smzdm.com/user/crowd/p/${id}/` - }, - data: { - crowd_id: id, - sourcePage: `https://zhiyou.m.smzdm.com/user/crowd/p/${id}/`, - client_type: 'android', - sourceRoot: '个人中心', - sourceMode: '幸运屋抽奖', - price_id: 1 - } - }); - - if (isSuccess) { - $.log(removeTags(data.data.msg)); - } - else { - $.log(`参加免费抽奖失败: ${response}`); - } - - return { - isSuccess, - response - }; - } - - // 获取抽奖信息 - async getCrowd(name, price) { - const { isSuccess, data, response } = await requestApi('https://zhiyou.smzdm.com/user/crowd/', { - sign: false, - parseJSON: false, - headers: this.getHeadersForWeb() - }); - - const re = new RegExp(`]+?)>\\s+?]+?>\\s*${name}(?:抽奖)?\\s*<\\/div>\\s+-${price}<\\/span>[\\s\\S]+?<\\/button>`, 'ig'); - - if (isSuccess) { - const crowds = []; - let match; - - while ((match = re.exec(data)) !== null) { - crowds.push(match[1]); - } - - if (crowds.length < 1) { - $.log(`未找到${name}抽奖`); - - return { - isSuccess: false - }; - } - - let crowd; - - if (price > 0 && process.env.SMZDM_CROWD_KEYWORD) { - crowd = crowds.find((item) => { - const match = item.match(/data-title="([^"]+)"/i); - - return (match && match[1].indexOf(process.env.SMZDM_CROWD_KEYWORD) >= 0); - }); - - if (!crowd) { - $.log('未找到符合关键词的抽奖,执行随机选取'); - crowd = this.getOneByRandom(crowds); - } - } - else { - crowd = this.getOneByRandom(crowds); - } - - const matchCrowd = crowd.match(/data-crowd_id="(\d+)"/i); - - if (matchCrowd) { - $.log(`${name}抽奖ID: ${matchCrowd[1]}`); - - return { - isSuccess: true, - data: matchCrowd[1] - }; - } - else { - $.log(`未找到${name}抽奖ID`); - - return { - isSuccess: false - }; - } - } - else { - $.log(`获取${name}抽奖失败: ${response}`); - - return { - isSuccess: false - }; - } - } - - // 分享完成 - async shareArticleDone(articleId, channelId) { - const { isSuccess, response } = await requestApi('https://user-api.smzdm.com/share/complete_share_rule', { - method: 'post', - headers: this.getHeaders(), - data: { - token: this.token, - article_id: articleId, - channel_id: channelId, - tag_name: 'gerenzhongxin' - } - }); - - if (isSuccess) { - $.log('完成分享成功。'); - - return { - isSuccess, - msg: '完成分享成功。' - }; - } - else { - $.log(`完成分享失败!${response}`); - - return { - isSuccess: false, - msg: '完成分享失败!' - }; - } - } - - // 分享完成后回调接口 - async shareCallback(articleId, channelId) { - const { isSuccess, response } = await requestApi('https://user-api.smzdm.com/share/callback', { - method: 'post', - headers: this.getHeaders(), - data: { - token: this.token, - article_id: articleId, - channel_id: channelId, - touchstone_event: this.getTouchstoneEvent({ - event_value: { - aid: articleId, - cid: channelId, - is_detail: true, - pid: '无' - }, - sourceMode: '排行榜_社区_好文精选', - sourcePage: `Android/长图文/P/${articleId}/`, - upperLevel_url: '排行榜/社区/好文精选/文章_24H/' - }) - } - }); - - if (isSuccess) { - $.log('分享回调完成。'); - - return { - isSuccess, - msg: '' - }; - } - else { - $.log(`分享回调失败!${response}`); - - return { - isSuccess, - msg: '分享回调失败!' - }; - } - } - - // 分享的每日奖励(貌似没啥用) - async shareDailyReward(channelId) { - const { isSuccess, data, response } = await requestApi('https://user-api.smzdm.com/share/daily_reward', { - method: 'post', - headers: this.getHeaders(), - data: { - token: this.token, - channel_id: channelId - } - }); - - if (isSuccess) { - $.log(data.data.reward_desc); - - return { - isSuccess, - msg: data.data.reward_desc - }; - } - else { - if (data) { - $.log(data.error_msg); - - return { - isSuccess, - msg: data.error_msg - }; - } - else { - $.log(`分享每日奖励请求失败!${response}`); - - return { - isSuccess, - msg: '分享每日奖励请求失败!' - }; - } - } - } - - // 获取文章列表 - async getArticleList(num = 1) { - const { isSuccess, data, response } = await requestApi('https://article-api.smzdm.com/ranking_list/articles', { - headers: this.getHeaders(), - data: { - offset: 0, - channel_id: 76, - tab: 2, - order: 0, - limit: 20, - exclude_article_ids: '', - stream: 'a', - ab_code: 'b' - } - }); - - if (isSuccess) { - // 取前 num 个做任务 - return data.data.rows.slice(0, num); - } - else { - $.log(`获取文章列表失败: ${response}`); - return []; - } - } - - async getRobotToken() { - const { isSuccess, data, response } = await requestApi('https://user-api.smzdm.com/robot/token', { - method: 'post', - headers: this.getHeaders() - }); - - if (isSuccess) { - return data.data.token; - } - else { - $.log(`Robot Token 获取失败!${response}`); - - return false; - } - } - - // 领取任务奖励 - async receiveReward(taskId) { - const robotToken = await this.getRobotToken(); - - if (robotToken === false) { - return { - isSuccess, - msg: '领取任务奖励失败!' - }; - } - - const { isSuccess, data, response } = await requestApi('https://user-api.smzdm.com/task/activity_task_receive', { - method: 'post', - headers: this.getHeaders(), - data: { - robot_token: robotToken, - geetest_seccode: '', - geetest_validate: '', - geetest_challenge: '', - captcha: '', - task_id: taskId - } - }); - - if (isSuccess) { - const msg = removeTags(data.data.reward_msg); - - $.log(msg); - - return { - isSuccess, - msg - }; - } - else { - $.log(`领取任务奖励失败!${response}`); - - return { - isSuccess, - msg: '领取任务奖励失败!' - }; - } - } - // 获取任务列表 async getTaskList() { const { isSuccess, data, response } = await requestApi('https://user-api.smzdm.com/task/list_v2', { @@ -1209,437 +91,118 @@ class SmzdmTaskBot extends SmzdmBot { } } - // 获取栏目信息 - async getTagDetail(id) { - const { isSuccess, data, response } = await requestApi('https://common-api.smzdm.com/lanmu/config_data', { - headers: this.getHeaders(), - data: { - middle_page: '', - tab_selects: '', - redirect_params: id - } - }); - - if (isSuccess) { - return data.data; - } - else { - $.log(`获取栏目信息失败!${response}`); - - return {}; - } - } - - // 获取栏目列表 - async getTagByRandom() { - const { isSuccess, data, response } = await requestApi('https://dingyue-api.smzdm.com/tuijian/search_result', { - headers: this.getHeaders(), - data: { - time_code: '', - nav_id: '', - type: 'tag', - limit: 20 - } - }); - - if (isSuccess) { - return data.data.rows[Math.floor(Math.random() * data.data.rows.length)]; - } - else { - $.log(`获取栏目列表失败!${response}`); - - return false; - } - } + // 领取活动奖励 + async receiveActivity(activity) { + $.log(`领取奖励: ${activity.activity_name}`); - // 获取文章详情 - async getArticleDetail(id) { - const { isSuccess, data, response } = await requestApi(`https://article-api.smzdm.com/article_detail/${id}`, { + const { isSuccess, data, response } = await requestApi('https://user-api.smzdm.com/task/activity_receive', { + method: 'post', headers: this.getHeaders(), data: { - comment_flow: '', - hashcode: '', - lastest_update_time: '', - uhome: 0, - imgmode: 0, - article_channel_id: 0, - h5hash: '' + activity_id: activity.activity_id } }); if (isSuccess) { - return data.data; - } - else { - $.log(`获取文章详情失败!${response}`); - - return false; - } - } - - // 获取好价详情 - async getHaojiaDetail(id) { - const { isSuccess, data, response } = await requestApi(`https://haojia-api.smzdm.com/detail/${id}`, { - headers: this.getHeaders(), - data: { - imgmode: 0, - hashcode: '', - h5hash: '' - } - }); + $.log(removeTags(data.data.reward_msg)); - if (isSuccess) { - return data.data; + return { + isSuccess + }; } else { - $.log(`获取好价详情失败!${response}`); + $.log(`领取奖励失败!${response}`); - return false; + return { + isSuccess + }; } } - // 收藏 - async favorite({id, channelId, method}) { - const { isSuccess, response } = await requestApi(`https://user-api.smzdm.com/favorites/${method}`, { - method: 'post', - headers: this.getHeaders(), - data: { - touchstone_event: this.getTouchstoneEvent({ - event_value: { - aid: id, - cid: channelId, - is_detail: true - }, - sourceMode: '我的_我的任务页', - sourcePage: `Android/长图文/P/${id}/`, - upperLevel_url: '个人中心/赚奖励/' - }), - token: this.token, - id, - channel_id: channelId - } - }); + // 领取任务奖励 + async receiveReward(taskId) { + const robotToken = await this.getRobotToken(); - if (isSuccess) { - $.log(`${method} 收藏成功: ${id}`); - } - else { - $.log(`${method} 收藏失败!${response}`); + if (robotToken === false) { + return { + isSuccess, + msg: '领取任务奖励失败!' + }; } - return { - isSuccess, - response - }; - } - - getTouchstoneEvent(obj) { - const defaultObj = { - search_tv: 'f', - sourceRoot: '个人中心', - trafic_version: '113_a,115_b,116_e,118_b,131_b,132_b,134_b,136_b,139_a,144_a,150_b,153_a,179_a,183_b,185_b,188_b,189_b,193_a,196_b,201_a,204_a,205_a,208_b,222_b,226_a,228_a,22_b,230_b,232_b,239_b,254_a,255_b,256_b,258_b,260_b,265_a,267_a,269_a,270_c,273_b,276_a,278_a,27_a,280_a,281_a,283_b,286_a,287_a,290_a,291_b,295_a,302_a,306_b,308_b,312_b,314_a,317_a,318_a,322_b,325_a,326_a,329_b,32_c,332_b,337_c,341_a,347_a,349_b,34_a,351_a,353_b,355_a,357_b,366_b,373_B,376_b,378_b,380_b,388_b,391_b,401_d,403_b,405_b,407_b,416_a,421_a,424_b,425_b,427_a,436_b,43_j,440_a,442_a,444_b,448_a,450_b,451_b,454_b,455_a,458_c,460_a,463_c,464_b,466_b,467_b,46_a,470_b,471_b,474_b,475_a,484_b,489_a,494_b,496_b,498_a,500_a,503_b,507_b,510_bb,512_b,515_a,520_a,522_b,525_c,527_b,528_a,59_a,65_b,85_b,102_b,103_a,106_b,107_b,10_f,11_b,120_a,143_b,157_g,158_c,159_c,160_f,161_d,162_e,163_a,164_a,165_a,166_f,171_a,174_a,175_e,176_d,209_b,225_a,235_a,236_b,237_c,272_b,296_c,2_f,309_a,315_b,334_a,335_d,339_b,346_b,361_b,362_d,367_b,368_a,369_e,374_b,381_c,382_b,383_d,385_b,386_c,389_i,38_b,390_d,396_a,398_b,3_a,413_a,417_a,418_c,419_b,420_b,422_e,428_a,430_a,431_d,432_e,433_a,437_b,438_c,478_b,479_b,47_a,480_a,481_b,482_a,483_a,488_b,491_j,492_j,504_b,505_a,514_a,518_b,52_d,53_d,54_v,55_z1,56_z3,66_a,67_i,68_a1,69_i,74_i,77_d,93_a', - tv: 'z1' - }; - - return JSON.stringify({...defaultObj, ...obj}); - } - - // 关注品牌 - async followBrand({keywordId, keyword, method}) { - const touchstone = this.getTouchstoneEvent({ - event_value: { - cid: '44', - is_detail: true, - aid: String(keywordId) - }, - sourceMode: '百科_品牌详情页', - sourcePage: `Android/其他/品牌详情页/${keyword}/${keywordId}/`, - upperLevel_url: '个人中心/赚奖励/' - }); - - const { isSuccess, response } = await requestApi(`https://dingyue-api.smzdm.com/dy/util/api/user_action`, { + const { isSuccess, data, response } = await requestApi('https://user-api.smzdm.com/task/activity_task_receive', { method: 'post', headers: this.getHeaders(), data: { - action: method, - params: JSON.stringify({ - keyword: keywordId, - keyword_id: keywordId, - type: 'brand' - }), - refer: `Android/其他/品牌详情页/${keyword}/${keywordId}/`, - touchstone_event: touchstone + robot_token: robotToken, + geetest_seccode: '', + geetest_validate: '', + geetest_challenge: '', + captcha: '', + task_id: taskId } }); if (isSuccess) { - $.log(`${method} 关注成功: ${keyword}`); - } - else { - $.log(`${method} 关注失败!${response}`); - } - - return { - isSuccess, - response - }; - } + const msg = removeTags(data.data.reward_msg); - // 获取品牌信息 - async getBrandDetail(id) { - const { isSuccess, data, response } = await requestApi('https://brand-api.smzdm.com/brand/brand_basic', { - headers: this.getHeaders(), - data: { - brand_id: id - } - }); + $.log(msg); - if (isSuccess) { - return data.data; + return { + isSuccess, + msg + }; } else { - $.log(`获取品牌信息失败!${response}`); + $.log(`领取任务奖励失败!${response}`); - return {}; + return { + isSuccess, + msg: '领取任务奖励失败!' + }; } } +} - // 根据栏目信息获取文章列表 - async getArticleListFromLanmu(id, num = 1) { - const lanmuDetail = await this.getTagDetail(id); - - if (!lanmuDetail.lanmu_id) { - return []; - } +!(async () => { + const cookies = getEnvCookies(); - const { isSuccess, data, response } = await requestApi('https://common-api.smzdm.com/lanmu/list_data', { - headers: this.getHeaders(), - data: { - price_lt: '', - order: '', - category_ids: '', - price_gt: '', - referer_article: '', - tag_params: '', - mall_ids: '', - time_sort: '', - page: 1, - params: id, - limit: 20, - tab_params: lanmuDetail.tab[0].params - } - }); + if (cookies === false) { + $.log('\n请先设置 SMZDM_COOKIE 环境变量'); - if (isSuccess) { - // 取前 num 个做任务 - return data.data.rows.slice(0, num); - } - else { - $.log(`获取文章列表失败: ${response}`); - return []; - } + return; } - // 点赞 - async rating({id, channelId, method, type}) { - const { isSuccess, response } = await requestApi(`https://user-api.smzdm.com/rating/${method}`, { - method: 'post', - headers: this.getHeaders(), - data: { - touchstone_event: this.getTouchstoneEvent({ - event_value: { - aid: id, - cid: channelId, - is_detail: true - }, - sourceMode: '栏目页', - sourcePage: `Android//P/${id}/`, - upperLevel_url: '栏目页///' - }), - token: this.token, - id, - channel_id: channelId, - wtype: type - } - }); - - if (isSuccess) { - $.log(`${method} 点赞成功: ${id}`); - } - else { - $.log(`${method} 点赞失败!${response}`); - } + let notifyContent = ''; - return { - isSuccess, - response - }; - } - - // 发表评论 - async submitComment({ articleId, channelId, content }) { - const { isSuccess, data, response } = await requestApi('https://comment-api.smzdm.com/comments/submit', { - method: 'post', - headers: this.getHeaders(), - data: { - touchstone_event: this.getTouchstoneEvent({ - event_value: { - aid: articleId, - cid: channelId, - is_detail: true - }, - sourceMode: '好物社区_全部', - sourcePage: `Android/长图文/${articleId}/评论页/`, - upperLevel_url: '好物社区/首页/全部/', - sourceRoot: '社区' - }), - is_like: 3, - reply_from: 3, - smiles: 0, - atta: 0, - parentid: 0, - token: this.token, - article_id: articleId, - channel_id: channelId, - content - } - }); + for (let i = 0; i < cookies.length; i++) { + const cookie = cookies[i]; - if (isSuccess) { - $.log(`评论发表成功: ${data.data.comment_ID}`); + if (!cookie) { + continue; } - else { - $.log(`评论发表失败!${response}`); - } - - return { - isSuccess, - data, - response - }; - } - // 删除评论 - async removeComment(id) { - const { isSuccess, response } = await requestApi('https://comment-api.smzdm.com/comments/delete_comment', { - method: 'post', - headers: this.getHeaders(), - data: { - comment_id: id - } - }); - - if (isSuccess) { - $.log(`评论删除成功: ${id}`); - } - else { - $.log(`评论删除失败!${response}`); + if (i > 0) { + $.log(); + await wait(10, 30); + $.log(); } - return { - isSuccess, - response - }; - } - - // 获取 Dingyue 状态 - async getDingyueStatus(name) { - const { isSuccess, data, response } = await requestApi('https://dingyue-api.smzdm.com/dingyue/follow_status', { - method: 'post', - headers: this.getHeaders(), - data: { - rules: JSON.stringify([{ - type: 'tag', - keyword: name - }]) - } - }); - - if (isSuccess) { - return data; - } - else { - $.log(`获取订阅状态失败: ${response}`); - return {}; - } - } + const sep = `\n****** 账号${i + 1} ******\n`; - // 根据 Tag ID 获取文章列表 - async getArticleListFromTag(id, name, num = 1) { - const status = this.getDingyueStatus(name); + $.log(sep); - const { isSuccess, data, response } = await requestApi('https://tag-api.smzdm.com/theme/detail_feed', { - headers: this.getHeaders(), - data: { - article_source: 1, - past_num: 0, - feed_sort: 2, - smzdm_id: status.smzdm_id, - tag_id: id, - name, - time_sort: 0, - page: 1, - article_tab: 0, - limit: 20 - } - }); + const bot = new SmzdmNormalTaskBot(cookie); + const msg = await bot.run(); - if (isSuccess) { - // 取前 num 个做任务 - return data.data.rows.slice(0, num); - } - else { - $.log(`获取文章列表失败: ${response}`); - return []; - } + notifyContent += `${sep}${msg}\n`; } -} - -if (require.main === module) { - !(async () => { - const cookies = getEnvCookies(); - if (cookies === false) { - $.log('\n请先设置 SMZDM_COOKIE 环境变量'); - - return; - } - - let notifyContent = ''; - - for (let i = 0; i < cookies.length; i++) { - const cookie = cookies[i]; - - if (!cookie) { - continue; - } - - if (i > 0) { - $.log(); - await wait(10, 30); - $.log(); - } - - const sep = `\n****** 账号${i + 1} ******\n`; - - $.log(sep); - - const bot = new SmzdmTaskBot(cookie); - const msg = await bot.run(); - - notifyContent += `${sep}${msg}\n`; - } - - $.log(); - - await notify.sendNotify($.name, notifyContent); - })().catch((e) => { - $.log('', `❌ ${$.name}, 失败! 原因: ${e}!`, '') - }).finally(() => { - $.done(); - }); -} + $.log(); -module.exports = { - SmzdmTaskBot -}; + await notify.sendNotify($.name, notifyContent); +})().catch((e) => { + $.log('', `❌ ${$.name}, 失败! 原因: ${e}!`, '') +}).finally(() => { + $.done(); +}); diff --git a/smzdm_testing.js b/smzdm_testing.js index 157ff2a..d3e8603 100644 --- a/smzdm_testing.js +++ b/smzdm_testing.js @@ -8,7 +8,7 @@ cron: 20 15 * * * const Env = require('./env'); const { requestApi, getEnvCookies, wait } = require('./bot'); const notify = require('./sendNotify'); -const { SmzdmTaskBot } = require('./smzdm_task'); +const { SmzdmTaskBot } = require('./library_task'); // ------------------------------------ @@ -16,7 +16,7 @@ const $ = new Env('smzdm 全民众测能量值任务'); class SmzdmTestingTaskBot extends SmzdmTaskBot { constructor(cookie) { - super(cookie); + super(cookie, $); } // 主函数 @@ -54,12 +54,12 @@ class SmzdmTestingTaskBot extends SmzdmTaskBot { const { isSuccess, data, response } = await requestApi('https://zhiyou.m.smzdm.com/task/task/ajax_get_activity_id', { method: 'get', data: { - 'from': 'zhongce', + 'from': 'zhongce' }, headers: { ...this.getHeadersForWeb(), Origin: 'https://test.m.smzdm.com', - Referer: 'https://test.m.smzdm.com/', + Referer: 'https://test.m.smzdm.com/' } }); @@ -80,9 +80,9 @@ class SmzdmTestingTaskBot extends SmzdmTaskBot { const { isSuccess, data, response } = await requestApi('https://zhiyou.m.smzdm.com/task/task/ajax_get_activity_info', { method: 'get', data: { - 'activity_id': id, + 'activity_id': id }, - headers: this.getHeadersForWeb(), + headers: this.getHeadersForWeb() }); if (isSuccess) { @@ -101,11 +101,11 @@ class SmzdmTestingTaskBot extends SmzdmTaskBot { const { isSuccess, data, response } = await requestApi('https://test.m.smzdm.com/win_coupon/user_data', { method: 'get', - headers: this.getHeadersForWeb(), + headers: this.getHeadersForWeb() }); if (isSuccess) { - let msg = `当前拥有必中券: ${data.data.my_energy.my_energy_total}\n必中券过期时间: ${data.data.my_energy.energy_expired_time}`; + const msg = `当前拥有必中券: ${data.data.my_energy.my_energy_total}\n必中券过期时间: ${data.data.my_energy.energy_expired_time}`; $.log(msg); @@ -123,9 +123,9 @@ class SmzdmTestingTaskBot extends SmzdmTaskBot { const { isSuccess, response } = await requestApi('https://zhiyou.m.smzdm.com/task/task/ajax_activity_task_receive', { method: 'post', data: { - 'task_id': taskId, + 'task_id': taskId }, - headers: this.getHeadersForWeb(), + headers: this.getHeadersForWeb() }); if (isSuccess) { @@ -133,7 +133,7 @@ class SmzdmTestingTaskBot extends SmzdmTaskBot { return { isSuccess, - msg: '', + msg: '' }; } else { @@ -141,7 +141,7 @@ class SmzdmTestingTaskBot extends SmzdmTaskBot { return { isSuccess, - msg: '领取任务奖励失败!', + msg: '领取任务奖励失败!' }; } }