This commit is contained in:
手瓜一十雪 2024-08-11 00:00:42 +08:00
commit dacb56bc20
6 changed files with 13 additions and 100 deletions

View File

@ -2,8 +2,6 @@ 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',
@ -25,9 +23,6 @@ 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;
@ -142,89 +137,4 @@ 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);
}
}

View File

@ -1,4 +1,4 @@
import { IOB11NetworkAdapter } from '@/onebot/network/index';
import { IOB11NetworkAdapter, OB11EmitEventContent } from '@/onebot/network/index';
import BaseAction from '@/onebot/action/BaseAction';
import { OB11BaseEvent } from '@/onebot/event/OB11BaseEvent';
import { createHmac } from 'crypto';
@ -33,7 +33,7 @@ export class OB11ActiveHttpAdapter implements IOB11NetworkAdapter {
// Passive http adapter does not need to register actions
}
onEvent<T extends OB11BaseEvent>(event: T) {
onEvent<T extends OB11EmitEventContent>(event: T) {
const headers: Record<string, string> = {
'Content-Type': 'application/json',
'x-self-id': this.coreContext.selfInfo.uin,

View File

@ -1,4 +1,4 @@
import { IOB11NetworkAdapter } from '@/onebot/network/index';
import { IOB11NetworkAdapter, OB11EmitEventContent } from '@/onebot/network/index';
import { WebSocket as NodeWebSocket } from 'ws';
import BaseAction from '@/onebot/action/BaseAction';
@ -28,7 +28,7 @@ export class OB11ActiveWebSocketAdapter implements IOB11NetworkAdapter {
this.actionMap.set(action.actionName, action);
}
onEvent<T extends OB11BaseEvent>(event: T) {
onEvent<T extends OB11EmitEventContent>(event: T) {
if (this.connection) {
// this.connection.send(JSON.stringify(event));
// TODO: wrap the event, and send the wrapped to the server.

View File

@ -1,10 +1,13 @@
import BaseAction from '@/onebot/action/BaseAction';
import { OB11BaseEvent } from '@/onebot/event/OB11BaseEvent';
import { OB11Message } from '@/onebot';
export type OB11EmitEventContent = OB11BaseEvent | OB11Message;
export interface IOB11NetworkAdapter {
registerAction<T extends BaseAction<P, R>, P, R>(action: T): void;
onEvent<T extends OB11BaseEvent>(event: T): void;
onEvent<T extends OB11EmitEventContent>(event: T): void;
open(): void | Promise<void>;
@ -18,7 +21,7 @@ export class OB11NetworkManager {
return this.adapters;
}
async emitEvent(event: OB11BaseEvent) {
async emitEvent(event: OB11EmitEventContent) {
// Mlikiowa V2.0.0 Refactor Todo
return Promise.all(this.adapters.map(adapter => adapter.onEvent(event)));
}

View File

@ -1,4 +1,4 @@
import { IOB11NetworkAdapter } from './index';
import { IOB11NetworkAdapter, OB11EmitEventContent } from './index';
import { OB11BaseEvent } from '@/onebot/event/OB11BaseEvent';
import BaseAction from '@/onebot/action/BaseAction';
import express, { Express, Request, Response } from 'express';
@ -26,7 +26,7 @@ export class OB11PassiveHttpAdapter implements IOB11NetworkAdapter {
//空心跳
}
onEvent<T extends OB11BaseEvent>(event: T) {
onEvent<T extends OB11EmitEventContent>(event: T) {
// 事件处理逻辑可以在这里实现
}

View File

@ -1,4 +1,4 @@
import { IOB11NetworkAdapter } from './index';
import { IOB11NetworkAdapter, OB11EmitEventContent } from './index';
import { OB11BaseEvent } from '@/onebot/event/OB11BaseEvent';
import BaseAction from '@/onebot/action/BaseAction';
import { WebSocket, WebSocketServer } from 'ws';
@ -54,7 +54,7 @@ export class OB11PassiveWebSocketAdapter implements IOB11NetworkAdapter {
//WS正向心跳
}
onEvent<T extends OB11BaseEvent>(event: T) {
onEvent<T extends OB11EmitEventContent>(event: T) {
this.wsClientsMutex.runExclusive(async () => {
this.wsClients.forEach((wsClient) => {
// wsClient.send(JSON.stringify(event));