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.
- package/lib/index.js +36 -19
- 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
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
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
|
|
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
|
|
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) {
|