From e77bcc12671c5e3a85071489dc53870a0a2117c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=89=8B=E7=93=9C=E4=B8=80=E5=8D=81=E9=9B=AA?= Date: Mon, 12 Aug 2024 23:50:03 +0800 Subject: [PATCH] release: 2.0.8 --- manifest.json | 2 +- package.json | 2 +- src/common/framework/napcat.ts | 2 +- src/onebot/action/group/GetGroupMemberInfo.ts | 2 +- src/onebot/action/group/GetGroupMemberList.ts | 2 +- .../msg/SendMsg/create-send-elements.ts | 4 +-- src/onebot/helper/data.ts | 2 +- src/onebot/network/active-websocket.ts | 27 ++++++++++++++----- src/onebot/network/passive-websocket.ts | 15 ++++++++--- src/webui/ui/NapCat.ts | 2 +- static/assets/renderer.js | 2 +- 11 files changed, 43 insertions(+), 19 deletions(-) diff --git a/manifest.json b/manifest.json index 66ba9f19a..1b01478ff 100644 --- a/manifest.json +++ b/manifest.json @@ -4,7 +4,7 @@ "name": "NapCat", "slug": "NapCat", "description": "OneBot v11 protocol implementation with NapCat logic", - "version": "2.0.7", + "version": "2.0.8", "icon": "./logo.png", "authors": [ { diff --git a/package.json b/package.json index 55302e148..a6ef277e9 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "napcat", "private": true, "type": "module", - "version": "2.0.7", + "version": "2.0.8", "scripts": { "build:framework": "vite build --mode framework", "build:shell": "vite build --mode shell", diff --git a/src/common/framework/napcat.ts b/src/common/framework/napcat.ts index 16c6ce92b..bf33ba314 100644 --- a/src/common/framework/napcat.ts +++ b/src/common/framework/napcat.ts @@ -2,7 +2,7 @@ import path, { dirname } from 'path'; import { fileURLToPath } from 'url'; import fs from 'fs'; -export const napcat_version = '2.0.7'; +export const napcat_version = '2.0.8'; export class NapCatPathWrapper { binaryPath: string; diff --git a/src/onebot/action/group/GetGroupMemberInfo.ts b/src/onebot/action/group/GetGroupMemberInfo.ts index 8d234859b..2cc8270b3 100644 --- a/src/onebot/action/group/GetGroupMemberInfo.ts +++ b/src/onebot/action/group/GetGroupMemberInfo.ts @@ -69,7 +69,7 @@ class GetGroupMemberInfo extends BaseAction { } } } else { - // Mlikiowa V2.0.7 Refactor Todo + // Mlikiowa V2.0.8 Refactor Todo // retMember.last_sent_time = parseInt((await getGroupMember(payload.group_id.toString(), retMember.user_id))?.lastSpeakTime || date.toString()); // retMember.join_time = parseInt((await getGroupMember(payload.group_id.toString(), retMember.user_id))?.joinTime || date.toString()); } diff --git a/src/onebot/action/group/GetGroupMemberList.ts b/src/onebot/action/group/GetGroupMemberList.ts index 61901d609..eddf5f51e 100644 --- a/src/onebot/action/group/GetGroupMemberList.ts +++ b/src/onebot/action/group/GetGroupMemberList.ts @@ -83,7 +83,7 @@ class GetGroupMemberList extends BaseAction { } } } else { - // Mlikiowa V2.0.7 Refactor Todo + // Mlikiowa V2.0.8 Refactor Todo // _groupMembers.forEach(async item => { // item.last_sent_time = parseInt((await getGroupMember(payload.group_id.toString(), item.user_id))?.lastSpeakTime || date.toString()); // item.join_time = parseInt((await getGroupMember(payload.group_id.toString(), item.user_id))?.joinTime || date.toString()); diff --git a/src/onebot/action/msg/SendMsg/create-send-elements.ts b/src/onebot/action/msg/SendMsg/create-send-elements.ts index ae3836c38..da4a554bd 100644 --- a/src/onebot/action/msg/SendMsg/create-send-elements.ts +++ b/src/onebot/action/msg/SendMsg/create-send-elements.ts @@ -56,7 +56,7 @@ const _handlers: { if (atQQ === 'all') return SendMsgElementConstructor.at(coreContext, atQQ, atQQ, AtType.atAll, '全体成员'); // then the qq is a group member - // Mlikiowa V2.0.7 Refactor Todo + // Mlikiowa V2.0.8 Refactor Todo const uid = await coreContext.apis.UserApi.getUidByUinV2(atQQ); if (!uid) throw new Error('Get Uid Error'); return SendMsgElementConstructor.at(coreContext, atQQ, uid, AtType.atUser, ''); @@ -161,7 +161,7 @@ const _handlers: { } else { postData = data; } - // Mlikiowa V2.0.7 Refactor Todo + // Mlikiowa V2.0.8 Refactor Todo const signUrl = obContext.configLoader.configData.musicSignUrl; if (!signUrl) { if (data.type === 'qq') { diff --git a/src/onebot/helper/data.ts b/src/onebot/helper/data.ts index cd5e31630..f13819650 100644 --- a/src/onebot/helper/data.ts +++ b/src/onebot/helper/data.ts @@ -408,7 +408,7 @@ export class OB11Constructor { return; } //log("group msg", msg); - // Mlikiowa V2.0.7 Refactor Todo + // Mlikiowa V2.0.8 Refactor Todo // if (msg.senderUin && msg.senderUin !== '0') { // const member = await getGroupMember(msg.peerUid, msg.senderUin); // if (member && member.cardName !== msg.sendMemberName) { diff --git a/src/onebot/network/active-websocket.ts b/src/onebot/network/active-websocket.ts index 11983af6f..1133d7c16 100644 --- a/src/onebot/network/active-websocket.ts +++ b/src/onebot/network/active-websocket.ts @@ -6,6 +6,7 @@ import { ActionName } from '@/onebot/action/types'; import { OB11Response } from '@/onebot/action/OB11Response'; import { LogWrapper } from '@/common/utils/log'; import { ActionMap } from '@/onebot/action'; +import { LifeCycleSubType, OB11LifeCycleEvent } from '../event/meta/OB11LifeCycleEvent'; export class OB11ActiveWebSocketAdapter implements IOB11NetworkAdapter { isClosed: boolean = false; @@ -76,14 +77,22 @@ export class OB11ActiveWebSocketAdapter implements IOB11NetworkAdapter { 'User-Agent': 'OneBot/11', }, + }); + this.connection.on('open', () => { + try{ + this.connectEvent(this.coreContext); + }catch(e){ + this.logger.logError('[OneBot] [WebSocket Client] 发送连接生命周期失败', e); + } + }); this.connection.on('message', (data) => { this.handleMessage(data); }); this.connection.once('close', () => { if (!isClosedByError) { - this.logger.logError(`反向WebSocket (${this.url}) 连接意外关闭`); - this.logger.logError(`在 ${Math.floor(this.reconnectIntervalInMillis / 1000)} 秒后尝试重新连接`); + this.logger.logError(`[OneBot] [WebSocket Client] 反向WebSocket (${this.url}) 连接意外关闭`); + this.logger.logError(`[OneBot] [WebSocket Client] 在 ${Math.floor(this.reconnectIntervalInMillis / 1000)} 秒后尝试重新连接`); if (!this.isClosed) { this.connection = null; setTimeout(() => this.tryConnect(), this.reconnectIntervalInMillis); @@ -92,8 +101,8 @@ export class OB11ActiveWebSocketAdapter implements IOB11NetworkAdapter { }); this.connection.on('error', (err) => { isClosedByError = true; - this.logger.logError(`反向WebSocket (${this.url}) 连接错误`, err); - this.logger.logError(`在 ${Math.floor(this.reconnectIntervalInMillis / 1000)} 秒后尝试重新连接`); + this.logger.logError(`[OneBot] [WebSocket Client] 反向WebSocket (${this.url}) 连接错误`, err); + this.logger.logError(`[OneBot] [WebSocket Client] 在 ${Math.floor(this.reconnectIntervalInMillis / 1000)} 秒后尝试重新连接`); if (!this.isClosed) { this.connection = null; setTimeout(() => this.tryConnect(), this.reconnectIntervalInMillis); @@ -101,7 +110,13 @@ export class OB11ActiveWebSocketAdapter implements IOB11NetworkAdapter { }); } } - + connectEvent(core: NapCatCore) { + try { + this.checkStateAndReply(new OB11LifeCycleEvent(core, LifeCycleSubType.CONNECT)); + } catch (e) { + this.logger.logError('[OneBot] [WebSocket Client] 发送生命周期失败', e); + } + } private async handleMessage(message: any) { let receiveData: { action: ActionName, params?: any, echo?: any } = { action: ActionName.Unknown, params: {} }; let echo = undefined; @@ -109,7 +124,7 @@ export class OB11ActiveWebSocketAdapter implements IOB11NetworkAdapter { try { receiveData = JSON.parse(message.toString()); echo = receiveData.echo; - this.logger.logDebug('收到正向Websocket消息', receiveData); + this.logger.logDebug('[OneBot] [WebSocket Client] 收到正向Websocket消息', receiveData); } catch (e) { this.checkStateAndReply(OB11Response.error('json解析失败,请检查数据格式', 1400, echo)); } diff --git a/src/onebot/network/passive-websocket.ts b/src/onebot/network/passive-websocket.ts index 058999027..1317f4403 100644 --- a/src/onebot/network/passive-websocket.ts +++ b/src/onebot/network/passive-websocket.ts @@ -11,6 +11,7 @@ import { LogWrapper } from '@/common/utils/log'; import { OB11HeartbeatEvent } from '../event/meta/OB11HeartbeatEvent'; import { IncomingMessage } from 'http'; import { ActionMap } from '@/onebot/action'; +import { LifeCycleSubType, OB11LifeCycleEvent } from '../event/meta/OB11LifeCycleEvent'; export class OB11PassiveWebSocketAdapter implements IOB11NetworkAdapter { wsServer: WebSocketServer; @@ -36,6 +37,7 @@ export class OB11PassiveWebSocketAdapter implements IOB11NetworkAdapter { this.heartbeatInterval = heartbeatInterval; this.wsServer = new WebSocketServer({ port: port, host: ip }); + let core = coreContext; this.wsServer.on('connection', async (wsClient, wsReq) => { if (!this.isOpen) { wsClient.close(); @@ -43,9 +45,8 @@ export class OB11PassiveWebSocketAdapter implements IOB11NetworkAdapter { } //鉴权 this.authorize(token, wsClient, wsReq); - + this.connectEvent(core, wsClient); wsClient.on('error', (err) => this.logger.log('[OneBot] [WebSocket Server] Client Error:', err.message)); - wsClient.on('message', (message) => { this.handleMessage(wsClient, message).then().catch(this.logger.logError); }); @@ -62,6 +63,14 @@ export class OB11PassiveWebSocketAdapter implements IOB11NetworkAdapter { }); }).on('error', (err) => this.logger.log('[OneBot] [WebSocket Server] Server Error:', err.message)); } + + connectEvent(core: NapCatCore, wsClient: WebSocket) { + try { + this.checkStateAndReply(new OB11LifeCycleEvent(core, LifeCycleSubType.CONNECT), wsClient); + } catch (e) { + this.logger.logError('[OneBot] [WebSocket Server] 发送生命周期失败', e); + } + } onEvent(event: T) { this.wsClientsMutex.runExclusive(async () => { @@ -82,7 +91,7 @@ export class OB11PassiveWebSocketAdapter implements IOB11NetworkAdapter { } const addressInfo = this.wsServer.address(); this.logger.log('[OneBot] [WebSocket Server] Server Started', typeof (addressInfo) === 'string' ? addressInfo : addressInfo?.address + ':' + addressInfo?.port); - + this.isOpen = true; this.registerHeartBeat(); } diff --git a/src/webui/ui/NapCat.ts b/src/webui/ui/NapCat.ts index 39cb01a78..918b8571b 100644 --- a/src/webui/ui/NapCat.ts +++ b/src/webui/ui/NapCat.ts @@ -30,7 +30,7 @@ async function onSettingWindowCreated(view: Element) { SettingItem( 'Napcat', undefined, - SettingButton('V2.0.7', 'napcat-update-button', 'secondary'), + SettingButton('V2.0.8', 'napcat-update-button', 'secondary'), ), ]), SettingList([ diff --git a/static/assets/renderer.js b/static/assets/renderer.js index f70ec8b16..a7f46311f 100644 --- a/static/assets/renderer.js +++ b/static/assets/renderer.js @@ -164,7 +164,7 @@ async function onSettingWindowCreated(view) { SettingItem( 'Napcat', void 0, - SettingButton("V2.0.7", "napcat-update-button", "secondary") + SettingButton("V2.0.8", "napcat-update-button", "secondary") ) ]), SettingList([