## 1.安装 Node.js 环境

[下载地址](https://nodejs.org/zh-tw/download/ )

根据自己的操作系统下载

傻瓜式安装，一直下一步即可。



## 2.下载源码

![BclSld.png](https://s1.ax1x.com/2020/11/04/BclSld.png)

点击红框处下载压缩包

## 3.安装依赖、增加入口文件、增加cookie

压缩包解压后进入项目文件夹

- Windows 用户按住  **shift** 点击右键，点击 **在此处打开命令窗口**
- Mac 用户通过终端，自行进入该文件夹

在命令行内输入 `npm i `，等待运行完成。

此时，项目文件夹内会多出一个 `node_modules`文件夹

 **增加入口文件**

方案一：同一个仓库下同一个时间，执行多个脚本

在项目文件夹内新建 `index.js`

编辑文件

```javascript
'use strict';
exports.main_handler = async (event, context, callback) => {
  //解决云函数热启动问题
  delete require.cache[require.resolve('./jd_xtg1.js')];
  require('./jd_xtg1.js') //这里写你想要的脚本
  require('./jd_xtg2.js') //这里写你想要的脚本
  require('./jd_xtg3.js') //这里写你想要的脚本
}

```
此时，同一时间点下，会同时执行多个脚本，触发器触发后，index.js文件中require()下的所有脚本都会被执行

**优点**：同一时间下可以同时执行多个脚本，适合脚本种类少的repository，对脚本数量少的repository推荐使用此方案<br>**缺点**：多个脚本不同时间点运行无法满足

方案二：同一个仓库下不同的时间点，分别执行不同的脚本（类似GitHub Action执行机制）

在项目文件夹内新建 `index.js`

编辑文件

```javascript
'use strict';
exports.main_handler = async (event, context, callback) => {
    for (const v of event["Message"].split("\r\n")) {
        //解决云函数热启动问题
        delete require.cache[require.resolve(`./${v}.js`)];
        console.log(v);
        require(`./${v}.js`)
    }
}

```

此时触发管理按照下图中进行设置，附加信息选择“是”，内容填写需要传递执行的具体脚本文件名，以回车键换行。触发器触发后，附加信息栏内的脚本会被执行，设置多个不同时间点的触发器达到类似GitHub Action的效果

**优点**：可以满足个性化需求，同一个repository下只需要设置不同的触发器，可以实现不同时间点分别执行不同的脚本<br>**缺点**：repository下脚本过多，如果需要设置多个触发器，实现个性化运行效果，由于云函数的限制，最多只能设置10个

[![B20KxI.png](https://s1.ax1x.com/2020/11/05/B20KxI.png)](https://imgchr.com/i/B20KxI)
[![BRCG0H.png](https://s1.ax1x.com/2020/11/05/BRCG0H.png)](https://imgchr.com/i/BRCG0H)

**注意：**<br>
Ⅰ方案一与方案二不能混合到同一个index.js文件中使用，同一个仓库下，二者只能选择其一。<br>
Ⅱ感谢[issues#115](https://github.com/lxk0301/jd_scripts/issues/115)中的解决方案，目前云函数连续测试已经可以规避热启动问题了。<br>
Ⅲ在确保完全按照本教程设置的情况下测试云函数运行情况，对于部分人运行日志中出现某些脚本运行失败其他正常，并且错误提示带有strict字样的，请自行删除index.js中的```'use strict';```，再做测试<br>

 **增加cookie**

打开项目文件内的 `jdCookie.js`

在最上面的 `CookieJDs`里写入 cookie ，多个账号以逗号分隔

例如

```javascript
let CookieJDs = [
  'pt_key=xxx;pt_pin=xxx;', 
  'pt_key=zzz;pt_pin=zzz;',
  'pt_key=aaa;pt_pin=xxxaaa'
]
```



## 4.上传至腾讯云

[腾讯云函数地址]( https://console.cloud.tencent.com/scf/index )

编写函数

登录后，点击管理控制台

单击左侧导航栏**函数服务**，进入“函数服务”页面。
在页面上方选择一个地域，最好选择离你常用地区近点的，不至于导致账号异常。单击**新建**。如下图所示：

![iCloud1](../icon/iCloud1.png)

在“新建函数”页面填写函数基础信息，单击**下一步**。如下图所示：

![iCloud2](../icon/iCloud2.png)

**函数名称**：可以自定义，比如为jd。<br>**运行环境**：选择 “Nodejs 12.16”。<br>**创建方式**：选择 “空白函数”。

确保环境为Nodejs 12.16，执行方法改为：index.main_handler，提交方式建议选本地文件夹，然后从GitHub项目克隆Zip压缩包，解压成文件夹，然后点击这个上传把文件夹上传进来（记得node_modules文件夹一并上传或者将node_modules文件夹上传到“层”，之后选择“函数管理”-“层管理”绑定上传好的层），完了后点击下面的高级设置。

![iCloud3](../icon/iCloud3.png)

内存用不了太大，64MB就够了（64M内存，免费时长6,400,000秒，内存与免费时长大致关系可以参看云函数官方说明），超时时间改为最大的900秒，然后点击最下面的完成。

![iCloud4](../icon/iCloud4.png)

## 5.设置触发器

点击刚创建的函数

![BcGa8O.png](https://s1.ax1x.com/2020/11/04/BcGa8O.png)

点击如图所示

![BcGvM4.png](https://s1.ax1x.com/2020/11/04/BcGvM4.png)

创建触发器

![iCloud6](../icon/iCloud6.png)

触发方式默认“**定时触发**”，定时任务名称随便起个名字，触发周期根据自己需要自行设置。

想进阶使用触发器的自行查看本文中方案一和方案二中的说明

关于触发周期中的自定义触发周期，使用的是 Cron表达式，这个自行学习下吧


[Corn文档](https://cloud.tencent.com/document/product/583/9708#cron-.E8.A1.A8.E8.BE.BE.E5.BC.8F)

目前repo中按照每个脚本一个定时器的方式设置到云函数中，大约需要触发器10多个，由于云函数触发器限制最多10个，需要对触发器进行整合，整合后触发器保持在10个以内，以下设置仅供参考<br>

|      **JavaScript**      |       **脚本名称**       | **活动时间** | **原Repository UTC时间**  | **适用于云函数的北京时间**  | **serverless.yml** |
| :----------------------: | :----------------------: | :----------: | :-----------------------: | :-------------------------: | :----------------: |
|     `jd_bean_change`     |       京豆变动通知       |     长期     |         0 2 * * *         |         0 1 */1 * *         |     30 7 * * *     |
|      `jd_bean_home`      |      领京豆额外奖励      |     长期     |             /             |         0 1 */1 * *         |     30 7 * * *     |
|      `jd_bean_sign`      |         京豆签到         |     长期     |        0 16 * * *         |         0 0 */1 * *         |     0 0 * * *      |
|      `jd_blueCoin`       |      京小超兑换奖品      |     长期     |        0 16 * * *         |         0 1 */1 * *         |     0 0 * * *      |
|      `jd_bookshop`       |         口袋书店         |     长期     |             /             |              /              |  5 6-18/6,8 * * *  |
|         `jd_car`         |         京东汽车         |     长期     |             /             |         0 0 */1 * *         |     0 0 * * *      |
|    `jd_car_exchange`     |       京东汽车兑换       |     长期     |             /             |              /              |     0 0 * * *      |
|    `jd_club_lottery`     |          摇京豆          |     长期     |        0 16 * * *         |         0 0 */1 * *         |     0 0 * * *      |
|      `jd_crazy_joy`      |        疯狂的joy         |     长期     |             /             |              /              |     30 7 * * *     |
|   `jd_crazy_joy_coin`    |      疯狂的joy挂机       |     长期     |             /             |              /              |         /          |
|      `jd_daily_egg`      |    京东金融-天天提额     |     长期     |       10 */3 * * *        |      0-12/3 */3 * * *       |    8 */3 * * *     |
|    `jd_dreamFactory`     |         京喜工厂         |     长期     |             /             |        */30 * * * *         |    3 */1 * * *     |
|        `jd_fruit`        |         东东农场         |     长期     |     20 23,4,10 * * *      | 0,5,10 8,9,12,18,23,0 * * * |  5 6-18/6,8 * * *  |
|   `jd_get_share_code`    |        获取互助码        |     长期     |             /             |              /              |         /          |
|      `jd_jdfactory`      |         东东工厂         |     长期     |             /             |        */30 * * * *         |    3 */1 * * *     |
|        `jd_jdzz`         |         京东赚赚         |     长期     |             /             |              /              |     3 1 * * *      |
|         `jd_joy`         |          宠汪汪          |     长期     |  0 0,1,4,10,15,16 * * *   | 0,5,10 8,9,12,18,23,0 * * * |    3 */1 * * *     |
|    `jd_joy_feedPets`     |      宠汪汪单独喂食      |     长期     |      */20 */1 * * *       |      0-12/3 */3 * * *       |    3 */1 * * *     |
|      `jd_joy_help`       |   宠汪汪强制为别人助力   |     长期     |             /             |              /              |         /          |
|     `jd_joy_reward`      |      宠汪汪兑换奖品      |     长期     |     0 0,4,8,16 * * *      |     0 8,12,16,0 */1 * *     | 0 0-16/8,20 * * *  |
|       `jd_joy_run`       | 宠汪汪邀请助力与赛跑助力 |     长期     |             /             |              /              |         /          |
|      `jd_joy_steal`      |  宠汪汪偷好友狗粮与积分  |     长期     |       0 16,22 * * *       |      0 0,6,20 */1 * *       | 0 0-16/8,20 * * *  |
|        `jd_jxnc`         |         京喜农场         |     长期     |             /             |              /              |         /          |
|         `jd_kd`          |         京东快递         |     长期     |             /             |         0 1 */1 * *         |     3 1 * * *      |
|        `jd_live`         |       京东直播18豆       |     长期     |             /             |              /              | 0 0-16/8,20 * * *  |
|   `jd_lotteryMachine`    |        京东抽奖机        |     长期     |        11 17 * * *        |         0 0 */1 * *         |     10 0 * * *     |
|      `jd_moneyTree`      |          摇钱树          |     长期     |       40 */3 * * *        |      0-12/3 */3 * * *       |    3 */1 * * *     |
|      `jd_necklace`       |          点点券          |     长期     |             /             |      0 0,6,20 */1 * *       | 0 0-16/8,20 * * *  |
|         `jd_pet`         |         东东萌宠         |     长期     |     35 23,4,10 * * *      | 0,5,10 8,9,12,18,23,0 * * * |  5 6-18/6,8 * * *  |
|   `jd_petTreasureBox`    |       宠汪汪聚宝盆       |     长期     |             /             |              /              |         /          |
|       `jd_pigPet`        |     京东金融-养猪猪      |     长期     |             /             |      0-12/3 */3 * * *       |     3 1 * * *      |
|      `jd_plantBean`      |         种豆得豆         |     长期     |     0 23,0-14/1 * * *     |      0-12/3 */3 * * *       |    3 */1 * * *     |
|     `jd_rankingList`     |        京东排行榜        |     长期     |        11 18 * * *        |         0 0 */1 * *         |     30 7 * * *     |
|      `jd_redPacket`      |        全民开红包        |     长期     |        0 17 * * *         |         0 1 */1 * *         |     10 0 * * *     |
|        `jd_shop`         |         进店领豆         |     长期     |        0 16 * * *         |         0 0 */1 * *         |     10 0 * * *     |
|     `jd_small_home`      |         东东小窝         |     长期     |             /             |      0 0,6,20 */1 * *       |     10 0 * * *     |
|        `jd_speed`        |         天天加速         |     长期     |       33 */3 * * *        |      0-12/3 */3 * * *       |    8 */3 * * *     |
|     `jd_superMarket`     |         东东超市         |     长期     |        15 * * * *         |        */30 * * * *         |     15 * * * *     |
|         `jd_syj`         |          十元街          |     长期     |             /             |         0 1 */1 * *         |     3 1 * * *      |
|       `jd_unbind`        |      注销京东会员卡      |     长期     |             /             |              /              |     10 0 * * *     |
|     `jd_unsubscribe`     |    取关京东店铺和商品    |     长期     |        45 15 * * *        |         0 1 */1 * *         |     10 0 * * *     |
|         `jd_818`         |      京东手机狂欢城      |     短期     | 0 1,4,7,10,12,16,22 * * * | 0 9,12,15,16,20,0,6 */1 * * |         /          |
|     `jd_apple_live`      |        苹果抽奖机        |     短期     |             /             |              /              |         /          |
| `jd_collectProduceScore` |     双十一活动领金币     |     短期     |        30 * * * *         |        */30 * * * *         |         /          |
|    `jd_digital_floor`    |       数码加购京豆       |     短期     |             /             |              /              |         /          |
|         `jd_ds`          |   京东代属（校园用户）   |     短期     |             /             |              /              |         /          |
|       `jd_health`        |        健康抽奖机        |     短期     |             /             |         0 0 */1 * *         |     10 0 * * *     |
|         `jd_jdh`         |       京东健康APP        |     短期     |             /             |              /              |     30 7 * * *     |
|       `jd_jxstory`       |         京喜故事         |     短期     |             /             |              /              |         /          |
|    `jd_live_redrain`     |     超级直播间红包雨     |     短期     |             /             |  0 0,20,9-23/2 * * MON-FRI  |         /          |
|        `jd_mohe`         |       热8超级魔盒        |     短期     |             /             |              /              |         /          |
|     `jd_ms_redrain`      |        秒杀红包雨        |     短期     |             /             |         0 1 */1 * *         |     10 0 * * *     |
|        `jd_pubg`         |           PUBG           |     短期     |             /             |              /              |         /          |
|        `jd_split`        |        金榜年终奖        |     短期     |             /             |              /              |         /          |
|        `jd_watch`        |       发现-看一看        |     短期     |             /             |              /              |     3 1 * * *      |
|         `jd_xtg`         |       双十一星推官       |     短期     |        0 16 * * *         |         0 0 */1 * *         |         /          |
|        `jr_sign`         |      金融打卡年终奖      |     短期     |             /             |              /              |     3 1 * * *      |

点击提交，所有流程就结束了。
