/bnu-auto-ncov-daily-report

北师大每日上报打卡助手,支持使用 Github Actions 定时任务在线自动打卡,且支持打卡后用微信消息、电子邮件通知打卡结果。

Primary LanguageJavaScriptApache License 2.0Apache-2.0

北师大每日上报打卡助手

本程序可以自动完成北师大的疫情防控每日健康状况上报打卡。只要之前至少打卡过一次,即可自动读取上一次打卡的数据完成打卡(地点为上一次打卡的地点)。

支持三种使用方式:

  1. Fork 本仓库后,配置好新仓库的 Secrets 作为输入参数,通过 Github Actions 直接在线使用。(推荐)
  2. 部署在服务器上运行,可以通过命令行参数或配置文件两种方式输入参数,通过任意方式创建计划任务即可。
  3. 在本地电脑上运行,可以通过命令行参数或配置文件两种方式输入参数,通过任意方式创建计划任务即可。(不推荐)

程序运行后,支持通过微信消息、电子邮件两种方式通知用户打卡结果。如果打卡失败,还支持读取打卡页面上的弹窗提示通知用户。

声明:本程序仅供学习 Web 技术知识,交流计算机研究心得使用,如有身体不适、位置移动、接触患者等意外情况,请务必如实手动打卡。此外,本程序为开放源代码的程序,使用前请自行阅读、审查代码,确认无风险后再谨慎使用,代码上传者无法保证该程序始终能够正常使用,并对因此可能造成的潜在损失不予负责。

使用说明

Github Actions(推荐)

基础教程

  1. Fork 本仓库。
  2. 进入仓库的 Settings 页面,在左侧的菜单中选择 Secrets,点击「New repository secret」按钮,新建下面这些 Secrets(冒号前的是 Secret Name,冒号后的是要填的内容):
  • USERNAME: 填写学号(必须设置
  • PASSWORD: 填写数字京师密码(必须设置
  • WECHAT: 是否开启微信通知功能,true 为开启,false 为不开启(如果不开启,可以直接不设置。如果要开启,此网页往下滚动有配置这 2 个参数的教程
  • WECHAT_SENDKEY: 「Server酱」微信消息推送服务的 SendKey(只在开启微信通知功能时需要设置)
  • MAIL: 是否开启邮件通知功能,true 为开启,false 为不开启(如果不开启,可以直接不设置。如果要开启,此网页往下滚动有配置这 7 个参数的教程
  • MAIL_HOST: SMTP 服务器(只在开启邮件通知功能时需要设置)
  • MAIL_PORT: SMTP 服务器端口,填数字(只在开启邮件通知功能时需要设置)
  • MAIL_SECURE: SMTP 服务器端口是否加密,true 为加密,false 为不加密(只在开启邮件通知功能时需要设置)
  • MAIL_USER: SMTP 服务器登录用户名(只在开启邮件通知功能时需要设置)
  • MAIL_PASS: SMTP 服务器登录密码(只在开启邮件通知功能时需要设置)
  • MAIL_TO: 邮件通知的收件人邮箱(只在开启邮件通知功能时需要设置)
  1. 进入仓库的 Actions 界面,开启 Workflows,然后选择 Report Bot workflow,enable workflow

配置好 Secrets 并启用 workflow 后,推荐先手动运行一次该 workflow,看看运行是否正常,能不能收到通知等。(如下图)

image

如果配置成功的话,该 workflow 就会在北京时间每天 00:05 自动执行,完成打卡了(Github Actions 可能有最长 15 分钟左右的延迟,最晚会在 00:20 左右自动执行)。

注:邮件通知功能与微信通知功能可以同时开启,也可以只开启其中一个,也可以都不开启。

自定义打卡时间

如果希望在其他时间打卡,可以在 .github/workflows/bot.yml 中,修改 cron 为你需要的时间。

开启微信通知功能

本程序的微信通知功能依赖于「Server酱」微信消息推送服务。如果希望使用,需要前往「Server酱」网站(https://sct.ftqq.com/)注册一个账号,并获取 SendKey

第一步,进入「Server酱」网站,点击右上角「登入」,然后使用微信扫码,将自动注册账号并登录。

image

第二步,在 SendKey 页面中,点击「复制」按钮,复制 SendKey

image

也可以先点击那个闭着的眼睛按钮,显示 SendKey,之后手动复制。

image

然后,在设置好 USERNAMEPASSWORD 之后,额外设置下列 Secrets:

  • WECHAT: true
  • WECHAT_SENDKEY: 把刚才复制的「Server酱」微信消息推送服务的 SendKey 粘贴到这里

设置好后,应该一共有如下图所示的 4 个 Secrets:

image

配置好微信通知后,每天打卡完毕将自动发送通知消息到你的微信(如下图)。

image

开启邮件通知功能(以 QQ 邮箱为例)

国内最常见的邮箱服务是 QQ 邮箱,下面以 QQ 邮箱为例,说明如何配置邮件通知。

第一步,进入 QQ 邮箱,点「设置」,切换到「账户」选项卡(如下图)。

image

第二步,滚动页面到「POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务」一节,确认 SMTP 服务已开启,如果没有开启,手动打开。

image

第三步,点击「生成授权码」,生成登录 SMTP 服务器所需的独立密码。

image

然后,在设置好 USERNAMEPASSWORD 之后,额外设置下列 Secrets:

  • MAIL: true
  • MAIL_HOST: smtp.qq.com
  • MAIL_PORT: 465
  • MAIL_SECURE: true
  • MAIL_USER: QQ 邮箱的完整邮件地址
  • MAIL_PASS: 在第三步中生成的授权码
  • MAIL_TO: 你需要接收通知的邮箱,可以继续填自己的 QQ 邮箱

设置好后,Secrets 界面应该如下图所示:

image

配置好邮件通知后,每天打卡完毕将自动发送邮件到你的邮箱(如下图)。

image

个人服务器部署

依赖安装

在安装依赖前,首先确保 Node.js 版本不低于 12

推荐使用 pnpm 作为包管理器完成依赖安装,执行 pnpm install 即可。

如果包管理器使用 npm 也可以,执行 npm install 即可。

如果包管理器使用 yarn 也可以,执行 yarn install 即可。

配置参数

首先,保证之前至少已经完成过一次手动打卡。

如果使用配置文件方式输入参数,则需要:

  1. config.sample.json 复制一份并命名为 config.json
  2. 填写 config.json 的属性 usernamepassword。如果需要如果需要开启邮件通知、微信通知等功能,则还需按照「配置文件说明」一节填写 mailwechat 等属性。
  3. 在服务器上用任意方式创建定时任务,用 node 执行 app.js

如果使用命令行方式输入参数,则需要:

  • 在服务器上用任意方式创建定时任务,用 node 执行 app.js,并按照「命令行参数说明」一节填写调用参数。

配置文件与命令行参数可以混用,如果出现参数同名情况,命令行输入的参数优先级更高。

命令行参数说明

Usage: node app [options]

Options:
  -V, --version                    output the version number
  -u, --username <username>        数字京师用户名
  -p, --password <password>        数字京师密码
  -m, --mail <boolean>             是否开启邮件通知功能
  -h, --mail_host <host>           SMTP 服务器
  -o, --mail_port <port>           SMTP 服务器端口
  -s, --mail_secure <boolean>      SMTP 服务器端口是否加密
  -U, --mail_user <mail_uesrname>  SMTP 服务器登录用户名
  -P, --mail_pass <mail_password>  SMTP 服务器登录密码
  -t, --mail_to <receiver>         邮件通知的收件人邮箱
  -w, --wechat <boolean>           是否开启微信通知功能(依赖「Server酱」微信消息推送服务)
  -k, --wechat_sendkey <sendkey>   「Server酱」微信消息推送服务的 SendKey
  --help                           display help for command

其中,--mail 参数默认为 false,如果不需要开启邮件通知功能,不使用该参数即可,如:

node app -u 数字京师用户名 -p 数字京师密码

如果需要开启邮件通知功能,需要设置 SMTP 服务器与邮件模板信息,以前文提到的 QQ 邮箱为例,调用示例如下:

node app -u 数字京师用户名 -p 数字京师密码 -m true -h smtp.qq.com -o 465 -s true -U QQ邮箱 -P QQ邮箱授权码 -t 邮件通知的收件人邮箱

如果需要开启微信通知功能,由于本程序的微信通知功能依赖于「Server酱」微信消息推送服务,需要首先去「Server酱」微信消息推送服务的网站注册一个账号,注册后获取 SendKey。调用示例如下:

node app -u 数字京师用户名 -p 数字京师密码 -w true -k 「Server酱」的SendKey

邮件通知功能和微信通知功能可以同时开启,调用示例如下:

node app -u 数字京师用户名 -p 数字京师密码 -m true -h smtp.qq.com -o 465 -s true -U QQ邮箱 -P QQ邮箱授权码 -t 邮件通知的收件人邮箱 -w true -k 「Server酱」的SendKey

配置文件说明

username (必填)

填入学号。

password (必填)

填入数字京师的密码。

mail (非必填)

如果不需要开启邮件通知功能,保持 mail 属性为 false 即可。

如果需要开启邮件通知功能,除了将 mail 设置为 true,还需要设置 SMTP 服务器与收件邮箱信息。示例如下:

{
  "username": "填入学号",
  "password": "填入数字京师的密码",
  "mail": true,
  "mail_host": "SMTP 服务器",
  "mail_port": SMTP 服务器端口,填数字,
  "mail_secure": SMTP 服务器端口是否加密,true 为加密,false 为不加密,
  "mail_user": "SMTP 服务器登录用户名",
  "mail_pass": "SMTP 服务器登录密码",
  "mail_to": "邮件通知的收件人邮箱",
  "wechat": "是否开启微信通知功能(依赖「Server酱」微信消息推送服务)",
  "wechat_sendkay": "「Server酱」微信消息推送服务的 SendKey"
}
wechat (非必填)

如果不需要开启微信通知功能,保持 wechat 属性为 false 即可。

如果需要开启微信通知功能,除了将 wechat 设置为 true,还需要设置「Server酱」微信消息推送服务的 SendKey。示例如下:

{
  "username": "填入学号",
  "password": "填入数字京师的密码",
  "wechat": true,
  "wechat_sendkay": "「Server酱」微信消息推送服务的 SendKey"
}

注:邮件通知功能与微信通知功能可以同时开启,也可以只开启其中一个,也可以都不开启。