koishi-plugin-minecraft-command 1.0.0 → 1.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +132 -0
- package/lib/index.d.ts +1 -4
- package/lib/index.js +11 -73
- package/package.json +27 -3
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 johntime2005
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
# koishi-plugin-minecraft-command
|
|
2
|
+
|
|
3
|
+
Koishi 的 Minecraft 服务器命令插件,通过聊天平台远程执行 Minecraft 服务器命令。需配合 [koishi-plugin-minecraft-adapter](https://github.com/johntime2005/koishi-plugin-minecraft-adapter) 使用。
|
|
4
|
+
|
|
5
|
+
## 功能特性
|
|
6
|
+
|
|
7
|
+
- **在线玩家查询**: 查看服务器在线玩家列表
|
|
8
|
+
- **消息广播**: 在 Minecraft 服务器中广播消息
|
|
9
|
+
- **玩家传送**: 传送玩家到指定位置或其他玩家
|
|
10
|
+
- **物品给予**: 给予玩家指定物品
|
|
11
|
+
- **天气控制**: 设置服务器天气(晴天/雨天/雷暴)
|
|
12
|
+
- **时间控制**: 设置服务器时间(白天/黑夜/自定义游戏刻)
|
|
13
|
+
- **自定义命令**: 执行任意 Minecraft 服务器命令
|
|
14
|
+
- **权限管理**: 基于 Koishi 内置权限系统的分级权限控制
|
|
15
|
+
- **中文别名**: 所有命令均支持中文别名
|
|
16
|
+
|
|
17
|
+
## 前置需求
|
|
18
|
+
|
|
19
|
+
- [Koishi](https://koishi.chat/) v4.17.9+
|
|
20
|
+
- [koishi-plugin-minecraft-adapter](https://github.com/johntime2005/koishi-plugin-minecraft-adapter) — Minecraft 适配器插件(必须先安装并配置好)
|
|
21
|
+
|
|
22
|
+
## 安装
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
npm install koishi-plugin-minecraft-command
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## 配置
|
|
29
|
+
|
|
30
|
+
| 配置项 | 类型 | 默认值 | 说明 |
|
|
31
|
+
|--------|------|--------|------|
|
|
32
|
+
| `botId` | `string` | `''` | 指定 Minecraft Bot ID(selfId),留空则自动选择第一个可用的 Minecraft Bot |
|
|
33
|
+
| `userAuthority` | `number` | `1` | 普通命令(mc.list / mc.say)所需的 Koishi 用户权限等级 |
|
|
34
|
+
| `adminAuthority` | `number` | `3` | 管理命令(mc.tp / mc.give / mc.weather / mc.time / mc.cmd)所需的 Koishi 用户权限等级 |
|
|
35
|
+
|
|
36
|
+
### 配置示例
|
|
37
|
+
|
|
38
|
+
```yaml
|
|
39
|
+
plugins:
|
|
40
|
+
minecraft-command:
|
|
41
|
+
botId: ''
|
|
42
|
+
userAuthority: 1
|
|
43
|
+
adminAuthority: 3
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
## 命令列表
|
|
47
|
+
|
|
48
|
+
### 普通命令
|
|
49
|
+
|
|
50
|
+
普通命令需要用户权限等级 >= `userAuthority`(默认 1)。
|
|
51
|
+
|
|
52
|
+
| 命令 | 中文别名 | 说明 | 示例 |
|
|
53
|
+
|------|----------|------|------|
|
|
54
|
+
| `mc.list` | `mc.在线` | 查看在线玩家 | `mc.list` |
|
|
55
|
+
| `mc.say <消息>` | `mc.广播` | 在服务器中广播消息 | `mc.say 大家好` |
|
|
56
|
+
|
|
57
|
+
### 管理命令
|
|
58
|
+
|
|
59
|
+
管理命令需要用户权限等级 >= `adminAuthority`(默认 3)。
|
|
60
|
+
|
|
61
|
+
| 命令 | 中文别名 | 说明 | 示例 |
|
|
62
|
+
|------|----------|------|------|
|
|
63
|
+
| `mc.tp <玩家> <目标>` | `mc.传送` | 传送玩家到目标位置或玩家 | `mc.tp Steve Alex`<br>`mc.tp Steve 100 64 200` |
|
|
64
|
+
| `mc.give <玩家> <物品> [数量]` | `mc.给予` | 给予玩家物品 | `mc.give Steve diamond 64` |
|
|
65
|
+
| `mc.weather <类型>` | `mc.天气` | 设置服务器天气 | `mc.weather clear` |
|
|
66
|
+
| `mc.time <值>` | `mc.时间` | 设置服务器时间 | `mc.time day`<br>`mc.time 6000` |
|
|
67
|
+
| `mc.cmd <命令>` | `mc.命令` | 执行任意服务器命令 | `mc.cmd op Steve` |
|
|
68
|
+
|
|
69
|
+
### 天气类型
|
|
70
|
+
|
|
71
|
+
| 值 | 说明 |
|
|
72
|
+
|----|------|
|
|
73
|
+
| `clear` | 晴天 |
|
|
74
|
+
| `rain` | 雨天 |
|
|
75
|
+
| `thunder` | 雷暴 |
|
|
76
|
+
|
|
77
|
+
### 时间值
|
|
78
|
+
|
|
79
|
+
| 值 | 说明 |
|
|
80
|
+
|----|------|
|
|
81
|
+
| `day` | 白天 |
|
|
82
|
+
| `night` | 黑夜 |
|
|
83
|
+
| `noon` | 正午 |
|
|
84
|
+
| `midnight` | 午夜 |
|
|
85
|
+
| 数字 | 游戏刻(如 `6000`) |
|
|
86
|
+
|
|
87
|
+
## 权限说明
|
|
88
|
+
|
|
89
|
+
本插件使用 Koishi 内置权限系统,通过用户的 `authority`(权限等级)控制命令访问。
|
|
90
|
+
|
|
91
|
+
### 权限等级
|
|
92
|
+
|
|
93
|
+
| 等级 | 说明 | 可用命令 |
|
|
94
|
+
|------|------|----------|
|
|
95
|
+
| 0 | 未授权用户 | 无 |
|
|
96
|
+
| 1(默认 `userAuthority`) | 普通用户 | `mc.list`、`mc.say` |
|
|
97
|
+
| 3(默认 `adminAuthority`) | 管理员 | 所有命令 |
|
|
98
|
+
|
|
99
|
+
> 可通过插件配置调整 `userAuthority` 和 `adminAuthority` 的值。
|
|
100
|
+
|
|
101
|
+
### 如何设置用户权限
|
|
102
|
+
|
|
103
|
+
1. **通过 Koishi 控制台**:在「用户管理」页面找到目标用户,修改其 `authority` 字段
|
|
104
|
+
2. **通过 `authorize` 命令**(需安装 admin 插件):
|
|
105
|
+
```
|
|
106
|
+
authorize 3 -u @用户
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
### 推荐配置
|
|
110
|
+
|
|
111
|
+
```yaml
|
|
112
|
+
# 默认配置即可满足大多数场景
|
|
113
|
+
minecraft-command:
|
|
114
|
+
userAuthority: 1 # 普通用户可执行查询和广播
|
|
115
|
+
adminAuthority: 3 # 管理员可执行传送、给予、天气、时间等管理命令
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
## 相关项目
|
|
119
|
+
|
|
120
|
+
- [koishi-plugin-minecraft-adapter](https://github.com/johntime2005/koishi-plugin-minecraft-adapter) — Minecraft 适配器插件(本插件的前置依赖)
|
|
121
|
+
- [鹊桥 (QueQiao)](https://github.com/17TheWord/QueQiao) — Minecraft 服务端通信插件/Mod
|
|
122
|
+
- [Koishi](https://koishi.chat/) — 跨平台聊天机器人框架
|
|
123
|
+
|
|
124
|
+
## 链接
|
|
125
|
+
|
|
126
|
+
- [GitHub 仓库](https://github.com/johntime2005/koishi-plugin-minecraft-command)
|
|
127
|
+
- [问题反馈](https://github.com/johntime2005/koishi-plugin-minecraft-command/issues)
|
|
128
|
+
- [npm 包](https://www.npmjs.com/package/koishi-plugin-minecraft-command)
|
|
129
|
+
|
|
130
|
+
## 许可证
|
|
131
|
+
|
|
132
|
+
[MIT](LICENSE)
|
package/lib/index.d.ts
CHANGED
|
@@ -2,11 +2,8 @@ import { Context, Schema } from 'koishi';
|
|
|
2
2
|
export declare const name = "minecraft-command";
|
|
3
3
|
export interface Config {
|
|
4
4
|
botId: string;
|
|
5
|
-
allowedChannels: string[];
|
|
6
|
-
allowedUsers: string[];
|
|
7
|
-
adminUsers: string[];
|
|
8
|
-
adminAuthority: number;
|
|
9
5
|
userAuthority: number;
|
|
6
|
+
adminAuthority: number;
|
|
10
7
|
}
|
|
11
8
|
export declare const Config: Schema<Config>;
|
|
12
9
|
export declare function apply(ctx: Context, config: Config): void;
|
package/lib/index.js
CHANGED
|
@@ -12,21 +12,12 @@ exports.Config = koishi_1.Schema.object({
|
|
|
12
12
|
botId: koishi_1.Schema.string()
|
|
13
13
|
.description('指定 Minecraft Bot ID(selfId),留空则自动选择第一个可用的 Minecraft Bot')
|
|
14
14
|
.default(''),
|
|
15
|
-
allowedChannels: koishi_1.Schema.array(koishi_1.Schema.string())
|
|
16
|
-
.description('允许执行命令的频道/群组 ID 列表(留空则不限制频道)')
|
|
17
|
-
.default([]),
|
|
18
|
-
allowedUsers: koishi_1.Schema.array(koishi_1.Schema.string())
|
|
19
|
-
.description('允许执行普通命令的用户 ID 列表(留空则不限制用户)')
|
|
20
|
-
.default([]),
|
|
21
|
-
adminUsers: koishi_1.Schema.array(koishi_1.Schema.string())
|
|
22
|
-
.description('允许执行管理命令的用户 ID 列表(mc.cmd / mc.tp / mc.give / mc.weather / mc.time)')
|
|
23
|
-
.default([]),
|
|
24
|
-
adminAuthority: koishi_1.Schema.number()
|
|
25
|
-
.description('管理命令所需的 Koishi authority 等级(与 adminUsers 为「或」关系,满足其一即可)')
|
|
26
|
-
.default(3),
|
|
27
15
|
userAuthority: koishi_1.Schema.number()
|
|
28
|
-
.description('
|
|
16
|
+
.description('普通命令(mc.list / mc.say)所需的 Koishi 用户权限等级')
|
|
29
17
|
.default(1),
|
|
18
|
+
adminAuthority: koishi_1.Schema.number()
|
|
19
|
+
.description('管理命令(mc.tp / mc.give / mc.weather / mc.time / mc.cmd)所需的 Koishi 用户权限等级')
|
|
20
|
+
.default(3),
|
|
30
21
|
});
|
|
31
22
|
function apply(ctx, config) {
|
|
32
23
|
function findBot() {
|
|
@@ -56,48 +47,13 @@ function apply(ctx, config) {
|
|
|
56
47
|
}
|
|
57
48
|
return await bot.executeCommand(command);
|
|
58
49
|
}
|
|
59
|
-
function extractAuthority(user) {
|
|
60
|
-
if (user != null && typeof user === 'object' && 'authority' in user) {
|
|
61
|
-
return typeof user.authority === 'number' ? user.authority : 0;
|
|
62
|
-
}
|
|
63
|
-
return 0;
|
|
64
|
-
}
|
|
65
|
-
function checkPermission(channelId, userId, authority, requireAdmin) {
|
|
66
|
-
if (config.allowedChannels.length > 0) {
|
|
67
|
-
if (!channelId || !config.allowedChannels.includes(channelId)) {
|
|
68
|
-
return '此频道不允许执行 Minecraft 命令';
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
if (requireAdmin) {
|
|
72
|
-
// adminUsers 列表 或 authority >= adminAuthority,满足其一即可
|
|
73
|
-
const inAdminList = userId ? config.adminUsers.includes(userId) : false;
|
|
74
|
-
const hasAuth = authority >= config.adminAuthority;
|
|
75
|
-
if (!inAdminList && !hasAuth) {
|
|
76
|
-
return '你没有权限执行此管理命令';
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
else {
|
|
80
|
-
// allowedUsers 为空则不限制;非空时需在列表中 或 authority 满足要求
|
|
81
|
-
if (config.allowedUsers.length > 0) {
|
|
82
|
-
const inUserList = userId ? config.allowedUsers.includes(userId) : false;
|
|
83
|
-
const hasAuth = authority >= config.userAuthority;
|
|
84
|
-
if (!inUserList && !hasAuth) {
|
|
85
|
-
return '你没有权限执行此命令';
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
return undefined;
|
|
90
|
-
}
|
|
91
50
|
ctx.command('mc', 'Minecraft 服务器管理')
|
|
92
51
|
.usage('通过子命令管理 Minecraft 服务器:mc.list / mc.say / mc.tp / mc.give / mc.weather / mc.time / mc.cmd');
|
|
93
|
-
ctx.command('mc.list', '查看在线玩家')
|
|
52
|
+
ctx.command('mc.list', '查看在线玩家', { authority: config.userAuthority })
|
|
94
53
|
.alias('mc.在线')
|
|
95
54
|
.action(async ({ session }) => {
|
|
96
55
|
if (!session)
|
|
97
56
|
return;
|
|
98
|
-
const denied = checkPermission(session.channelId, session.userId, extractAuthority(session.user), false);
|
|
99
|
-
if (denied)
|
|
100
|
-
return denied;
|
|
101
57
|
try {
|
|
102
58
|
const result = await runCommand('list');
|
|
103
59
|
return result || '命令已执行,但服务器未返回数据';
|
|
@@ -107,14 +63,11 @@ function apply(ctx, config) {
|
|
|
107
63
|
return `执行失败: ${e.message}`;
|
|
108
64
|
}
|
|
109
65
|
});
|
|
110
|
-
ctx.command('mc.say <message:text>', '在服务器中广播消息')
|
|
66
|
+
ctx.command('mc.say <message:text>', '在服务器中广播消息', { authority: config.userAuthority })
|
|
111
67
|
.alias('mc.广播')
|
|
112
68
|
.action(async ({ session }, message) => {
|
|
113
69
|
if (!session)
|
|
114
70
|
return;
|
|
115
|
-
const denied = checkPermission(session.channelId, session.userId, extractAuthority(session.user), false);
|
|
116
|
-
if (denied)
|
|
117
|
-
return denied;
|
|
118
71
|
if (!message)
|
|
119
72
|
return '请输入要广播的消息';
|
|
120
73
|
try {
|
|
@@ -126,15 +79,12 @@ function apply(ctx, config) {
|
|
|
126
79
|
return `广播失败: ${e.message}`;
|
|
127
80
|
}
|
|
128
81
|
});
|
|
129
|
-
ctx.command('mc.tp <player:string> <target:text>', '传送玩家到目标位置或玩家')
|
|
82
|
+
ctx.command('mc.tp <player:string> <target:text>', '传送玩家到目标位置或玩家', { authority: config.adminAuthority })
|
|
130
83
|
.alias('mc.传送')
|
|
131
84
|
.usage('示例:\n mc.tp Steve Alex — 将 Steve 传送到 Alex\n mc.tp Steve 100 64 200 — 将 Steve 传送到坐标')
|
|
132
85
|
.action(async ({ session }, player, target) => {
|
|
133
86
|
if (!session)
|
|
134
87
|
return;
|
|
135
|
-
const denied = checkPermission(session.channelId, session.userId, extractAuthority(session.user), true);
|
|
136
|
-
if (denied)
|
|
137
|
-
return denied;
|
|
138
88
|
if (!player || !target)
|
|
139
89
|
return '用法: mc.tp <玩家名> <目标玩家或坐标>';
|
|
140
90
|
try {
|
|
@@ -146,15 +96,12 @@ function apply(ctx, config) {
|
|
|
146
96
|
return `传送失败: ${e.message}`;
|
|
147
97
|
}
|
|
148
98
|
});
|
|
149
|
-
ctx.command('mc.give <player:string> <item:string> [count:number]', '给予玩家物品')
|
|
99
|
+
ctx.command('mc.give <player:string> <item:string> [count:number]', '给予玩家物品', { authority: config.adminAuthority })
|
|
150
100
|
.alias('mc.给予')
|
|
151
101
|
.usage('示例: mc.give Steve diamond 64')
|
|
152
102
|
.action(async ({ session }, player, item, count) => {
|
|
153
103
|
if (!session)
|
|
154
104
|
return;
|
|
155
|
-
const denied = checkPermission(session.channelId, session.userId, extractAuthority(session.user), true);
|
|
156
|
-
if (denied)
|
|
157
|
-
return denied;
|
|
158
105
|
if (!player || !item)
|
|
159
106
|
return '用法: mc.give <玩家名> <物品ID> [数量]';
|
|
160
107
|
const amount = count ?? 1;
|
|
@@ -167,15 +114,12 @@ function apply(ctx, config) {
|
|
|
167
114
|
return `给予失败: ${e.message}`;
|
|
168
115
|
}
|
|
169
116
|
});
|
|
170
|
-
ctx.command('mc.weather <type:string>', '设置服务器天气')
|
|
117
|
+
ctx.command('mc.weather <type:string>', '设置服务器天气', { authority: config.adminAuthority })
|
|
171
118
|
.alias('mc.天气')
|
|
172
119
|
.usage('可选值: clear (晴天) / rain (雨天) / thunder (雷暴)')
|
|
173
120
|
.action(async ({ session }, type) => {
|
|
174
121
|
if (!session)
|
|
175
122
|
return;
|
|
176
|
-
const denied = checkPermission(session.channelId, session.userId, extractAuthority(session.user), true);
|
|
177
|
-
if (denied)
|
|
178
|
-
return denied;
|
|
179
123
|
if (!type)
|
|
180
124
|
return '请指定天气类型: clear / rain / thunder';
|
|
181
125
|
const validTypes = ['clear', 'rain', 'thunder'];
|
|
@@ -191,15 +135,12 @@ function apply(ctx, config) {
|
|
|
191
135
|
return `设置天气失败: ${e.message}`;
|
|
192
136
|
}
|
|
193
137
|
});
|
|
194
|
-
ctx.command('mc.time <value:string>', '设置服务器时间')
|
|
138
|
+
ctx.command('mc.time <value:string>', '设置服务器时间', { authority: config.adminAuthority })
|
|
195
139
|
.alias('mc.时间')
|
|
196
140
|
.usage('可选值: day / night / noon / midnight / 游戏刻数字 (如 6000)')
|
|
197
141
|
.action(async ({ session }, value) => {
|
|
198
142
|
if (!session)
|
|
199
143
|
return;
|
|
200
|
-
const denied = checkPermission(session.channelId, session.userId, extractAuthority(session.user), true);
|
|
201
|
-
if (denied)
|
|
202
|
-
return denied;
|
|
203
144
|
if (!value)
|
|
204
145
|
return '请指定时间值: day / night / noon / midnight / 游戏刻数字';
|
|
205
146
|
const presets = ['day', 'night', 'noon', 'midnight'];
|
|
@@ -217,15 +158,12 @@ function apply(ctx, config) {
|
|
|
217
158
|
return `设置时间失败: ${e.message}`;
|
|
218
159
|
}
|
|
219
160
|
});
|
|
220
|
-
ctx.command('mc.cmd <command:text>', '执行任意 Minecraft 服务器命令')
|
|
161
|
+
ctx.command('mc.cmd <command:text>', '执行任意 Minecraft 服务器命令', { authority: config.adminAuthority })
|
|
221
162
|
.alias('mc.命令')
|
|
222
163
|
.usage('直接执行原始服务器命令,如: mc.cmd op Steve')
|
|
223
164
|
.action(async ({ session }, command) => {
|
|
224
165
|
if (!session)
|
|
225
166
|
return;
|
|
226
|
-
const denied = checkPermission(session.channelId, session.userId, extractAuthority(session.user), true);
|
|
227
|
-
if (denied)
|
|
228
|
-
return denied;
|
|
229
167
|
if (!command)
|
|
230
168
|
return '请输入要执行的命令';
|
|
231
169
|
try {
|
package/package.json
CHANGED
|
@@ -1,14 +1,23 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "koishi-plugin-minecraft-command",
|
|
3
3
|
"description": "Execute Minecraft server commands from chat platforms via koishi-plugin-minecraft-adapter",
|
|
4
|
-
"version": "1.0.
|
|
4
|
+
"version": "1.0.3",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"typings": "lib/index.d.ts",
|
|
7
7
|
"files": [
|
|
8
|
-
"lib"
|
|
8
|
+
"lib",
|
|
9
|
+
"README.md"
|
|
9
10
|
],
|
|
10
11
|
"license": "MIT",
|
|
11
12
|
"author": "johntime2005",
|
|
13
|
+
"homepage": "https://github.com/johntime2005/koishi-plugin-minecraft-command",
|
|
14
|
+
"repository": {
|
|
15
|
+
"type": "git",
|
|
16
|
+
"url": "https://github.com/johntime2005/koishi-plugin-minecraft-command.git"
|
|
17
|
+
},
|
|
18
|
+
"bugs": {
|
|
19
|
+
"url": "https://github.com/johntime2005/koishi-plugin-minecraft-command/issues"
|
|
20
|
+
},
|
|
12
21
|
"scripts": {
|
|
13
22
|
"build": "tsc",
|
|
14
23
|
"prepublishOnly": "npm run build"
|
|
@@ -31,12 +40,27 @@
|
|
|
31
40
|
"command",
|
|
32
41
|
"rcon",
|
|
33
42
|
"mc",
|
|
34
|
-
"game"
|
|
43
|
+
"game",
|
|
44
|
+
"server",
|
|
45
|
+
"管理",
|
|
46
|
+
"queqiao",
|
|
47
|
+
"鹊桥"
|
|
35
48
|
],
|
|
36
49
|
"koishi": {
|
|
37
50
|
"description": {
|
|
38
51
|
"en": "Execute Minecraft server commands from chat platforms, works with minecraft-adapter",
|
|
39
52
|
"zh": "通过聊天平台执行 Minecraft 服务器命令,与 minecraft-adapter 联动"
|
|
53
|
+
},
|
|
54
|
+
"category": "gametool",
|
|
55
|
+
"public": [
|
|
56
|
+
"botId",
|
|
57
|
+
"userAuthority",
|
|
58
|
+
"adminAuthority"
|
|
59
|
+
],
|
|
60
|
+
"service": {
|
|
61
|
+
"required": [
|
|
62
|
+
"adapter"
|
|
63
|
+
]
|
|
40
64
|
}
|
|
41
65
|
}
|
|
42
66
|
}
|