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 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
@@ -14,7 +14,7 @@ export function isCommandAllowed(
14
14
  text: string,
15
15
  serverItem: TerrariaServerConfig,
16
16
  isMaster: boolean,
17
- userId: number | string | undefined,
17
+ userId: string | undefined,
18
18
  ): boolean {
19
19
  if (isMaster) return true;
20
20
 
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): number | undefined => {
43
- const groupId =
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: "/ts 状态",
52
- match: /^\/ts\s*状态(?:\s|$)/,
53
- prefixes: false,
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: "/ts 开启同步",
65
- match: /^\/ts\s*开启同步(?:\s|$)/,
66
- prefixes: false,
59
+ name: "ts 开启同步",
60
+ prefixes: ["/", "."],
61
+ match: /^ts\s*开启同步(?:\s|$)/,
67
62
  permission: "master",
68
63
  description: "开启指定服务器的群聊消息同步功能",
69
- usage: "/ts 开启同步 <服务器名称>",
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: "/ts 关闭同步",
85
- match: /^\/ts\s*关闭同步(?:\s|$)/,
86
- prefixes: false,
79
+ name: "ts 关闭同步",
80
+ prefixes: ["/", "."],
81
+ match: /^ts\s*关闭同步(?:\s|$)/,
87
82
  permission: "master",
88
83
  description: "关闭指定服务器的群聊消息同步功能",
89
- usage: "/ts 关闭同步 <服务器名称>",
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: "/ts 重连",
105
- match: /^\/ts\s*重连(?:\s|$)/,
106
- prefixes: false,
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?.startsWith("/ts")) return;
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
- if (!event.group_id) return;
196
+ const groupId = String(event.group_id ?? "").trim();
197
+ if (!groupId) return;
200
198
 
201
- const servers = configHandler.getServersForGroup(event.group_id);
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mioku-plugin-terraria",
3
- "version": "2.0.1",
3
+ "version": "2.0.3",
4
4
  "description": "Terraria 服务器与 QQ 群消息互通插件,基于 TianSuo 协议",
5
5
  "main": "index.ts",
6
6
  "type": "module",
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
  }