白嫖云函数 【收集bugfix】

629 阅读3分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第1天,点击查看活动详情


前言

之前写过 《白嫖云函数 实现掘金签到抽奖沾喜气的脚本》,现在bugfix活动也在网页端开放了,web端每天有两个,3天内不领取会过期,所以再加一个收集bug脚本,继续白嫖。 image.png

功能实现

分析流程

image.png

  1. 查询用户可收集bug数
  2. 循环收取bug
  3. 查询活动状态
  4. 查询可用bug数
  5. 参与活动

代码

  1. 调用接口

本次使用的接口都需要aid、uuid、cookie三个参数,这三个参数可以在个人主页内的接口中获取。

image.png 需要使用到的接口:

/**
 * @Author: yuyongxing
 * @param {*} aid
 * @param {*} uuid
 * @param {*} cookie
 * @return {*} data
 * @Date: 2022-04-15 22:52:34
 * @LastEditors: yuyongxing
 * @LastEditTime: Do not edit
 * @Description: 查询用户可收集bug数
 */
const getBugList = async (aid, uuid, cookie) => {
    let { data } = await axios({
        url: `https://api.juejin.cn/user_api/v1/bugfix/not_collect?aid=${aid}&uuid=${uuid}`,
        method: 'post',
        headers: { Cookie: cookie }
    })
    return data
}

/**
 * @Author: yuyongxing
 * @param {*} aid
 * @param {*} uuid
 * @param {*} cookie
 * @param {*} params
 * @return {*}data
 * @Date: 2022-04-15 22:53:01
 * @LastEditors: yuyongxing
 * @LastEditTime: Do not edit
 * @Description: 收集bug
 */
const collectBug = async (aid, uuid, cookie, params) => {
    let { data } = await axios({
        url: `https://api.juejin.cn/user_api/v1/bugfix/collect?aid=${aid}&uuid=${uuid}`,
        method: 'post',
        data: params,
        headers: { Cookie: cookie }
    })
    return data
}

/**
 * @Author: yuyongxing
 * @param {*} aid
 * @param {*} uuid
 * @param {*} cookie
 * @return {*} data
 * @Date: 2022-04-15 22:53:16
 * @LastEditors: yuyongxing
 * @LastEditTime: Do not edit
 * @Description: 获取活动详情
 */
const getBugFixGameInfo = async (aid, uuid, cookie) => {
    let { data } = await axios({
        url: `https://api.juejin.cn/user_api/v1/bugfix/competition?aid=${aid}&uuid=${uuid}`,
        method: 'post',
        headers: { Cookie: cookie }
    })
    return data
}

/**
 * @Author: yuyongxing
 * @param {*} aid
 * @param {*} uuid
 * @param {*} cookie
 * @param {*} params
 * @return {*} data
 * @Date: 2022-04-15 22:53:32
 * @LastEditors: yuyongxing
 * @LastEditTime: Do not edit
 * @Description: 获取活动用户详情:可用Bug数量
 */
const getBugFixGameUserInfo = async (aid, uuid, cookie, params) => {
    let { data } = await axios({
        url: `https://api.juejin.cn/user_api/v1/bugfix/user?aid=${aid}&uuid=${uuid}`,
        method: 'post',
        data: params,
        headers: { Cookie: cookie }
    })
    return data
}

/**
 * @Author: yuyongxing
 * @param {*} aid
 * @param {*} uuid
 * @param {*} cookie
 * @param {*} params
 * @return {*} data
 * @Date: 2022-04-15 22:53:49
 * @LastEditors: yuyongxing
 * @LastEditTime: Do not edit
 * @Description: 参与活动
 */
const bugFix = async (aid, uuid, cookie, params) => {
    let { data } = await axios({
        url: `https://api.juejin.cn/user_api/v1/bugfix/fix?aid=${aid}&uuid=${uuid}`,
        method: 'post',
        data: params,
        headers: { Cookie: cookie }
    })
    return data
}

  1. 消息推送

这次使用server酱,来实现微信消息推送。首先可以在官网注册,生成自己的sendKey,然后调用接口传参。需要注意的是中文需要urlencode编码

image.png

// 微信推送
const sendWxMessage = async (title, desp) => {
    title = encodeURIComponent(title)
    desp = encodeURIComponent(desp)
    let { data } = await axios({
        url: `https://sctapi.ftqq.com/${SendKey}.send?title=${title}&desp=${desp}`,
        method: 'post'
    })
    return data
}
  1. 业务流程
//省略部分代码,完整代码可以从文章底部查看 githu源代码
const bugFix_start = async () => {
    //1. 查询用户可收集bug数
    const res_bugList = await getBugList(user.aid, user.uuid, user.cookie)
    //2. 循环收取bug
    if (res_bugList.err_no == 0) {
        const res_collectBugByList = await collectBugByList(user.aid, user.uuid, user.cookie, res_bugList.data)
    }
    //3. 查询活动状态
    const res_bugFixGameInfo = await getBugFixGameInfo(aid, uuid, cookie)
    if (res_bugFixGameInfo.err_no == 0 && res_bugFixGameInfo.data.award_status == 1) {
        // 活动进行中
        //4. 查询可用bug数
        const res_bugFixGameUserInfo = await getBugFixGameUserInfo(aid, uuid, cookie, { competition_id: res_bugFixGameInfo.data.competition_id })
    }
    //5. 参与活动
    const res_bugFix = await bugFix(aid, uuid, cookie, { competition_id: res_bugFixGameInfo.data.competition_id })
}

部署云函数

部署云函数这里就不细讲了,上一篇签到脚本已经较少过了。这里介绍一个我在使用云函数时发现的一个问题:云函数的主函数里如果有未被执行完的异步会被kill掉,具体表现为:如图,云函数执行这段代码时只会输出Hello然后函数执行到最后,异步函数并不会被调用。 image.png

image.png

解决方法:可以使用await保证异步函数执行完成。

image.png

image.png

结尾

本项目仅适用于学习交流 并不具备其他用途(手动狗头🐶)。主要是发现有不活跃用户使用脚本签到被社区警告了,大家平时多在社区活跃一下。多输出知识和赞👍🏻。毕竟我们是技术社区,出现个脚本也正常。

完整代码查看:github