koishi-plugin-minecraft-adapter 0.4.2 → 0.4.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.
Files changed (2) hide show
  1. package/lib/index.js +36 -19
  2. package/package.json +1 -1
package/lib/index.js CHANGED
@@ -289,26 +289,29 @@ class MinecraftService extends koishi_1.Service {
289
289
  this.ctx.emit(`minecraft/${mapped.type}`, mapped.payload);
290
290
  // 实验性:将聊天注入 Koishi 标准消息事件,便于指令触发
291
291
  if (this.config.adapterCompat?.injectMessage && mapped.type === 'chat') {
292
- const userId = mapped.payload.player || 'player';
293
- const content = String(mapped.payload.message ?? '');
294
- const session = {
295
- platform: 'minecraft',
296
- selfId: this.config.websocket?.serverName || 'minecraft',
297
- timestamp: Date.now(),
298
- type: 'message',
299
- subtype: 'private',
300
- userId,
301
- username: userId,
302
- channelId: `mc:${userId}`,
303
- guildId: 'minecraft',
304
- content,
305
- };
306
- this.dlog('inject.message', { session: { ...session, content: truncate(session.content, 200) } });
307
- this.ctx.emit('message', session);
292
+ const hasBot = Array.isArray(this.ctx.bots) && this.ctx.bots.some((b) => b.platform === 'minecraft');
293
+ if (hasBot) {
294
+ const userId = mapped.payload.player || 'player';
295
+ const content = String(mapped.payload.message ?? '');
296
+ const session = {
297
+ platform: 'minecraft',
298
+ selfId: this.config.websocket?.serverName || 'minecraft',
299
+ timestamp: Date.now(),
300
+ type: 'message',
301
+ subtype: 'private',
302
+ userId,
303
+ username: userId,
304
+ channelId: `mc:${userId}`,
305
+ guildId: 'minecraft',
306
+ content,
307
+ };
308
+ this.dlog('inject.message', { session: { ...session, content: truncate(session.content, 200) } });
309
+ this.ctx.emit('message', session);
310
+ }
308
311
  }
309
312
  }
310
313
  catch (e) {
311
- logger.warn('WS 消息解析失败: ' + e?.message);
314
+ logger.warn('WS 处理失败: ' + e?.message);
312
315
  }
313
316
  });
314
317
  ws.on('close', () => {
@@ -577,13 +580,27 @@ function mapQueqiaoEvent(type, data) {
577
580
  case 'advancement_earned':
578
581
  return { type: 'advancement', payload: { player: data.player || data.name, advancement: data.advancement || data.key, raw: data } };
579
582
  }
580
- // 回退:QueQiao 的标准消息
581
- if (data && data.post_type === 'message') {
583
+ // 回退:QueQiao 标准格式
584
+ if (data?.post_type === 'message') {
582
585
  if (data.sub_type === 'chat' || data.event_name?.toLowerCase()?.includes('chatevent')) {
583
586
  const playerName = data.player?.nickname || data.player?.name || data.player?.display_name || data.name;
584
587
  return { type: 'chat', payload: { player: playerName, message: data.message || data.text, raw: data } };
585
588
  }
586
589
  }
590
+ if (data?.post_type === 'notice') {
591
+ if (data.sub_type === 'join' || data.event_name?.toLowerCase()?.includes('loggedinevent')) {
592
+ const playerName = data.player?.nickname || data.player?.name || data.player?.display_name || data.name;
593
+ return { type: 'join', payload: { player: playerName, raw: data } };
594
+ }
595
+ if (data.sub_type === 'quit' || data.event_name?.toLowerCase()?.includes('loggedoutevent')) {
596
+ const playerName = data.player?.nickname || data.player?.name || data.player?.display_name || data.name;
597
+ return { type: 'leave', payload: { player: playerName, raw: data } };
598
+ }
599
+ if (data.sub_type === 'achievement' || data.event_name?.toLowerCase()?.includes('advancement')) {
600
+ const playerName = data.player?.nickname || data.player?.name || data.player?.display_name || data.name;
601
+ return { type: 'advancement', payload: { player: playerName, advancement: data.advancement?.name || data.advancement?.key, raw: data } };
602
+ }
603
+ }
587
604
  return { type, payload: data };
588
605
  }
589
606
  function buildWsOutboundPayload(config, api, data) {
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "koishi-plugin-minecraft-adapter",
3
3
  "description": "Minecraft RCON & webhook integration for Koishi",
4
- "version": "0.4.2",
4
+ "version": "0.4.3",
5
5
  "main": "lib/index.js",
6
6
  "typings": "lib/index.d.ts",
7
7
  "files": [