diff --git a/src/common/utils/log.ts b/src/common/utils/log.ts index b90b0e3d..afde46cb 100644 --- a/src/common/utils/log.ts +++ b/src/common/utils/log.ts @@ -2,6 +2,8 @@ import log4js, { Configuration } from 'log4js'; import { truncateString } from '@/common/utils/helper'; import path from 'node:path'; import chalk from 'chalk'; +import { OB11Message } from '@/onebot'; +import { Group, NapCatCore } from '@/core'; export enum LogLevel { DEBUG = 'debug', @@ -23,6 +25,9 @@ function getFormattedTimestamp() { return `${year}-${month}-${day}_${hours}-${minutes}-${seconds}.${milliseconds}`; } +const spSegColor = chalk.blue;// for special segment +const spColor = chalk.cyan;// for special + export class LogWrapper { fileLogEnabled = true; consoleLogEnabled = true; @@ -137,4 +142,89 @@ export class LogWrapper { logFatal(...args: any[]) { this._log(LogLevel.FATAL, ...args); } + + async logMessage(ob11Message: OB11Message, core: NapCatCore) { + const isSelfSent = ob11Message.sender.user_id.toString() === core.selfInfo.uin; + let prefix = ''; + let group: Group | undefined; + if (isSelfSent) { + prefix = '发送消息 '; + if (ob11Message.message_type === 'private') { + prefix += '给私聊 '; + prefix += `${ob11Message.target_id}`; + } + else { + prefix += '给群聊 '; + } + } + if (ob11Message.message_type === 'group') { + if (ob11Message.group_id == 284840486) { + group = await core.ApiContext.GroupApi.getGroup(ob11Message.group_id.toString()); + prefix += '转发消息[外部来源] '; + } else { + group = await core.ApiContext.GroupApi.getGroup(ob11Message.group_id!.toString()); + prefix += `群[${group?.groupName}(${ob11Message.group_id})] `; + } + } + let msgChain = ''; + if (Array.isArray(ob11Message.message)) { + const msgParts = []; + for (const segment of ob11Message.message) { + if (segment.type === 'text') { + msgParts.push(segment.data.text); + } + else if (segment.type === 'at') { + const groupMember = await core.ApiContext.GroupApi.getGroupMember(ob11Message.group_id!, segment.data.qq!); + msgParts.push(spSegColor(`[@${groupMember?.cardName || groupMember?.nick}(${segment.data.qq})]`)); + } + else if (segment.type === 'reply') { + msgParts.push(spSegColor(`[回复消息|id:${segment.data.id}]`)); + } + else if (segment.type === 'image') { + msgParts.push(spSegColor(`[图片|${segment.data.url}]`)); + } + else if (segment.type === 'face') { + msgParts.push(spSegColor(`[表情|id:${segment.data.id}]`)); + } + else if (segment.type === 'mface') { + // @ts-expect-error 商城表情 url + msgParts.push(spSegColor(`[商城表情|${segment.data.url}]`)); + } + else if (segment.type === 'record') { + msgParts.push(spSegColor(`[语音|${segment.data.file}]`)); + } + else if (segment.type === 'file') { + msgParts.push(spSegColor(`[文件|${segment.data.file}]`)); + } + else if (segment.type === 'json') { + msgParts.push(spSegColor(`[json|${JSON.stringify(segment.data)}]`)); + } + else if (segment.type === 'markdown') { + msgParts.push(spSegColor(`[markdown|${segment.data.content}]`)); + } + else if (segment.type === 'video') { + msgParts.push(spSegColor(`[视频|${segment.data.url}]`)); + } + else if (segment.type === 'forward') { + msgParts.push(spSegColor(`[转发|${segment.data.id}|消息开始]`)); + segment.data.content.forEach((msg) => { + this.logMessage(msg, core); + }); + msgParts.push(spSegColor(`[转发|${segment.data.id}|消息结束]`)); + } + else { + msgParts.push(spSegColor(`[未实现|${JSON.stringify(segment)}]`)); + } + } + msgChain = msgParts.join(' '); + } + else { + msgChain = ob11Message.message; + } + let msgString = `${prefix}${ob11Message.sender.nickname}(${ob11Message.sender.user_id}): ${msgChain}`; + if (isSelfSent) { + msgString = `${prefix}: ${msgChain}`; + } + this.log(msgString); + } }