gc-mojoconsole-plus/README-zh.md

158 lines
6.9 KiB
Markdown
Raw Normal View History

# MojoConsolePlus
[EN](./README.md)|中文
MojoConsolePlus(MCP)是一个[Grasscutter](https://github.com/Grasscutters/Grasscutter)插件,旨在提供一个游戏内可用的带用户界面的控制台后端。
## 当前支持功能:
- [x] 在游戏内发送控制台链接
- [x] 支持游戏内控制台的全部功能
- [x] 继承了Grasscutter的权限系统用户本来没有权限的指令在MojoConsole中也不能使用
- [x] 将指令执行结果通过MojoConsolePlus返回而不是由server角色在游戏内发送给用户
- [x] 自定义配置
- [x] 使用外部CDN
## 重要提醒:
该插件基于Grasscutter的[Development](https://github.com/Grasscutters/Grasscutter/tree/development)分支进行开发。 \
**如果你遇到了问题,请到[Discord](https://discord.gg/T5vZU6UyeG)寻求支持。但是我们不保证我们能提供相应的支持。**
**MojoConsolePlus设计时与前端解藕你可以发起PR来介绍你实现的前端。**
自行为MojoConsolePlus开发前端时不需要重启grasscutter服务器刷新页面即可。使用/mojo o指令可以在外部打开浏览器来帮助您开发。
## 配置步骤
### 下载Jar文件
在Github中找到Releases并进行下载。
### 自行编译(可选)
1. 使用`git`下载代码 ``git clone https://github.com/gc-mojoconsole/gc-mojoconsole-backend``。
2. 找到grasscutter的安装位置复制 ``grasscutter`` 的jar文件到刚刚新创建的 ``gc-mojoconsole-backend/gc-plugin/lib`` 文件夹。
3. 进入 ``gc-mojoconsole-plus`` 文件夹,执行``gradlew build`` (cmd) **或者** ``./gradlew build`` (Powershell, Linux & Mac)来进行编译。
4. 如果编译成功, 你可以找到``gc-plugin`` 文件夹下的 ``mojoconsole.jar``文件.
2022-05-20 06:30:51 +00:00
5. 将编译好的 ``mojoconsole.jar`` 文件复制到``Grasscutter`` 安装位置下的 ``plugins`` 文件夹。
6. 启动grasscutter。
...之后请看使用说明...
### 使用说明
你有两种选择来获得前端界面
#### 使用CDN服务的前端界面(推荐使用)
7. 从仓库中下载`mojoconfig.json`,并将其放置在 `plugins` 文件夹中, 将 `useCDN` 设置为 `true`。或者您可以先运行grasscuttermojoconsoleplus将会自动为您生成`mojoconfig.json`。
8. 修改Grasscutter的配置文件 `config.json`,确保您激活了 `cors`选项。在CDN模式下需要CORS设置为True。具体路径为 `config.json`->`server`->`policies`->`cors`.
CDN前端界面由我们在Github Pages上提供。沟通Grasscutter的相关密钥信息是以Hash锚点的形式提供的所以您的密钥信息在任何情况下都不会通过网络传输请您放心。我们会经常更新CDN提供的前端所以您可以在不需要自行管理前端的情况下永远获得最新的功能激活 `CORS` 不会给您的Grasscutter带来任何形式上的危险请您放心。
#### 自行提供前端界面
7. 将所有前端文件放入 `GRASSCUTTER_ROOT/plugins/mojoconsole/` 文件夹中。注意你必须要有一个名为 `console.html` 的入口你也可以放入其他jscss等辅助文件至相同目录下。
#### MojoConsole的游戏指令
8. 游戏内发送 `/mojoconsole` or `/mojo` 给server虚拟角色后你会在邮箱中收到链接。此外你可以使用 `o` 参数来调用外部浏览器打开链接,例如发送`/mojo o`给server虚拟角色。默认情况下mojoconsole是使用游戏内的浏览器进行打开的。
你的目录结构看起来会是这样:
```
GRASSCUTTER根目录
| grasscutter.jar
| resources
| data
| ...
└───plugins
│ mojoconsole.jar
│ mojoconfig.json
│ ...
└───mojoconsole
│ console.html
| ...
└───any other file that you want to include in your frontend
│ ...
```
## 自行开发API的使用说明
URL: `/mojoplus/api`
Request: `Content-Type: application/json`
```json
{
2022-05-19 05:18:03 +00:00
"k": "SESSION_KEY", // **DEPRECATED** sesssion key is embedded in the mail, can be retreved via the GET params.
"k2": "AUTH_KEY", // auth key, this is the second version auth key, choose either `k` or `k2`
"request": "invoke", // set request to ping will ignore the payload, which just check the aliveness of current sessionKey
"payload": "command just like what you do in your in game chat console" // example: "heal" for heal all avatars
}
```
Response: `Content-Type: application/json`
```json
{
"message": "success", // message saying the execution status,
"code": 200, // could be 200 - success, 403 - SessionKey invalid, 500 - Command execution error (should from command), 400 - request not supported
"payload": "response for the command", // example: got "All characters have been healed." when invoking with "heal"
}
```
2022-05-19 05:18:03 +00:00
URL: `/mojoplus/auth` Request a auth key for player
Request: `Content-Type: application/json`
```json
{
"uid": "UID", // player uid to be requested
"otp": "OTP", // **OPTIONAL**, use the OTP returned from previous `auth` request to check the status of the ticket.
}
```
Response: `Content-Type: application/json`
```json
{
"message": "success", // message saying the execution status,
"code": 200, // could be 200 - success, check content in `key` field,
// 404 - Player not found or offline
// 201 - Not ready yet, player has not confirmed yet
// 400 - request not supported
"key": "OTP or AUTH_KEY", // with `otp` field: AUTH_KEY for that player
// without `otp` field: `OTP` for further request
}
```
## 其他资源
You can use the following function to send the request, just plug it after you finished the command generation job. `payload` is the command you wish to send.
```javascript
function sendCommand(payload){
var client = new XMLHttpRequest();
var key = new window.URLSearchParams(window.location.search).get("k");
var url = '/mojoplus/api';
client.open("POST", url, true);
client.setRequestHeader("Content-Type", "application/json");
client.onreadystatechange = function () {
if (client.readyState === 4 && client.status === 200) {
var result = document.getElementById("c2");
// Print received data from server
result.innerHTML = JSON.parse(this.responseText).payload.replace(/\n/g, "<p/>");
}
};
// Converting JSON data to string
var data = JSON.stringify({ "k": key, "request": "invoke", "payload": payload });
// Sending data with the request
client.send(data);
}
```
### 前端
By SpikeHD: https://github.com/SpikeHD/MojoFrontend (under development)
CDN前端https://github.com/gc-mojoconsole/gc-mojoconsole.github.io
2022-05-20 06:28:59 +00:00
Win 桌面版本 https://github.com/SwetyCore/MojoDesktop
2022-05-20 06:30:33 +00:00
...你可以自行开发前端然后发起PR来让你的前端显示在这里...