From ed9cd2fe3832ba631c4d3519c192dc9cace7b9ab 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: Tue, 12 Nov 2024 18:37:44 +0800 Subject: [PATCH 01/11] fix: #513 --- src/core/listeners/NodeIKernelMsgListener.ts | 4 ++-- src/onebot/event/notice/BotOfflineEvent.ts | 16 ++++++++++++++++ src/onebot/index.ts | 7 ++++++- 3 files changed, 24 insertions(+), 3 deletions(-) create mode 100644 src/onebot/event/notice/BotOfflineEvent.ts diff --git a/src/core/listeners/NodeIKernelMsgListener.ts b/src/core/listeners/NodeIKernelMsgListener.ts index 08636920..26739f4c 100644 --- a/src/core/listeners/NodeIKernelMsgListener.ts +++ b/src/core/listeners/NodeIKernelMsgListener.ts @@ -1,4 +1,4 @@ -import { ChatType, RawMessage } from '@/core/entities'; +import { ChatType, KickedOffLineInfo, RawMessage } from '@/core/entities'; import { CommonFileInfo } from '@/core'; export interface OnRichMediaDownloadCompleteParams { @@ -212,7 +212,7 @@ export class NodeIKernelMsgListener { } - onKickedOffLine(kickedInfo: unknown) { + onKickedOffLine(kickedInfo: KickedOffLineInfo) { } diff --git a/src/onebot/event/notice/BotOfflineEvent.ts b/src/onebot/event/notice/BotOfflineEvent.ts new file mode 100644 index 00000000..6718a561 --- /dev/null +++ b/src/onebot/event/notice/BotOfflineEvent.ts @@ -0,0 +1,16 @@ +import { OB11BaseNoticeEvent } from './OB11BaseNoticeEvent'; +import { NapCatCore } from '@/core'; + +export class BotOfflineEvent extends OB11BaseNoticeEvent { + notice_type = 'bot_offline'; + user_id: number; + tag: string = 'BotOfflineEvent'; + message: string = 'BotOfflineEvent'; + + public constructor(core: NapCatCore, tag: string, message: string) { + super(core); + this.user_id = +core.selfInfo.uin; + this.tag = tag; + this.message = message; + } +} diff --git a/src/onebot/index.ts b/src/onebot/index.ts index ecc17613..e66faa84 100644 --- a/src/onebot/index.ts +++ b/src/onebot/index.ts @@ -47,6 +47,7 @@ import { LRUCache } from '@/common/lru-cache'; import { NodeIKernelRecentContactListener } from '@/core/listeners/NodeIKernelRecentContactListener'; import { Native } from '@/native'; import { decodeMessage, decodeRecallGroup } from '@/core/packet/proto/old/Message'; +import { BotOfflineEvent } from './event/notice/BotOfflineEvent'; //OneBot实现类 export class NapCatOneBot11Adapter { @@ -343,7 +344,11 @@ export class NapCatOneBot11Adapter { } } }; - + msgListener.onKickedOffLine = async (kick) => { + let event = new BotOfflineEvent(this.core, kick.tipsTitle, kick.tipsDesc); + this.networkManager.emitEvent(event) + .catch(e => this.context.logger.logError.bind(this.context.logger)('处理Bot掉线失败', e)); + } this.context.session.getMsgService().addKernelMsgListener( proxiedListenerOf(msgListener, this.context.logger), ); From 787685c9372eb6e3a823feffe13f7a0fd828b869 Mon Sep 17 00:00:00 2001 From: Mlikiowa Date: Tue, 12 Nov 2024 10:45:11 +0000 Subject: [PATCH 02/11] release: v3.6.13 --- manifest.json | 2 +- package.json | 2 +- src/common/version.ts | 2 +- static/assets/renderer.js | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/manifest.json b/manifest.json index 9531deae..56e9c4b0 100644 --- a/manifest.json +++ b/manifest.json @@ -4,7 +4,7 @@ "name": "NapCatQQ", "slug": "NapCat.Framework", "description": "高性能的 OneBot 11 协议实现", - "version": "3.6.12", + "version": "3.6.13", "icon": "./logo.png", "authors": [ { diff --git a/package.json b/package.json index 2fcae1c7..fce62018 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "napcat", "private": true, "type": "module", - "version": "3.6.12", + "version": "3.6.13", "scripts": { "build:framework": "vite build --mode framework", "build:shell": "vite build --mode shell", diff --git a/src/common/version.ts b/src/common/version.ts index 41f7c13d..4ceed873 100644 --- a/src/common/version.ts +++ b/src/common/version.ts @@ -1 +1 @@ -export const napCatVersion = '3.6.12'; +export const napCatVersion = '3.6.13'; diff --git a/static/assets/renderer.js b/static/assets/renderer.js index 823be729..82fb7bf7 100644 --- a/static/assets/renderer.js +++ b/static/assets/renderer.js @@ -164,7 +164,7 @@ async function onSettingWindowCreated(view) { SettingItem( 'Napcat', void 0, - SettingButton("V3.6.12", "napcat-update-button", "secondary") + SettingButton("V3.6.13", "napcat-update-button", "secondary") ) ]), SettingList([ From 4f89f184b8311b1af06398771424fc25d7d8c4e7 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: Wed, 13 Nov 2024 12:19:18 +0800 Subject: [PATCH 03/11] refactor: package json --- package.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index fce62018..40e429cc 100644 --- a/package.json +++ b/package.json @@ -45,7 +45,8 @@ "typescript-eslint": "^8.13.0", "vite": "^5.2.6", "vite-plugin-cp": "^4.0.8", - "vite-tsconfig-paths": "^5.1.0" + "vite-tsconfig-paths": "^5.1.0", + "winston": "^3.17.0" }, "dependencies": { "express": "^5.0.0", From 3e1f566699114eb0e4335bcc2ca85111e9f595ce 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: Wed, 13 Nov 2024 12:26:23 +0800 Subject: [PATCH 04/11] =?UTF-8?q?feat:=20=E5=BC=82=E5=B8=B8=E5=A4=84?= =?UTF-8?q?=E7=90=86=E4=B8=8Elog4js=E6=9B=BF=E6=8D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/common/log.ts | 106 ++++++++++++++++++++-------------------- src/framework/napcat.ts | 8 +++ src/shell/napcat.ts | 9 +++- vite.config.ts | 2 +- 4 files changed, 68 insertions(+), 57 deletions(-) diff --git a/src/common/log.ts b/src/common/log.ts index e836dfe7..69ae9afb 100644 --- a/src/common/log.ts +++ b/src/common/log.ts @@ -1,4 +1,4 @@ -import log4js, { Configuration } from 'log4js'; +import winston, { format, transports } from 'winston'; import { truncateString } from '@/common/helper'; import path from 'node:path'; import chalk from 'chalk'; @@ -27,76 +27,78 @@ function getFormattedTimestamp() { export class LogWrapper { fileLogEnabled = true; consoleLogEnabled = true; - logConfig: Configuration; - loggerConsole: log4js.Logger; - loggerFile: log4js.Logger; - loggerDefault: log4js.Logger; - // eslint-disable-next-line no-control-regex - colorEscape = /\x1B[@-_][0-?]*[ -/]*[@-~]/g; + logger: winston.Logger; constructor(logDir: string) { const filename = `${getFormattedTimestamp()}.log`; const logPath = path.join(logDir, filename); - this.logConfig = { - appenders: { - FileAppender: { // 输出到文件的appender - type: 'file', - filename: logPath, // 指定日志文件的位置和文件名 - maxLogSize: 10485760, // 日志文件的最大大小(单位:字节),这里设置为10MB - layout: { - type: 'pattern', - pattern: '%d{yyyy-MM-dd hh:mm:ss} [%p] %X{userInfo} | %m', - }, - }, - ConsoleAppender: { // 输出到控制台的appender - type: 'console', - layout: { - type: 'pattern', - pattern: `%d{yyyy-MM-dd hh:mm:ss} [%[%p%]] ${chalk.magenta('%X{userInfo}')} | %m`, - }, - }, - }, - categories: { - default: { appenders: ['FileAppender', 'ConsoleAppender'], level: 'debug' }, // 默认情况下同时输出到文件和控制台 - file: { appenders: ['FileAppender'], level: 'debug' }, - console: { appenders: ['ConsoleAppender'], level: 'debug' }, - }, - }; - log4js.configure(this.logConfig); - this.loggerConsole = log4js.getLogger('console'); - this.loggerFile = log4js.getLogger('file'); - this.loggerDefault = log4js.getLogger('default'); + + this.logger = winston.createLogger({ + level: 'debug', + format: format.combine( + format.timestamp({ format: 'YYYY-MM-DD HH:mm:ss' }), + format.printf(({ timestamp, level, message, ...meta }) => { + const userInfo = meta.userInfo ? `${meta.userInfo} | ` : ''; + return `${timestamp} [${level}] ${userInfo}${message}`; + }) + ), + transports: [ + new transports.File({ filename: logPath, level: 'debug' }), + new transports.Console({ + format: format.combine( + format.colorize(), + format.printf(({ timestamp, level, message, ...meta }) => { + const userInfo = meta.userInfo ? `${chalk.magenta(meta.userInfo)} | ` : ''; + return `${timestamp} [${level}] ${userInfo}${message}`; + }) + ) + }) + ] + }); + this.setLogSelfInfo({ nick: '', uin: '', uid: '' }); } setFileAndConsoleLogLevel(fileLogLevel: LogLevel, consoleLogLevel: LogLevel) { - this.logConfig.categories.file.level = fileLogLevel; - this.logConfig.categories.console.level = consoleLogLevel; - log4js.configure(this.logConfig); + this.logger.transports.forEach((transport) => { + if (transport instanceof transports.File) { + transport.level = fileLogLevel; + } else if (transport instanceof transports.Console) { + transport.level = consoleLogLevel; + } + }); } setLogSelfInfo(selfInfo: { nick: string, uin: string, uid: string }) { const userInfo = `${selfInfo.nick}(${selfInfo.uin})`; - this.loggerConsole.addContext('userInfo', userInfo); - this.loggerFile.addContext('userInfo', userInfo); - this.loggerDefault.addContext('userInfo', userInfo); + this.logger.defaultMeta = { userInfo }; } setFileLogEnabled(isEnabled: boolean) { this.fileLogEnabled = isEnabled; + this.logger.transports.forEach((transport) => { + if (transport instanceof transports.File) { + transport.silent = !isEnabled; + } + }); } setConsoleLogEnabled(isEnabled: boolean) { this.consoleLogEnabled = isEnabled; + this.logger.transports.forEach((transport) => { + if (transport instanceof transports.Console) { + transport.silent = !isEnabled; + } + }); } formatMsg(msg: any[]) { let logMsg = ''; for (const msgItem of msg) { - if (msgItem instanceof Error) { // 判断是否是错误 + if (msgItem instanceof Error) { logMsg += msgItem.stack + ' '; continue; - } else if (typeof msgItem === 'object') { // 判断是否是对象 + } else if (typeof msgItem === 'object') { const obj = JSON.parse(JSON.stringify(msgItem, null, 2)); logMsg += JSON.stringify(truncateString(obj)) + ' '; continue; @@ -106,18 +108,17 @@ export class LogWrapper { return logMsg; } - _log(level: LogLevel, ...args: any[]) { + const message = this.formatMsg(args); if (this.consoleLogEnabled) { - this.loggerConsole[level](this.formatMsg(args)); + this.logger.log(level, message); } if (this.fileLogEnabled) { - this.loggerFile[level](this.formatMsg(args).replace(this.colorEscape, '')); + this.logger.log(level, message.replace(/\x1B[@-_][0-?]*[ -/]*[@-~]/g, '')); } } log(...args: any[]) { - // info 等级 this._log(LogLevel.INFO, ...args); } @@ -140,7 +141,6 @@ export class LogWrapper { logMessage(msg: RawMessage, selfInfo: SelfInfo) { const isSelfSent = msg.senderUin === selfInfo.uin; - // Intercept grey tip if (msg.elements[0]?.elementType === ElementType.GreyTip) { return; } @@ -167,12 +167,10 @@ export function rawMessageToText(msg: RawMessage, recursiveLevel = 0): string { } } else if (msg.chatType == ChatType.KCHATTYPEDATALINE) { tokens.push('移动设备'); - } else /* temp */ { + } else { tokens.push(`临时消息 (${msg.peerUin})`); } - // message content - function msgElementToText(element: MessageElement) { if (element.textElement) { if (element.textElement.atType === AtType.notAt) { @@ -190,7 +188,7 @@ export function rawMessageToText(msg: RawMessage, recursiveLevel = 0): string { record => element.replyElement!.sourceMsgIdInRecords === record.msgId, ); return `[回复消息 ${recordMsgOrNull && - recordMsgOrNull.peerUin != '284840486' && recordMsgOrNull.peerUin != '1094950020'// 非转发消息; 否则定位不到 + recordMsgOrNull.peerUin != '284840486' && recordMsgOrNull.peerUin != '1094950020' ? rawMessageToText(recordMsgOrNull, recursiveLevel + 1) : `未找到消息记录 (MsgId = ${element.replyElement.sourceMsgIdInRecords})` @@ -245,4 +243,4 @@ export function rawMessageToText(msg: RawMessage, recursiveLevel = 0): string { } return tokens.join(' '); -} +} \ No newline at end of file diff --git a/src/framework/napcat.ts b/src/framework/napcat.ts index 60607d0f..9c947594 100644 --- a/src/framework/napcat.ts +++ b/src/framework/napcat.ts @@ -23,6 +23,14 @@ export async function NCoreInitFramework( ) { //在进入本层前是否登录未进行判断 console.log('NapCat Framework App Loading...'); + + process.on('uncaughtException', (err) => { + console.log('[NapCat] [Error] Unhandled Exception:', err.message); + }); + process.on('unhandledRejection', (reason, promise) => { + console.log('[NapCat] [Error] unhandledRejection:', reason); + }); + const pathWrapper = new NapCatPathWrapper(); const logger = new LogWrapper(pathWrapper.logsPath); const basicInfoWrapper = new QQBasicInfoWrapper({ logger }); diff --git a/src/shell/napcat.ts b/src/shell/napcat.ts index cc8890de..f0d80eac 100644 --- a/src/shell/napcat.ts +++ b/src/shell/napcat.ts @@ -36,7 +36,12 @@ const cmdOptions = program.opts(); // NapCat Shell App ES 入口文件 export async function NCoreInitShell() { console.log('NapCat Shell App Loading...'); - + process.on('uncaughtException', (err) => { + console.log('[NapCat] [Error] Unhandled Exception:', err.message); + }); + process.on('unhandledRejection', (reason, promise) => { + console.log('[NapCat] [Error] unhandledRejection:', reason); + }); const pathWrapper = new NapCatPathWrapper(); const logger = new LogWrapper(pathWrapper.logsPath); const basicInfoWrapper = new QQBasicInfoWrapper({ logger }); @@ -227,7 +232,7 @@ export async function NCoreInitShell() { logger.log(`可用于快速登录的 QQ:\n${historyLoginList .map((u, index) => `${index + 1}. ${u.uin} ${u.nickName}`) .join('\n') - }`); + }`); } loginService.getQRCodePicture(); } diff --git a/vite.config.ts b/vite.config.ts index b74c214c..aa4c0df8 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -4,7 +4,7 @@ import { resolve } from 'path'; import nodeResolve from '@rollup/plugin-node-resolve'; import { builtinModules } from 'module'; //依赖排除 -const external = ['silk-wasm', 'ws', 'express', 'fluent-ffmpeg', 'log4js', 'qrcode-terminal']; +const external = ['silk-wasm', 'ws', 'express', 'fluent-ffmpeg', 'qrcode-terminal']; const nodeModules = [...builtinModules, builtinModules.map(m => `node:${m}`)].flat(); function genCpModule(module: string) { return { src: `./node_modules/${module}`, dest: `dist/node_modules/${module}`, flatten: false }; From 2c398a6832dd3a5a1cebf0ee98ad7f3c7a7bf663 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: Wed, 13 Nov 2024 12:29:17 +0800 Subject: [PATCH 05/11] fix: error --- package.json | 1 - src/common/log.ts | 9 +++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 40e429cc..e1cd5e45 100644 --- a/package.json +++ b/package.json @@ -51,7 +51,6 @@ "dependencies": { "express": "^5.0.0", "fluent-ffmpeg": "^2.1.2", - "log4js": "^6.9.1", "qrcode-terminal": "^0.12.0", "silk-wasm": "^3.6.1", "ws": "^8.18.0" diff --git a/src/common/log.ts b/src/common/log.ts index 69ae9afb..159d98d8 100644 --- a/src/common/log.ts +++ b/src/common/log.ts @@ -110,14 +110,15 @@ export class LogWrapper { _log(level: LogLevel, ...args: any[]) { const message = this.formatMsg(args); - if (this.consoleLogEnabled) { + if (this.consoleLogEnabled && this.fileLogEnabled) { this.logger.log(level, message); - } - if (this.fileLogEnabled) { + } else if (this.consoleLogEnabled) { + this.logger.log(level, message); + } else if (this.fileLogEnabled) { this.logger.log(level, message.replace(/\x1B[@-_][0-?]*[ -/]*[@-~]/g, '')); } } - + log(...args: any[]) { this._log(LogLevel.INFO, ...args); } From 05291f34fb58238ac0221794c6fbb5a3f0e28867 Mon Sep 17 00:00:00 2001 From: Mlikiowa Date: Wed, 13 Nov 2024 04:31:12 +0000 Subject: [PATCH 06/11] release: v3.6.14 --- manifest.json | 2 +- package.json | 2 +- src/common/version.ts | 2 +- static/assets/renderer.js | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/manifest.json b/manifest.json index 56e9c4b0..4c21ae4b 100644 --- a/manifest.json +++ b/manifest.json @@ -4,7 +4,7 @@ "name": "NapCatQQ", "slug": "NapCat.Framework", "description": "高性能的 OneBot 11 协议实现", - "version": "3.6.13", + "version": "3.6.14", "icon": "./logo.png", "authors": [ { diff --git a/package.json b/package.json index e1cd5e45..0430afc1 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "napcat", "private": true, "type": "module", - "version": "3.6.13", + "version": "3.6.14", "scripts": { "build:framework": "vite build --mode framework", "build:shell": "vite build --mode shell", diff --git a/src/common/version.ts b/src/common/version.ts index 4ceed873..300829cf 100644 --- a/src/common/version.ts +++ b/src/common/version.ts @@ -1 +1 @@ -export const napCatVersion = '3.6.13'; +export const napCatVersion = '3.6.14'; diff --git a/static/assets/renderer.js b/static/assets/renderer.js index 82fb7bf7..5f129a20 100644 --- a/static/assets/renderer.js +++ b/static/assets/renderer.js @@ -164,7 +164,7 @@ async function onSettingWindowCreated(view) { SettingItem( 'Napcat', void 0, - SettingButton("V3.6.13", "napcat-update-button", "secondary") + SettingButton("V3.6.14", "napcat-update-button", "secondary") ) ]), SettingList([ From aa9663d85eecadb3f3c5fac68cca0aaf5515801a 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: Wed, 13 Nov 2024 13:16:09 +0800 Subject: [PATCH 07/11] =?UTF-8?q?fix:=20=E7=A7=BB=E9=99=A4chalk?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 1 - src/common/log.ts | 67 +++++++++++++++++++++++++++++++++++------------ 2 files changed, 50 insertions(+), 18 deletions(-) diff --git a/package.json b/package.json index 0430afc1..794ec08a 100644 --- a/package.json +++ b/package.json @@ -30,7 +30,6 @@ "@typescript-eslint/parser": "^8.3.0", "ajv": "^8.13.0", "async-mutex": "^0.5.0", - "chalk": "^5.3.0", "commander": "^12.1.0", "cors": "^2.8.5", "eslint": "^9.14.0", diff --git a/src/common/log.ts b/src/common/log.ts index 159d98d8..50e04173 100644 --- a/src/common/log.ts +++ b/src/common/log.ts @@ -1,7 +1,7 @@ import winston, { format, transports } from 'winston'; import { truncateString } from '@/common/helper'; import path from 'node:path'; -import chalk from 'chalk'; +import fs from 'node:fs'; import { AtType, ChatType, ElementType, MessageElement, RawMessage, SelfInfo } from '@/core'; export enum LogLevel { @@ -43,12 +43,17 @@ export class LogWrapper { }) ), transports: [ - new transports.File({ filename: logPath, level: 'debug' }), + new transports.File({ + filename: logPath, + level: 'debug', + maxsize: 5 * 1024 * 1024, // 5MB + maxFiles: 5 + }), new transports.Console({ format: format.combine( format.colorize(), format.printf(({ timestamp, level, message, ...meta }) => { - const userInfo = meta.userInfo ? `${chalk.magenta(meta.userInfo)} | ` : ''; + const userInfo = meta.userInfo ? `${meta.userInfo} | ` : ''; return `${timestamp} [${level}] ${userInfo}${message}`; }) ) @@ -57,6 +62,39 @@ export class LogWrapper { }); this.setLogSelfInfo({ nick: '', uin: '', uid: '' }); + this.cleanOldLogs(logDir); + } + + cleanOldLogs(logDir: string) { + const oneWeekAgo = Date.now() - 7 * 24 * 60 * 60 * 1000; + fs.readdir(logDir, (err, files) => { + if (err) { + this.logger.error('Failed to read log directory', err); + return; + } + files.forEach(file => { + const filePath = path.join(logDir, file); + fs.stat(filePath, (err, stats) => { + if (err) { + this.logger.error('Failed to get file stats', err); + return; + } + if (stats.mtime.getTime() < oneWeekAgo) { + fs.unlink(filePath, err => { + if (err) { + if (err.code === 'ENOENT') { + this.logger.warn(`File already deleted: ${file}`); + } else { + this.logger.error('Failed to delete old log file', err); + } + } else { + this.logger.info(`Deleted old log file: ${file}`); + } + }); + } + }); + }); + }); } setFileAndConsoleLogLevel(fileLogLevel: LogLevel, consoleLogLevel: LogLevel) { @@ -93,19 +131,14 @@ export class LogWrapper { } formatMsg(msg: any[]) { - let logMsg = ''; - for (const msgItem of msg) { + return msg.map(msgItem => { if (msgItem instanceof Error) { - logMsg += msgItem.stack + ' '; - continue; + return msgItem.stack; } else if (typeof msgItem === 'object') { - const obj = JSON.parse(JSON.stringify(msgItem, null, 2)); - logMsg += JSON.stringify(truncateString(obj)) + ' '; - continue; + return JSON.stringify(truncateString(JSON.parse(JSON.stringify(msgItem, null, 2)))); } - logMsg += msgItem + ' '; - } - return logMsg; + return msgItem; + }).join(' '); } _log(level: LogLevel, ...args: any[]) { @@ -118,7 +151,7 @@ export class LogWrapper { this.logger.log(level, message.replace(/\x1B[@-_][0-?]*[ -/]*[@-~]/g, '')); } } - + log(...args: any[]) { this._log(LogLevel.INFO, ...args); } @@ -146,7 +179,7 @@ export class LogWrapper { return; } - this.log(`${isSelfSent ? '发送 ->' : '接收 <-' } ${rawMessageToText(msg)}`); + this.log(`${isSelfSent ? '发送 ->' : '接收 <-'} ${rawMessageToText(msg)}`); } } @@ -189,11 +222,11 @@ export function rawMessageToText(msg: RawMessage, recursiveLevel = 0): string { record => element.replyElement!.sourceMsgIdInRecords === record.msgId, ); return `[回复消息 ${recordMsgOrNull && - recordMsgOrNull.peerUin != '284840486' && recordMsgOrNull.peerUin != '1094950020' + recordMsgOrNull.peerUin != '284840486' && recordMsgOrNull.peerUin != '1094950020' ? rawMessageToText(recordMsgOrNull, recursiveLevel + 1) : `未找到消息记录 (MsgId = ${element.replyElement.sourceMsgIdInRecords})` - }]`; + }]`; } if (element.picElement) { From 704ac11cbb1b9aa886cc7bdbc1a4abe9825b63e5 Mon Sep 17 00:00:00 2001 From: Mlikiowa Date: Wed, 13 Nov 2024 05:16:36 +0000 Subject: [PATCH 08/11] release: v3.6.15 --- manifest.json | 2 +- package.json | 2 +- src/common/version.ts | 2 +- static/assets/renderer.js | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/manifest.json b/manifest.json index 4c21ae4b..e4e91da2 100644 --- a/manifest.json +++ b/manifest.json @@ -4,7 +4,7 @@ "name": "NapCatQQ", "slug": "NapCat.Framework", "description": "高性能的 OneBot 11 协议实现", - "version": "3.6.14", + "version": "3.6.15", "icon": "./logo.png", "authors": [ { diff --git a/package.json b/package.json index 794ec08a..82363820 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "napcat", "private": true, "type": "module", - "version": "3.6.14", + "version": "3.6.15", "scripts": { "build:framework": "vite build --mode framework", "build:shell": "vite build --mode shell", diff --git a/src/common/version.ts b/src/common/version.ts index 300829cf..1245d525 100644 --- a/src/common/version.ts +++ b/src/common/version.ts @@ -1 +1 @@ -export const napCatVersion = '3.6.14'; +export const napCatVersion = '3.6.15'; diff --git a/static/assets/renderer.js b/static/assets/renderer.js index 5f129a20..3e95f73a 100644 --- a/static/assets/renderer.js +++ b/static/assets/renderer.js @@ -164,7 +164,7 @@ async function onSettingWindowCreated(view) { SettingItem( 'Napcat', void 0, - SettingButton("V3.6.14", "napcat-update-button", "secondary") + SettingButton("V3.6.15", "napcat-update-button", "secondary") ) ]), SettingList([ From b5ef6ce6b0a78d28b37322d86ff2f6e7916833f1 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: Wed, 13 Nov 2024 15:54:31 +0800 Subject: [PATCH 09/11] =?UTF-8?q?feat:=20mface=20key=20=E6=89=A9=E5=B1=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/onebot/api/msg.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/onebot/api/msg.ts b/src/onebot/api/msg.ts index bce77da1..f676a774 100644 --- a/src/onebot/api/msg.ts +++ b/src/onebot/api/msg.ts @@ -190,6 +190,7 @@ export class OneBotMsgApi { file_id: FileNapCatOneBotUUID.encode(peer, msg.msgId, elementWrapper.elementId, "", "." + _.key + ".jpg"), path: url, url: url, + key: _.key, file_unique: _.key }, }; From 7d9d7226ec5defdcf2880f5c3a531ff6f8baf87d Mon Sep 17 00:00:00 2001 From: Mlikiowa Date: Wed, 13 Nov 2024 07:55:21 +0000 Subject: [PATCH 10/11] release: v3.6.16 --- manifest.json | 2 +- package.json | 2 +- src/common/version.ts | 2 +- static/assets/renderer.js | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/manifest.json b/manifest.json index e4e91da2..fc3ea24d 100644 --- a/manifest.json +++ b/manifest.json @@ -4,7 +4,7 @@ "name": "NapCatQQ", "slug": "NapCat.Framework", "description": "高性能的 OneBot 11 协议实现", - "version": "3.6.15", + "version": "3.6.16", "icon": "./logo.png", "authors": [ { diff --git a/package.json b/package.json index 82363820..1d41f172 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "napcat", "private": true, "type": "module", - "version": "3.6.15", + "version": "3.6.16", "scripts": { "build:framework": "vite build --mode framework", "build:shell": "vite build --mode shell", diff --git a/src/common/version.ts b/src/common/version.ts index 1245d525..8c28d84f 100644 --- a/src/common/version.ts +++ b/src/common/version.ts @@ -1 +1 @@ -export const napCatVersion = '3.6.15'; +export const napCatVersion = '3.6.16'; diff --git a/static/assets/renderer.js b/static/assets/renderer.js index 3e95f73a..a6a2574c 100644 --- a/static/assets/renderer.js +++ b/static/assets/renderer.js @@ -164,7 +164,7 @@ async function onSettingWindowCreated(view) { SettingItem( 'Napcat', void 0, - SettingButton("V3.6.15", "napcat-update-button", "secondary") + SettingButton("V3.6.16", "napcat-update-button", "secondary") ) ]), SettingList([ From 0802c35dc193d6503250018694bcd0a8dbaaa3bd 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: Wed, 13 Nov 2024 15:56:17 +0800 Subject: [PATCH 11/11] feat: mface emoji_id --- src/onebot/api/msg.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/onebot/api/msg.ts b/src/onebot/api/msg.ts index f676a774..1cfdb4a7 100644 --- a/src/onebot/api/msg.ts +++ b/src/onebot/api/msg.ts @@ -191,6 +191,7 @@ export class OneBotMsgApi { path: url, url: url, key: _.key, + emoji_id: _.emojiId, file_unique: _.key }, };