Bili动态抽奖助手
Go to file
shanmite 7e220f5be7
Merge pull request #79 from spiritLHL/main
docs: 详细化本地运行操作
2021-04-29 18:06:45 +08:00
.github Add files via upload 2021-04-29 17:30:27 +08:00
.vscode feat: 提供8种推送方式 2021-03-13 20:02:01 +08:00
lib fix(lib/BiliAPI): [130:29] 2021-04-27 18:44:55 +08:00
test feat: 动态去重 2021-04-16 11:26:01 +08:00
.eslintrc.json fix: dyid重复拼接 2021-01-14 18:47:07 +08:00
.gitignore feat: 本地运行时设置填写在my_config.json中 2021-03-31 15:25:02 +08:00
env.example.bat docs: 更新本地运行说明 2021-04-28 21:52:08 +08:00
LICENSE Create LICENSE 2020-12-27 13:52:04 +08:00
main.js feat: 清理动态超过6小时前自动"续杯"; fix: 修复部分bug 2021-04-07 19:57:20 +08:00
package-lock.json feat: 增加E-mail(smtp)推送 2021-04-06 19:55:29 +08:00
package.json feat: 增加E-mail(smtp)推送 2021-04-06 19:55:29 +08:00
README.md Update README.md 2021-04-29 18:01:21 +08:00

AutoScript

Automatic sweepstakes

Automatic check

Automatic clear dynamic&follow

Automatic sync


动态抽奖

通过Github Actions挂载Nodejs脚本

Actions官方文档

注意: Github Actions最大运行时间为6小时,超时会被强制关闭

油猴版本


操作步骤

★ Star

↓↓

Fork本仓库

fork

↓↓

填入COOKIE

进入B站主页获取Cookie用于登录
Chrome浏览器:

  1. F12打开控制台

  2. 进入Application找到Cookies栏中的SESSDATA将HttpOnly选项取消勾选

    (此步骤是为了方便后续采用JS获取Cookies)

取消httponly

  1. 在Console中复制以下代码回车

    {
        let bilicookie = '';
        document.cookie.split(/\s*;\s*/).forEach(item => {
            const _item = item.split('=');
            if (['DedeUserID', 'bili_jct', 'SESSDATA'].indexOf(_item[0]) !== -1)
                bilicookie += `${_item[0]}=${_item[1]}; `;
        })
        copy(bilicookie); /* 自动复制到粘贴板 */
        console.log(bilicookie)
    }
    
  2. 进入你Fork的GitHub仓库
    Settings => Secrets => 新建一个Repository secretsCOOKIE将获取到的DedeUserID=***;SESSDATA=***;bili_jct=***填入

此处页面可能会有所不同,不用在意

new secret

new COOKIE

也可以采用其他方式获取所需的Cookie
只需含有 DedeUserID=...;SESSDATA=...;bili_jct=... 三项即可
(分号分割,顺序随意)

↓↓

防重复转发

此脚本将在B站专栏草稿中储存转发过的动态id以防止重复转发
运行结束后会将转发过的动态上传至构件(Artifacts)
为了能够从构件中下载文件需要access token权限

  1. 点我创建 授权令牌

  2. 如图,勾选前两项即可:

如图,勾选前两项即可:

  1. 将 令牌 复制(注意,先复制,一旦关闭网页就不能查看了),再新建Secrets,键名 填入 PAT

注: 填好此处后脚本将会与主仓库自动同步, 可手动关闭

↓↓

检测中奖

每两个小时检测一次

检测未读信息 已读未读信息

  • 通过@信息判断
  • 通过私信判断

关键词有限 可能会有漏掉的或误报

手动检查

手动触发Automatic check工作流后可在日志中查看 check

中奖推送(可选)

例如在 Repository secrets 中新建一个 SCKEY 并填入对应的值
新建repository secrets

以下是详细说明

Name 归属 属性 说明
SCKEY 微信server酱推送(将在2021/4月下线) 非必须 server酱的微信通知官方文档
SENDKEY 微信server酱(Turbo版)推送 非必须 获取SENDKEY 选择消息通道
BARK_PUSH BARK推送 非必须 IOS用户下载BARK这个APP,填写内容是app提供的设备码,例如:https://api.day.app/123 ,那么此处的设备码就是123,再不懂看 这个图(注:支持自建填完整链接即可)
BARK_SOUND BARK推送 非必须 bark推送声音设置例如choo,具体值请在bark-推送铃声-查看所有铃声
TG_BOT_TOKEN telegram推送 非必须 tg推送(需设备可连接外网),TG_BOT_TOKENTG_USER_ID两者必需,填写自己申请@BotFather的Token,如10xxx4:AAFcqxxxxgER5uw , 具体教程
TG_USER_ID telegram推送 非必须 tg推送(需设备可连接外网),TG_BOT_TOKENTG_USER_ID两者必需,填写@getuseridbot中获取到的纯数字ID, 具体教程
TG_PROXY_HOST Telegram 代理的 IP 非必须 代理类型为 http。例子http代理 http://127.0.0.1:1080 则填写 127.0.0.1
TG_PROXY_PORT Telegram 代理的端口 非必须 例子http代理 http://127.0.0.1:1080 则填写 1080
DD_BOT_TOKEN 钉钉推送 非必须 钉钉推送(DD_BOT_TOKENDD_BOT_SECRET两者必需)官方文档 ,只需https://oapi.dingtalk.com/robot/send?access_token=XXX 等于=符号后面的XXX即可
DD_BOT_SECRET 钉钉推送 非必须 (DD_BOT_TOKENDD_BOT_SECRET两者必需) ,密钥机器人安全设置页面加签一栏下面显示的SEC开头的SECXXXXXXXXXX等字符 , 注:钉钉机器人安全设置只需勾选加签即可,其他选项不要勾选,再不懂看 这个图
IGOT_PUSH_KEY iGot推送 非必须 iGot聚合推送支持多方式推送确保消息可达。 参考文档
QQ_SKEY 酷推(Cool Push)推送 非必须 推送所需的Skey,登录后获取Skey 参考文档
QQ_MODE 酷推(Cool Push)推送 非必须 推送方式(send或group或者wx默认send) 参考文档
QYWX_KEY 企业微信推送 非必须 密钥,企业微信推送 webhook 后面的 key 详见官方说明文档
PUSH_PLUS_TOKEN pushplus推送 非必须 微信扫码登录后一对一推送或一对多推送下面的token(您的Token) 官方网站
PUSH_PLUS_USER pushplus推送 非必须 一对多推送的“群组编码”(一对多推送下面->您的群组(如无则新建)->群组编码)注:(1、需订阅者扫描二维码 2、如果您是创建群组所属人也需点击“查看二维码”扫描绑定否则不能接受群组消息推送),只填PUSH_PLUS_TOKEN默认为一对一推送
SMTP_HOST 电子邮件 非必须 smtp服务器的主机名 如: smtp.qq.com
SMTP_PORT 电子邮件 非必须 smtp服务器的端口 如: 465
SMTP_USER 电子邮件 非必须 发送方的电子邮件 如: xxxxxxxxx@qq.com
SMTP_PASS 电子邮件 非必须 smtp服务对应的授权码
SMTP_TO_USER 电子邮件 非必须 接收方电子邮件

↓↓

运行

进入Actions启用工作流

通过手动触发

commit

以上步骤是为了检测是否配置成功

至此程序将会每三小时运行一次

↓↓

完成!

效果

效果


清理动态

只需在 Secret 里添加一个 CLEAR 项并取值为 true

程序便会每30天清理一次动态和关注
清理60天之前的动态和关注(关注分区内的)

注: 短时大量清理动态会导致动态数显示异常


其他细节

更新

如果出现

滞后

说明此脚本有更新
通过 Pull Request 更新仓库
注意PR的方向 如下图 如何同步更新Github上Fork的项目

自动更新

须知

This will force sync ALL branches to match source repo. Branches that are created only in the destination repo will not be affected but all the other branches will be hard reset to match source repo.
⚠️ This does mean if upstream ever creates a branch that shares the name, your changes will be gone.

配置了PAT后每天与主仓库自动同步一次!

如需关闭请手动关闭

或者使用GitHub App Pull自动同步

本地运行

由于Github服务器共用IP导致脚本易发生访问频繁, 且滥用行为可能会封禁Actions可选择在本地运行
具体操作详见env.example.bat文件

win系统环境配置及定时计划运行

step1环境配置

下载代码到本地

点此下载或如图示下载↓

点我加载下载操作图示

下载的压缩包解压后修改env.example.bat文件详见step3

step2下载并安装Node.js

点此进入nodejs下载页面

点我加载下载nodejs操作图示

step3修改env.example.bat文件及创建运行文件

1.step1下载的压缩包解压后将其中的env.example.bat文件重命名为env.bat

2.右键env.bat文件选择编辑或用记事本打开

3.使用 -填入COOKIE 操作获取cookie将字段其中包含%的修改成%%,多输入一个%避免转义

4.将cookie填入文件对应值中

set COOKIE= 你在浏览器获取后并修改了%的cookie
…………
(后面的按照文件中的提示填写)

5.在env.bat文件同一根目录下新建一个start.bat文件,用于运行程序

点我加载该步骤目录结构图示

6.右键start.bat文件选择编辑或用记事本打开,填入以下内容(内容具体含义详见env.bat文件,可根据个人需求选择其中一条)

npm run test_start

npm run test_check

npm run test_clear

8.确入修改无误后,将env.bat文件中前面含有::的注释全部删除,只保留chcp 65001语句和含有前缀set的语句

9.上一步操作仍可能无法修改默认编码此时可以去搜索引擎搜索永久修改cmd默认编码为65001的方法,这里不赘述了

10.以上修改都保存成功后,点击start.bat文件即可启动

11.注意事项

运行成功后在lib文件夹下会生成一个GlobalVar.json文件和dyid.txt文件
==换env.bat的参数时须先将GlobalVar.json文件删除==
==注意运行时请去掉注释== 
==注意 bat文件中% 要转义写为 %%==
如果要运行多账号只能复制本项目并依次独立运行
在lib/Public.js文件getLotteryInfoByTag方法和getLotteryInfoByUID方法中可适当增大扫描范围 默认3页

step4本地定时运行(在Windows系统的操作)

1.右键我的电脑打开控制面板或在win10搜索框里搜索控制面板打开

2.在控制面板右上角的搜索框里搜索计划任务点击打开

3.在任务计划程序中选择任务计划程序库

4.在右边的操作框中选择创建任务

5.在常规页面中的名称框中写入计划名称后,在安全选项里选择不管用户是否登陆都要运行使用最高权限运行

6.在触发器页面中规划时间,点击新建,选择设置每天和具体开始时间以及间隔时间,高级设置直接看情况选择

7.在操作页面中点击新建,选择操作为启动程序,在设置里点击浏览找到start.bat文件并选择,在起始于(可选)(T)中的空白框里输入start.bat文件的目录地址,也就是程序或脚本(P)start.bat的前面那一串目录地址,最后是以\结尾的 ,填好东西后按下面确认

点我加载步骤7结果图示

8.在条件页面中选择网络,设定启动条件为任何连接

9.在设置页面中选择如图示选项,或者不修改默认设置

点我加载步骤9结果图示

10.最后按确定

11.此时它会弹框要求输入用户密码,一般是你的开机密码确认身份,这个对于服务器来说就是远程桌面开启的那个密码

最后你可以在任务列表中选择已有的任务,右边的操作框中选择运行点击,启动计划的任务,如下图所示

点我加载运行图示

具体看任务是否正常执行,你可以看看自己的账号动态的最新转发,运行成功每几分钟自动转发抽奖动态

多账号支持

默认支持5个账号

cookies value
COOKIE
COOKIE2
COOKIE3
COOKIE4
COOKIE5
COOKIE*

添加更多的账号
可在文件.github/workflows/node.js.yml
将以下代码中的三处星号(*)改为数字并依次复制粘贴

lottery_*:
runs-on: ubuntu-latest
steps:
  - name: 'Checkout codes'
    uses: actions/checkout@v2
  - name: 'Use Node.js'
    uses: actions/setup-node@v1
    with:
      node-version: '14.15.5'
  - name: 'Run in Nodejs'
    shell: bash
    env:
      NUMBER: *
      COOKIE: ${{ secrets.COOKIE* }}
    run: |
      npm install
      npm start      
  - name: 'Upload dyid to artifact'
    uses: actions/upload-artifact@v2
    with:
      name: dyid.txt
      path: lib/dyid.txt

此时Secrets里就可以添加更多的COOKIE*(简单的找规律问题)

同理须在文件.github/workflows/check.yml
将以下代码中的三处星号(*)改为数字并依次复制粘贴(启用对应的中奖检测)

lottery_*:
  runs-on: ubuntu-latest
  steps:
    - name: 'Checkout codes'
      uses: actions/checkout@v2
    - name: 'Use Node.js'
      uses: actions/setup-node@v1
      with:
        node-version: '14.15.5'
    - name: 'Run in Nodejs'
      shell: bash
      env:
        NUMBER: *
        COOKIE: ${{ secrets.COOKIE* }}
      run: |
        npm install
        npm run check        

若使用自动清理功能,还需再.github/workflows/clear.yml

lottery_*:
  runs-on: ubuntu-latest
  steps:
    - name: 'Checkout codes'
      uses: actions/checkout@v2
    - name: 'Use Node.js'
      uses: actions/setup-node@v1
      with:
        node-version: '14.15.5'
    - name: 'Run in Nodejs'
      shell: bash
      env:
        NUMBER: *
        COOKIE: ${{ secrets.COOKIE* }}
      run: |
        npm install
        npm run clear        

将以上的三处星号(*)改为数字并依次复制粘贴以清理更多的账号

注意: 由于脚本会强制同步同名文件, 任何在原文件上的修改都会无效
解决办法

  • 取消自动同步
  • 重命名/.github/workflows/下的.yml文件以及修改内部的name值并禁用之前的name对应的工作流

如何关闭

关闭工作流

部分设置说明

定时运行(UTC+0)

.github/workflows/node.js.yml

schedule:
  - cron: '0 */2 * * *'

如何填写此字段

模式选择

lib/config.js

  • 字段解释
    • model
      • '00'关闭自动抽奖
      • '10'只转发官方抽奖
      • '01'只转发非官方抽奖
      • '11'都转
    • chatmodel
      • '00'关闭自动评论
      • '10'只评论官抽
      • '01'只评论非官抽
      • '11'都评论
    • maxday
      • 开奖时间距离现在的最大天数
      • 默认为-1表示不限制
      • string
    • wait
      • 转发间隔时间
      • 单位毫秒
      • 上下浮动30s
      • string
    • minfollower
      • up主粉丝数限制
      • 仅限制没有官方认证的up
      • string
    • only_followed
      • 只转发已关注的
      • '1'开启
      • '0'关闭
    • create_dy
      • 是否发送随机动态(防止被开奖机过滤)
      • '1'开启
      • '0'关闭
    • dy_contents
      • 随机动态内容
      • 类型 content[]
        /**
         * @typedef Picture
         * @property {string} img_src
         * @property {number} img_width
         * @property {number} img_height
         * @param { string | Picture[] } content
         */
        
    • at_users
      • 转发时[at]的用户
      • AtInfo[]
        /**
         * @typedef {string} NickName
         * @typedef {number} UID
         * @typedef {(NickName | UID)[]} AtInfo
         */
        
    • blacklist
      • 防钓鱼uid黑名单
      • 逗号分割字符串
    • blockword
      • 屏蔽词
      • string[]
    • followWhiteList
      • 取关白名单
      • 逗号分割字符串
    • relay
      • 转发评语
      • string[]
    • chat
      • 评论内容
      • string[]
    • UIDs
      • 监听的UID列表
      • number[]
    • TAGs
      • 监听的抽奖话题
      • string[]
    • clear_partition
      • 取关分区
      • string
    • partition_id
      • 抽奖UP用户分组id
      • number

自定义设置

  • 新建一个Repository secrets取名为MY_CONFIG
  • 本地运行时在项目根目录下新建my_config.json文件将设置填在其中
  • 填入符合JSON语法的内容
  • 字段的名称和对应的值按照字段解释要求填写
  • 需要修改哪项就填入相应的键值对
  • 自定义设置模板