mioku-plugin-terraria 2.0.1 → 2.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/README.md +1 -4
- package/config.md +6 -0
- package/core/command.ts +1 -1
- package/index.ts +22 -24
- package/package.json +1 -1
- package/types.ts +6 -0
package/README.md
CHANGED
|
@@ -8,15 +8,12 @@
|
|
|
8
8
|
- **RCON 命令执行**:在群聊中以命令前缀(默认 `$`)开头的消息会被当作服务器命令执行,支持白名单
|
|
9
9
|
- **多服务器支持**:可同时连接多台 Terraria 服务器,每台独立配置
|
|
10
10
|
- **自动重连**:连接断开后按指数退避自动重连,可配置最大重试次数
|
|
11
|
+
- **过滤未知玩家**:默认不推送玩家名称缺失的事件,可在配置中关闭
|
|
11
12
|
|
|
12
13
|
## 服务端要求
|
|
13
14
|
|
|
14
15
|
Terraria 服务器需安装 [TianSuo](https://github.com/Jerryplusy/TianSuo) TShock 插件
|
|
15
16
|
|
|
16
|
-
## 配置
|
|
17
|
-
|
|
18
|
-
通过 WebUI 配置页面管理
|
|
19
|
-
|
|
20
17
|
## 命令
|
|
21
18
|
|
|
22
19
|
| 命令 | 描述 | 权限 |
|
package/config.md
CHANGED
|
@@ -13,6 +13,11 @@ fields:
|
|
|
13
13
|
type: switch
|
|
14
14
|
description: 消息中是否显示服务器名称
|
|
15
15
|
|
|
16
|
+
- key: base.ignore_unknown_player
|
|
17
|
+
label: 不推送未知玩家信息
|
|
18
|
+
type: switch
|
|
19
|
+
description: 开启后,不推送玩家名称缺失的事件(如未知玩家加入、退出、聊天、死亡)
|
|
20
|
+
|
|
16
21
|
- key: base.servers
|
|
17
22
|
label: 服务器列表
|
|
18
23
|
type: array
|
|
@@ -83,5 +88,6 @@ fields:
|
|
|
83
88
|
keys:
|
|
84
89
|
- base.say_way
|
|
85
90
|
- base.display_server_name
|
|
91
|
+
- base.ignore_unknown_player
|
|
86
92
|
- base.servers
|
|
87
93
|
```
|
package/core/command.ts
CHANGED
package/index.ts
CHANGED
|
@@ -39,18 +39,13 @@ export default definePlugin({
|
|
|
39
39
|
serverManager.startServers(config);
|
|
40
40
|
ctx.logger.info("Terraria 插件已就绪");
|
|
41
41
|
|
|
42
|
-
const requireGroup = (event: any):
|
|
43
|
-
|
|
44
|
-
"group_id" in event && typeof event.group_id === "number"
|
|
45
|
-
? event.group_id
|
|
46
|
-
: undefined;
|
|
47
|
-
return groupId;
|
|
48
|
-
};
|
|
42
|
+
const requireGroup = (event: any): string | undefined =>
|
|
43
|
+
String(event?.group_id ?? "").trim() || undefined;
|
|
49
44
|
|
|
50
45
|
ctx.command({
|
|
51
|
-
name: "
|
|
52
|
-
|
|
53
|
-
|
|
46
|
+
name: "ts 状态",
|
|
47
|
+
prefixes: ["/", "."],
|
|
48
|
+
match: /^ts\s*状态(?:\s|$)/,
|
|
54
49
|
permission: "master",
|
|
55
50
|
description: "查看所有已配置服务器的 WebSocket 连接状态",
|
|
56
51
|
handler: async ({ event }) => {
|
|
@@ -61,12 +56,12 @@ export default definePlugin({
|
|
|
61
56
|
},
|
|
62
57
|
});
|
|
63
58
|
ctx.command({
|
|
64
|
-
name: "
|
|
65
|
-
|
|
66
|
-
|
|
59
|
+
name: "ts 开启同步",
|
|
60
|
+
prefixes: ["/", "."],
|
|
61
|
+
match: /^ts\s*开启同步(?:\s|$)/,
|
|
67
62
|
permission: "master",
|
|
68
63
|
description: "开启指定服务器的群聊消息同步功能",
|
|
69
|
-
usage: "
|
|
64
|
+
usage: ".ts 开启同步 <服务器名称>",
|
|
70
65
|
handler: async ({ event, args }) => {
|
|
71
66
|
if (!requireGroup(event)) return;
|
|
72
67
|
await handleSync(
|
|
@@ -81,12 +76,12 @@ export default definePlugin({
|
|
|
81
76
|
},
|
|
82
77
|
});
|
|
83
78
|
ctx.command({
|
|
84
|
-
name: "
|
|
85
|
-
|
|
86
|
-
|
|
79
|
+
name: "ts 关闭同步",
|
|
80
|
+
prefixes: ["/", "."],
|
|
81
|
+
match: /^ts\s*关闭同步(?:\s|$)/,
|
|
87
82
|
permission: "master",
|
|
88
83
|
description: "关闭指定服务器的群聊消息同步功能",
|
|
89
|
-
usage: "
|
|
84
|
+
usage: ".ts 关闭同步 <服务器名称>",
|
|
90
85
|
handler: async ({ event, args }) => {
|
|
91
86
|
if (!requireGroup(event)) return;
|
|
92
87
|
await handleSync(
|
|
@@ -101,9 +96,9 @@ export default definePlugin({
|
|
|
101
96
|
},
|
|
102
97
|
});
|
|
103
98
|
ctx.command({
|
|
104
|
-
name: "
|
|
105
|
-
|
|
106
|
-
|
|
99
|
+
name: "ts 重连",
|
|
100
|
+
prefixes: ["/", "."],
|
|
101
|
+
match: /^ts\s*重连(?:\s|$)/,
|
|
107
102
|
permission: "master",
|
|
108
103
|
description: "断开并重新建立所有服务器的 WebSocket 连接",
|
|
109
104
|
handler: async ({ event }) => {
|
|
@@ -118,7 +113,7 @@ export default definePlugin({
|
|
|
118
113
|
const groupId = requireGroup(event);
|
|
119
114
|
if (!groupId) return;
|
|
120
115
|
const text = ctx.text(event)?.trim();
|
|
121
|
-
if (text
|
|
116
|
+
if (text && /^[./]ts\b/.test(text)) return;
|
|
122
117
|
await forwardToTerraria(ctx, event, config, configHandler, serverManager);
|
|
123
118
|
});
|
|
124
119
|
|
|
@@ -159,6 +154,8 @@ async function handleTerrariaEvent(
|
|
|
159
154
|
: undefined,
|
|
160
155
|
};
|
|
161
156
|
|
|
157
|
+
if (!event.player?.name?.trim() && config.ignore_unknown_player) return;
|
|
158
|
+
|
|
162
159
|
const messageText = formatTerrariaEvent(event, config);
|
|
163
160
|
if (!messageText) return;
|
|
164
161
|
|
|
@@ -196,9 +193,10 @@ async function forwardToTerraria(
|
|
|
196
193
|
`[Terraria] 收到群消息 group=${event.group_id} text=${text}`,
|
|
197
194
|
);
|
|
198
195
|
|
|
199
|
-
|
|
196
|
+
const groupId = String(event.group_id ?? "").trim();
|
|
197
|
+
if (!groupId) return;
|
|
200
198
|
|
|
201
|
-
const servers = configHandler.getServersForGroup(
|
|
199
|
+
const servers = configHandler.getServersForGroup(groupId);
|
|
202
200
|
if (servers.length === 0) return;
|
|
203
201
|
|
|
204
202
|
const msgList: QqMessagePart[] = Array.isArray(event.message)
|
package/package.json
CHANGED
package/types.ts
CHANGED
|
@@ -56,12 +56,14 @@ export interface TerrariaConfig {
|
|
|
56
56
|
servers: TerrariaServerConfig[];
|
|
57
57
|
say_way: string;
|
|
58
58
|
display_server_name: boolean;
|
|
59
|
+
ignore_unknown_player: boolean;
|
|
59
60
|
}
|
|
60
61
|
|
|
61
62
|
export const DEFAULT_CONFIG: TerrariaConfig = {
|
|
62
63
|
servers: [],
|
|
63
64
|
say_way: "说:",
|
|
64
65
|
display_server_name: true,
|
|
66
|
+
ignore_unknown_player: true,
|
|
65
67
|
};
|
|
66
68
|
|
|
67
69
|
export function normalizeConfig(raw: Partial<TerrariaConfig>): TerrariaConfig {
|
|
@@ -103,5 +105,9 @@ export function normalizeConfig(raw: Partial<TerrariaConfig>): TerrariaConfig {
|
|
|
103
105
|
typeof raw.display_server_name === "boolean"
|
|
104
106
|
? raw.display_server_name
|
|
105
107
|
: DEFAULT_CONFIG.display_server_name,
|
|
108
|
+
ignore_unknown_player:
|
|
109
|
+
typeof raw.ignore_unknown_player === "boolean"
|
|
110
|
+
? raw.ignore_unknown_player
|
|
111
|
+
: DEFAULT_CONFIG.ignore_unknown_player,
|
|
106
112
|
};
|
|
107
113
|
}
|