自动修复bug?快进来看看!

431 阅读3分钟

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

先声明下,有点标题党了。我也没想到我也会有这么一天~~~

起因

掘金上的 bugfix 游戏出来有一段时间了,但是有一个诟病一直不给解决,是什么呢?

bug收集要从两个端进行!

image.png

由于两端的bug互相不可见,每天都要到web端和app端操作收集一次bug,而且3天不收集就收集不了?这就整的很恶心,我也想社区反馈了这个问题,不知道什么时候能合并。

image.png

为了获得更好的游戏体验,所以我写了一个自动收集bug和自动参加bugfix游戏的脚本。

本着拿来即用的道理。我直接参考了自动签到、抽奖?弱爆了!简简单单教你自动挖矿!这篇文章。在他的基础上添加了我的自动脚本。

代码解析

  • 我们需要找到操作 获取bug->收集bug->参加bugfix 相关的http请求
  • 以下接口都需要 aiduidcookie,如果不知道怎么获取,可以参考上面的推荐的文章。

获取没有收集的bug列表

// 没有收集的bug列表
const NOT_COLLECT_URL = `https://api.juejin.cn/user_api/v1/bugfix/not_collect?aid=${aid}&uuid=${uid}`
  • post请求
  • 通过这个接口,我们可以拿到一个bug列表,包含参数
    • bug类型:bug_type
    • bug生成时间bug_time
  • 这两个参数是收集bug时需要用到的

收集bug

// 收集bug
const COLLECT_URL = `https://api.juejin.cn/user_api/v1/bugfix/collect?aid=${aid}&uuid=${uid}`
  • post请求
  • 这个接口就需要刚刚的参数来调用了,并且调用一次收集一个(模拟手点的过程),所以写了个简单的定时请求
const collectBugGame = async () => {
    const notCollectList = await get_not_collect()
    // console.log(notCollectList);
    // 防止死循环
    if (!notCollectList.length) return Promise.resolve()
    const collectRes = notCollectList.map((bug) => {
        return new Promise((resolve, reject) => {
            setTimeout(() => {
                resolve(collect(bug))
            }, 1000);
        })
    })
    console.log('收集完了');
    return await Promise.all(collectRes)
}

参加bugfix游戏

  • 参加bugfix游戏需要知道以下内容
    • 当前场次是否开始
    • 当前用户拥有的bug数量
    • 当前场次修复的bug数量
  • 为什么需要知道当前场次修复的bug数量和当前用户拥有的bug数量呢?因为当前场次要修复10个以上的bug才能够获得奖励,否则是没有奖励的。所以我们需要知道我们手里现在是否有10个以上的bug,有的话再参加游戏。
// 是否是第一次修复bug,并且有10个bug可修复
const isFirstBugfix = bugfixRes.award_status === 1 && bugfixUser.bug_fix_num < 10 && bugfixUser.user_own_bug >= 10
// 是否要继续修复bug
const isContinueBugfix = bugfixRes.award_status === 1 && bugfixUser.bug_fix_num >= 10 && bugfixUser.user_own_bug >= 0
// 游戏开始,并且第一次参加
if (isFirstBugfix) {
    handleBugfix({ competition_id, bug_fix_num: 10, not_self: 0 })
    // 继续修复bug
} else if (isContinueBugfix) {
    handleBugfix({ competition_id, bug_fix_num: bugfixUser.user_own_bug, not_self: 0 })
}
  • 定时每天参加一次,反正有修复10个bug就有奖励,多两个少两个都无所谓
  • 最后在自动签到逻辑中调用就可以了。
  • 这样就完成了自动签到、沾喜气、挖矿、修bug等活动的参加啦。

总结

目前的脚本只能收集web端的bug,为啥不做app端的?因为我没做过App端的请求抓取,看不到接口。

有了云函数的确是方便我们去做一下小功能了,像以前想做个定时脚本还要懂linux命令啥的,现在我们只需要把逻辑写好就行了,云函数就帮我们维护了。

最后附上github地址