# 脚本

当前目录下的脚本都是基于 MagicJS 2 或 MaicJS 3 框架进行开发。

其中 MagicJS 2 已停止维护，以下涉及的特性，都以MagicJS 3为主。

你可以在仓库的README中，查询到哪些项目是基于MagicJS3的。

**涉及NodeJS（含青龙面板）的内容，统一在此说明，单个脚本的README中不再赘述。**

## 数据存储

### iOS平台

基于 MagicJS 2/3 编写的脚本，运行在iOS平台的APP中时，数据存储在由APP提供的存储池。

### NodeJS

运行在NodeJS环境中时，数据存储在脚本同级目录下的magic.json文件中，而不存储在环境变量。

如果有需求，可以将不同的脚本存放在不同的目录下，读取不同的magic.json文件来实现数据隔离。

如果将所有的脚本数据存储在同个magic.json文件中，它们也可以和谐相处。

例如下面的例子，把什么值得买和饿了么的数据存储在一起。

```json
{
	"smzdm_cookie": "xxxxxxxxxxxxxxxxxxxxxxx",
	"eleme_app_longitude": "xxxxxxxxxxxxxxxxx",
	"eleme_app_latitude": "xxxxxxxxxxxxxxx",
	"eleme_task_keywords": "xxxxxxxxxxxxxxxxxxxx",
	"magic_bark_url": "xxxxxxxxxxxxxxxxxxxxxx"
}
```

### 脚本变量

基于MagicJS 3的脚本，会在README中明确说明使用的变量。在iOS平台下，这些变量可以在BoxJS中配置和修改。在NodeJS环境下，这些变量需要手动编辑magic.json文件。

### 共用变量

基于 MagicJS 3 的脚本，除脚本自身所需的变量外，以下的变量是所有脚本共用的。所有基于 MagicJS 3 的脚本(Magic 2 除外)，在iOS平台下都会受到共用变量的影响。而在NodeJS环境下，共用变量会影响所有读取同一个magic.json的脚本。

| 变量名         | 类型   | 说明                                                         |
| -------------- | ------ | ------------------------------------------------------------ |
| magic_bark_url | string | Bark推送链接，如 https://api.day.app/xxxxxxxxxxxxxxx/        |
| magic_loglevel | string | 日志等级，默认`INFO`，出现问题选`DEBUG`，更多等级见MagicJS手册 |

## 青龙面板

MagicJS 3 增加“青龙面板模块”，可以将所使用的变量，直接同步到青龙面板的magic.json文件中。以此来实现手机仅获取Cookie，青龙面板进行签到。

同步变量需要通过手机访问青龙面板接口，请确保青龙面板可以被手机正常访问。

### 同步开关

支持数据同步到青龙面板的脚本，在BoxJS中都会有同步开关，请先将其打开。

![](https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/script/tieba/images/05.jpg)

如果没有青龙面板、访问缓慢，甚至无法访问，不建议在平时打开此功能，以免由于网络问题造成客户端加载数据缓慢。

### 配置连接

使用前，需要在BoxJS中配置青龙面板的链接。

![](https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/script/tieba/images/04.jpg)

配置完成后，如果访问没有问题，每次获取到的Cookies，都会同步到青龙面板。

### 存储目录

数据存储在青龙面板的脚本管理目录下的magic.json文件中。只有在同级目录下的脚本才会访问magic.json文件中的数据。

## 多账户

从 `MagicJS 3` 开始，正式对多账户进行支持，**部分脚本已实现多账户签到，如百度贴吧签到。**

多账户分为以下几种情况：

1. APP本身可以支持多账户

   以百度贴吧为例，APP客户端本身能够切换账号。这类程序实现多账号，仅需要切换账号后，重启APP以重新获取Cookies即可。

2. 通过网页登录的多账户

   可以通过隐身模式、无痕模式等浏览器功能，来实现多账号同时登录，如什么值得买的签到。

3. APP不支持多账户，但退出账户后Cookies不会失效

   通过获取Cookie -> 退出账号 -> 登录新账号 -> 获取新账号Cookie的方式来实现多账户。

4. APP不支持多账户，退出账户后Cookies失效

   此类情况需要在不同设备上登录不同的账户，将Cookies同步到青龙面板，由青龙面板实现多账户签到。

### 数据存储

多账户的数据以JSON格式存储。

以百度贴吧的为例，多账户Cookies存在在JSON中的格式，类似下面：

```json
{
	"tieba_signin_cookie": {
      "magic_session": true,
      "百度用户1": "你第一个账户的Cookie",
      "百度用户2": "你第二个账户的Cookie",
      "百度用户3": "你第三个账户的Cookie"
  }
}
```

其中 **`"magic_session": true`  不可删除和更改，它用来辅助MagicJS判断存储的是Sessions还是Object。**

`百度用户1`这样的文字可以随意编写，只要不重复。如果是由脚本自动获取，通常是用户id等唯一标识。

不建议手动修改多账户的JSON字符串，错误的JSON字符串可能会导致脚本运行异常。

### 脏数据

如果因意外情况产生脏数据，导致多账户的签到出现异常，建议将Cookie数据进行删除，重新获取所有账户的Cookie。

例如上述的`tieba_signin_cookie`，出现异常时，应将整个`tieba_signin_cookie`删除，全部重新获取。

## 安全性

JavaScript脚本可以执行非常多的操作，通常来说，在客户端中调用脚本属于高风险行为。您在使用脚本前，务必确认脚本安全可信，如果有条件，应该仔细阅读脚本代码。

特别需要注意：

### 脚本是否含有对外发送请求的操作

如带有Cookie、Token、Password等等可以作为身份凭证的请求，这类请求比较敏感，务必确认请求的目标安全可信。理论上恶意脚本可以利用你的Cookie，进行非常多的行为，如发帖、购物等等。

### 脚本对响应体进行修改

对于修改响应体的脚本，必须确认修改响应体内容可信。通过对Http请求响应体的修改，可以在客户端上显示一些欺诈信息，例如显示一些虚假的中奖信息。

应慎重使用可以由远端控制修改响应体的脚本，此类脚本可能在当初检查时执行的结果是正常的，但是在某个时刻，可由远端控制修改响应内容。

### 加密的脚本

本仓库的脚本源码都完全开放，不加密不混淆，不会将你的信息发送给任何第三方，欢迎进行Code Review。

**出于安全性考虑，不建议使用任何被加密、混淆的脚本。**

如果你在使用青龙面板，由于magic.json内的数据是完全开放不做加密的，并不能防止其他恶意脚本读取magic.json导致信息泄露。所以请务必确保在青龙面板上运行脚本的安全性，本仓库的脚本不会窃取你的数据，但是无法避免第三方恶意脚本，窃取由本仓库的脚本存储/生成的数据。

