mirror of
https://github.com/NapNeko/NapCatQQ.git
synced 2024-11-21 09:36:35 +00:00
refactor: core
This commit is contained in:
parent
dc029a318b
commit
4402fc2d0a
@ -18,3 +18,20 @@ export function isNull(value: any) {
|
||||
export function isNumeric(str: string) {
|
||||
return /^\d+$/.test(str);
|
||||
}
|
||||
|
||||
export function truncateString(obj: any, maxLength = 500) {
|
||||
if (obj !== null && typeof obj === 'object') {
|
||||
Object.keys(obj).forEach(key => {
|
||||
if (typeof obj[key] === 'string') {
|
||||
// 如果是字符串且超过指定长度,则截断
|
||||
if (obj[key].length > maxLength) {
|
||||
obj[key] = obj[key].substring(0, maxLength) + '...';
|
||||
}
|
||||
} else if (typeof obj[key] === 'object') {
|
||||
// 如果是对象或数组,则递归调用
|
||||
truncateString(obj[key], maxLength);
|
||||
}
|
||||
});
|
||||
}
|
||||
return obj;
|
||||
}
|
||||
|
@ -1,4 +1,85 @@
|
||||
import log4js from 'log4js';
|
||||
import { truncateString } from '@/common/utils/helper';
|
||||
import path from 'node:path';
|
||||
|
||||
export enum LogLevel {
|
||||
DEBUG = 'debug',
|
||||
INFO = 'info',
|
||||
WARN = 'warn',
|
||||
ERROR = 'error',
|
||||
FATAL = 'fatal',
|
||||
}
|
||||
|
||||
const logPath = path.join(path.resolve(__dirname), 'logs', 'napcat.log');
|
||||
|
||||
function genLogConfig(fileLogLevel: LogLevel, consoleLogLevel: LogLevel) {
|
||||
return {
|
||||
appenders: {
|
||||
fileAppender: { // 输出到文件的appender
|
||||
type: 'file',
|
||||
filename: logPath, // 指定日志文件的位置和文件名
|
||||
maxLogSize: 10485760, // 日志文件的最大大小(单位:字节),这里设置为10MB
|
||||
},
|
||||
consoleAppender: { // 输出到控制台的appender
|
||||
type: 'console'
|
||||
}
|
||||
},
|
||||
categories: {
|
||||
default: { appenders: ['fileAppender', 'consoleAppender'], level: 'info' }, // 默认情况下同时输出到文件和控制台
|
||||
file: { appenders: ['fileAppender'], level: fileLogLevel },
|
||||
console: { appenders: ['consoleAppender'], level: fileLogLevel }
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
export function setLogLevel(fileLogLevel: LogLevel, consoleLogLevel: LogLevel) {
|
||||
log4js.configure(genLogConfig(fileLogLevel, consoleLogLevel));
|
||||
}
|
||||
|
||||
setLogLevel(LogLevel.DEBUG, LogLevel.INFO);
|
||||
|
||||
let fileLogEnabled = true;
|
||||
let consoleLogEnabled = true;
|
||||
export function enableFileLog(enable: boolean) {
|
||||
fileLogEnabled = enable;
|
||||
}
|
||||
export function enableConsoleLog(enable: boolean) {
|
||||
consoleLogEnabled = enable;
|
||||
}
|
||||
|
||||
function formatMsg(msg: any[]){
|
||||
let logMsg = '';
|
||||
for (const msgItem of msg) {
|
||||
// 判断是否是对象
|
||||
if (typeof msgItem === 'object') {
|
||||
const obj = JSON.parse(JSON.stringify(msgItem, null, 2));
|
||||
logMsg += JSON.stringify(truncateString(obj)) + ' ';
|
||||
continue;
|
||||
}
|
||||
logMsg += msgItem + ' ';
|
||||
}
|
||||
return logMsg;
|
||||
}
|
||||
|
||||
function _log(level: LogLevel, ...args: any[]){
|
||||
if (consoleLogEnabled){
|
||||
log4js.getLogger('console')[level](formatMsg(args));
|
||||
}
|
||||
if (fileLogEnabled){
|
||||
log4js.getLogger('file')[level](formatMsg(args));
|
||||
}
|
||||
}
|
||||
|
||||
export function log(...args: any[]) {
|
||||
console.log(...args);
|
||||
// info 等级
|
||||
_log(LogLevel.INFO, ...args);
|
||||
}
|
||||
|
||||
export function logDebug(...args: any[]) {
|
||||
_log(LogLevel.DEBUG, ...args);
|
||||
}
|
||||
|
||||
export function logError(...args: any[]) {
|
||||
_log(LogLevel.ERROR, ...args);
|
||||
}
|
30
src/index.ts
30
src/index.ts
@ -1,26 +1,26 @@
|
||||
import { napCatCore } from '@/core';
|
||||
import { MsgListener } from '@/core/listeners';
|
||||
import { NapCatOnebot11 } from '@/onebot11/main';
|
||||
import { program } from 'commander';
|
||||
import qrcode from 'qrcode-terminal';
|
||||
import * as readline from 'node:readline';
|
||||
import fs from 'fs/promises';
|
||||
import path from 'node:path';
|
||||
import { postLoginStatus } from '@/common/utils/umami';
|
||||
import { checkVersion } from '@/common/utils/version';
|
||||
import { log, logError, LogLevel, setLogLevel } from '@/common/utils/log';
|
||||
import { NapCatOnebot11 } from '@/onebot11/main';
|
||||
|
||||
program
|
||||
.option('-q, --qq <type>', 'QQ号')
|
||||
.parse(process.argv);
|
||||
|
||||
const cmdOptions = program.opts();
|
||||
console.log(process.argv);
|
||||
// console.log(process.argv);
|
||||
setLogLevel(LogLevel.DEBUG, LogLevel.DEBUG);
|
||||
|
||||
checkVersion().then((remoteVersion: string) => {
|
||||
const localVersion = require('./package.json').version;
|
||||
const localVersionList = localVersion.split('.');
|
||||
const remoteVersionList = remoteVersion.split('.');
|
||||
console.log('[NapCat] 当前版本:', localVersion);
|
||||
log('[NapCat] 当前版本:', localVersion);
|
||||
for (const k of [0, 1, 2]) {
|
||||
if (parseInt(remoteVersionList[k]) > parseInt(localVersionList[k])) {
|
||||
console.log('[NapCat] 检测到更新,请前往 https://github.com/NapNeko/NapCatQQ 下载 NapCatQQ V', remoteVersion);
|
||||
@ -29,25 +29,25 @@ checkVersion().then((remoteVersion: string) => {
|
||||
break;
|
||||
}
|
||||
}
|
||||
console.log('[NapCat] 当前已是最新版本');
|
||||
log('[NapCat] 当前已是最新版本');
|
||||
return;
|
||||
}).catch((e) => {
|
||||
console.error('[NapCat] 检测更新失败');
|
||||
logError('[NapCat] 检测更新失败');
|
||||
});
|
||||
new NapCatOnebot11();
|
||||
napCatCore.onLoginSuccess(() => {
|
||||
console.log('login success');
|
||||
log('登录成功!');
|
||||
postLoginStatus();
|
||||
});
|
||||
const showQRCode = (qrCodeData: { url: string, base64: string, buffer: Buffer }) => {
|
||||
console.log('请扫描下面的二维码,然后在手Q上授权登录:');
|
||||
console.log('二维码解码URL:', qrCodeData.url);
|
||||
log('请扫描下面的二维码,然后在手Q上授权登录:');
|
||||
log('二维码解码URL:', qrCodeData.url);
|
||||
const qrcodePath = path.join(__dirname, 'qrcode.png');
|
||||
fs.writeFile(qrcodePath, qrCodeData.buffer).then(() => {
|
||||
console.log('二维码已保存到', qrcodePath);
|
||||
log('二维码已保存到', qrcodePath);
|
||||
});
|
||||
qrcode.generate(qrCodeData.url, { small: true }, (res) => {
|
||||
console.log(res);
|
||||
log('\n' + res);
|
||||
});
|
||||
};
|
||||
const quickLoginQQ = cmdOptions.qq;
|
||||
@ -57,12 +57,14 @@ const quickLoginQQ = cmdOptions.qq;
|
||||
// });
|
||||
if (quickLoginQQ) {
|
||||
console.log('quick login', quickLoginQQ);
|
||||
napCatCore.quickLogin(quickLoginQQ).then().catch((e) => {
|
||||
napCatCore.quickLogin(quickLoginQQ).then(res=>{
|
||||
// log('快速登录结果:', res);
|
||||
}).catch((e) => {
|
||||
console.error(e);
|
||||
napCatCore.qrLogin().then(showQRCode);
|
||||
});
|
||||
} else {
|
||||
console.info('没有 -q 参数指定快速登录的QQ,将使用二维码登录方式');
|
||||
log('没有 -q 参数指定快速登录的QQ,将使用二维码登录方式');
|
||||
napCatCore.qrLogin().then(showQRCode);
|
||||
}
|
||||
|
||||
|
@ -2,10 +2,10 @@ import { ActionName, BaseCheckResult } from './types';
|
||||
import { OB11Response } from './OB11Response';
|
||||
import { OB11Return } from '../types';
|
||||
|
||||
import { log } from '../../common/utils/log';
|
||||
import { log, logError } from '../../common/utils/log';
|
||||
|
||||
class BaseAction<PayloadType, ReturnDataType> {
|
||||
actionName: ActionName;
|
||||
actionName!: ActionName;
|
||||
|
||||
protected async check(payload: PayloadType): Promise<BaseCheckResult> {
|
||||
return {
|
||||
@ -21,8 +21,8 @@ class BaseAction<PayloadType, ReturnDataType> {
|
||||
try {
|
||||
const resData = await this._handle(payload);
|
||||
return OB11Response.ok(resData);
|
||||
} catch (e) {
|
||||
log('发生错误', e);
|
||||
} catch (e: any) {
|
||||
logError('发生错误', e);
|
||||
return OB11Response.error(e?.toString() || e?.stack?.toString() || '未知错误,可能操作超时', 200);
|
||||
}
|
||||
}
|
||||
@ -35,8 +35,8 @@ class BaseAction<PayloadType, ReturnDataType> {
|
||||
try {
|
||||
const resData = await this._handle(payload);
|
||||
return OB11Response.ok(resData, echo);
|
||||
} catch (e) {
|
||||
log('发生错误', e);
|
||||
} catch (e: any) {
|
||||
logError('发生错误', e);
|
||||
return OB11Response.error(e.stack?.toString() || e.toString(), 1200, echo);
|
||||
}
|
||||
}
|
||||
|
@ -10,7 +10,7 @@ import {
|
||||
NTQQWindowApi,
|
||||
} from '@/core';
|
||||
import { ActionName } from '../types';
|
||||
import { log } from '@/common/utils/log';
|
||||
import { log, logDebug } from '@/common/utils/log';
|
||||
|
||||
interface Payload {
|
||||
method: string,
|
||||
@ -21,12 +21,12 @@ export default class Debug extends BaseAction<Payload, any> {
|
||||
actionName = ActionName.Debug;
|
||||
|
||||
protected async _handle(payload: Payload): Promise<any> {
|
||||
log('debug call ntqq api', payload);
|
||||
logDebug('debug call ntqq api', payload);
|
||||
const ntqqApi = [NTQQMsgApi, NTQQFriendApi, NTQQGroupApi, NTQQUserApi, NTQQFileApi,
|
||||
// NTQQFileCacheApi,
|
||||
NTQQWindowApi];
|
||||
for (const ntqqApiClass of ntqqApi) {
|
||||
log('ntqqApiClass', ntqqApiClass);
|
||||
logDebug('ntqqApiClass', ntqqApiClass);
|
||||
const method = (<any>ntqqApiClass)[payload.method];
|
||||
if (method) {
|
||||
const result = method(...payload.args);
|
||||
|
@ -2,7 +2,7 @@ import BaseAction from '../BaseAction';
|
||||
import fs from 'fs/promises';
|
||||
import { dbUtil } from '@/common/utils/db';
|
||||
import { ob11Config } from '@/onebot11/config';
|
||||
import { log } from '@/common/utils/log';
|
||||
import { log, logDebug } from '@/common/utils/log';
|
||||
import { sleep } from '@/common/utils/helper';
|
||||
import { uri2local } from '@/common/utils/file';
|
||||
import { ActionName } from '../types';
|
||||
@ -47,7 +47,7 @@ export class GetFileBase extends BaseAction<GetFilePayload, GetFileResponse> {
|
||||
try {
|
||||
await fs.access(cache.path, fs.constants.F_OK);
|
||||
} catch (e) {
|
||||
log('local file not found, start download...');
|
||||
logDebug('local file not found, start download...');
|
||||
// if (cache.url) {
|
||||
// const downloadResult = await uri2local(cache.url);
|
||||
// if (downloadResult.success) {
|
||||
|
@ -6,6 +6,7 @@ import { ChatType } from '@/core/entities';
|
||||
import { dbUtil } from '@/common/utils/db';
|
||||
import { NTQQMsgApi } from '@/core/apis/msg';
|
||||
import { OB11Constructor } from '../../constructor';
|
||||
import { logDebug } from '@/common/utils/log';
|
||||
|
||||
|
||||
interface Payload {
|
||||
@ -32,7 +33,7 @@ export default class GetFriendMsgHistory extends BaseAction<Payload, Response> {
|
||||
chatType: friend ? ChatType.friend : ChatType.temp,
|
||||
peerUid: uid
|
||||
}, startMsgId, parseInt(payload.count?.toString()) || 20));
|
||||
console.log(historyResult);
|
||||
logDebug(historyResult);
|
||||
const msgList = historyResult.msgList;
|
||||
await Promise.all(msgList.map(async msg => {
|
||||
msg.id = await dbUtil.addMsg(msg);
|
||||
|
@ -6,6 +6,7 @@ import { ChatType } from '@/core/entities';
|
||||
import { dbUtil } from '@/common/utils/db';
|
||||
import { NTQQMsgApi } from '@/core/apis/msg';
|
||||
import { OB11Constructor } from '../../constructor';
|
||||
import { logDebug } from '@/common/utils/log';
|
||||
|
||||
|
||||
interface Payload {
|
||||
@ -32,7 +33,7 @@ export default class GoCQHTTPGetGroupMsgHistory extends BaseAction<Payload, Resp
|
||||
chatType: ChatType.group,
|
||||
peerUid: group.groupCode
|
||||
}, startMsgId, parseInt(payload.count?.toString()) || 20));
|
||||
console.log(historyResult);
|
||||
logDebug(historyResult);
|
||||
const msgList = historyResult.msgList;
|
||||
await Promise.all(msgList.map(async msg => {
|
||||
msg.id = await dbUtil.addMsg(msg);
|
||||
|
@ -4,7 +4,7 @@ import { getUidByUin, uid2UinMap } from '@/common/data';
|
||||
import { OB11Constructor } from '../../constructor';
|
||||
import { ActionName } from '../types';
|
||||
import { NTQQUserApi } from '@/core/apis/user';
|
||||
import { log } from '@/common/utils/log';
|
||||
import { log, logDebug } from '@/common/utils/log';
|
||||
|
||||
|
||||
export default class GoCQHTTPGetStrangerInfo extends BaseAction<{ user_id: number }, OB11User> {
|
||||
@ -12,7 +12,7 @@ export default class GoCQHTTPGetStrangerInfo extends BaseAction<{ user_id: numbe
|
||||
|
||||
protected async _handle(payload: { user_id: number }): Promise<OB11User> {
|
||||
const user_id = payload.user_id.toString();
|
||||
log('uidMaps', uid2UinMap);
|
||||
logDebug('uidMaps', uid2UinMap);
|
||||
const uid = getUidByUin(user_id);
|
||||
if (!uid) {
|
||||
throw new Error('查无此人');
|
||||
|
@ -4,7 +4,7 @@ import { OB11Constructor } from '../../constructor';
|
||||
import BaseAction from '../BaseAction';
|
||||
import { ActionName } from '../types';
|
||||
import { NTQQUserApi } from '@/core/apis/user';
|
||||
import { log } from '@/common/utils/log';
|
||||
import { log, logDebug } from '@/common/utils/log';
|
||||
import { isNull } from '../../../common/utils/helper';
|
||||
|
||||
|
||||
@ -20,13 +20,13 @@ class GetGroupMemberInfo extends BaseAction<PayloadType, OB11GroupMember> {
|
||||
const member = await getGroupMember(payload.group_id.toString(), payload.user_id.toString());
|
||||
// log(member);
|
||||
if (member) {
|
||||
log('获取群成员详细信息');
|
||||
logDebug('获取群成员详细信息');
|
||||
try {
|
||||
const info = (await NTQQUserApi.getUserDetailInfo(member.uid));
|
||||
log('群成员详细信息结果', info);
|
||||
logDebug('群成员详细信息结果', info);
|
||||
Object.assign(member, info);
|
||||
} catch (e) {
|
||||
log('获取群成员详细信息失败, 只能返回基础信息', e);
|
||||
logDebug('获取群成员详细信息失败, 只能返回基础信息', e);
|
||||
}
|
||||
return OB11Constructor.groupMember(payload.group_id.toString(), member);
|
||||
} else {
|
||||
|
@ -1,7 +1,7 @@
|
||||
import BaseAction from '../BaseAction';
|
||||
import { ActionName } from '../types';
|
||||
import { NTQQGroupApi } from '@/core/apis/group';
|
||||
import { log } from '@/common/utils/log';
|
||||
import { log, logError } from '@/common/utils/log';
|
||||
|
||||
interface Payload {
|
||||
group_id: number,
|
||||
@ -15,7 +15,7 @@ export default class SetGroupLeave extends BaseAction<Payload, any> {
|
||||
try {
|
||||
await NTQQGroupApi.quitGroup(payload.group_id.toString());
|
||||
} catch (e) {
|
||||
log('退群失败', e);
|
||||
logError('退群失败', e);
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
|
@ -23,7 +23,7 @@ import { ActionName, BaseCheckResult } from '../types';
|
||||
import * as fs from 'node:fs';
|
||||
import { decodeCQCode } from '../../cqcode';
|
||||
import { dbUtil } from '@/common/utils/db';
|
||||
import { log } from '@/common/utils/log';
|
||||
import { log, logDebug, logError } from '@/common/utils/log';
|
||||
import { sleep } from '@/common/utils/helper';
|
||||
import { uri2local } from '@/common/utils/file';
|
||||
import { getFriend, getGroup, getGroupMember, getUidByUin, selfInfo } from '@/common/data';
|
||||
@ -168,11 +168,11 @@ export async function createSendElements(messageData: OB11MessageData[], group:
|
||||
// log('download result', downloadPath);
|
||||
// log('下载完成后的msg', msg);
|
||||
}
|
||||
log('找到文件缓存', file);
|
||||
logDebug('找到文件缓存', file);
|
||||
}
|
||||
const { path, isLocal, fileName, errMsg } = (await uri2local(file));
|
||||
if (errMsg) {
|
||||
log('文件下载失败', errMsg);
|
||||
logError('文件下载失败', errMsg);
|
||||
throw Error('文件下载失败' + errMsg);
|
||||
// throw (errMsg);
|
||||
// continue
|
||||
@ -182,10 +182,10 @@ export async function createSendElements(messageData: OB11MessageData[], group:
|
||||
deleteAfterSentFiles.push(path);
|
||||
}
|
||||
if (sendMsg.type === OB11MessageDataType.file) {
|
||||
log('发送文件', path, payloadFileName || fileName);
|
||||
logDebug('发送文件', path, payloadFileName || fileName);
|
||||
sendElements.push(await SendMsgElementConstructor.file(path, payloadFileName || fileName));
|
||||
} else if (sendMsg.type === OB11MessageDataType.video) {
|
||||
log('发送视频', path, payloadFileName || fileName);
|
||||
logDebug('发送视频', path, payloadFileName || fileName);
|
||||
let thumb = sendMsg.data?.thumb;
|
||||
if (thumb) {
|
||||
const uri2LocalRes = await uri2local(thumb);
|
||||
@ -239,7 +239,7 @@ export async function sendMsg(peer: Peer, sendElements: SendMessageElement[], de
|
||||
try {
|
||||
returnMsg.id = await dbUtil.addMsg(returnMsg, false);
|
||||
} catch (e: any) {
|
||||
log('发送消息id获取失败', e);
|
||||
logDebug('发送消息id获取失败', e);
|
||||
returnMsg.id = 0;
|
||||
}
|
||||
// log('消息发送结果', returnMsg);
|
||||
@ -380,7 +380,7 @@ export class SendMsg extends BaseAction<OB11PostSendMsg, ReturnDataType> {
|
||||
}
|
||||
|
||||
private async cloneMsg(msg: RawMessage): Promise<RawMessage | undefined> {
|
||||
log('克隆的目标消息', msg);
|
||||
logDebug('克隆的目标消息', msg);
|
||||
const sendElements: SendMessageElement[] = [];
|
||||
for (const ele of msg.elements) {
|
||||
sendElements.push(ele as SendMessageElement);
|
||||
@ -390,9 +390,9 @@ export class SendMsg extends BaseAction<OB11PostSendMsg, ReturnDataType> {
|
||||
|
||||
}
|
||||
if (sendElements.length === 0) {
|
||||
log('需要clone的消息无法解析,将会忽略掉', msg);
|
||||
logDebug('需要clone的消息无法解析,将会忽略掉', msg);
|
||||
}
|
||||
log('克隆消息', sendElements);
|
||||
logDebug('克隆消息', sendElements);
|
||||
try {
|
||||
const nodeMsg = await NTQQMsgApi.sendMsg({
|
||||
chatType: ChatType.friend,
|
||||
@ -401,7 +401,7 @@ export class SendMsg extends BaseAction<OB11PostSendMsg, ReturnDataType> {
|
||||
await sleep(500);
|
||||
return nodeMsg;
|
||||
} catch (e) {
|
||||
log(e, '克隆转发消息失败,将忽略本条消息', msg);
|
||||
logError(e, '克隆转发消息失败,将忽略本条消息', msg);
|
||||
}
|
||||
|
||||
}
|
||||
@ -440,7 +440,7 @@ export class SendMsg extends BaseAction<OB11PostSendMsg, ReturnDataType> {
|
||||
sendElements,
|
||||
deleteAfterSentFiles
|
||||
} = await createSendElements(convertMessage2List(messageNode.data.content), group);
|
||||
log('开始生成转发节点', sendElements);
|
||||
logDebug('开始生成转发节点', sendElements);
|
||||
const sendElementsSplit: SendMessageElement[][] = [];
|
||||
let splitIndex = 0;
|
||||
for (const ele of sendElements) {
|
||||
@ -457,20 +457,20 @@ export class SendMsg extends BaseAction<OB11PostSendMsg, ReturnDataType> {
|
||||
} else {
|
||||
sendElementsSplit[splitIndex].push(ele);
|
||||
}
|
||||
log(sendElementsSplit);
|
||||
logDebug(sendElementsSplit);
|
||||
}
|
||||
// log("分割后的转发节点", sendElementsSplit)
|
||||
for (const eles of sendElementsSplit) {
|
||||
const nodeMsg = await sendMsg(selfPeer, eles, [], true);
|
||||
nodeMsgIds.push(nodeMsg.msgId);
|
||||
await sleep(500);
|
||||
log('转发节点生成成功', nodeMsg.msgId);
|
||||
logDebug('转发节点生成成功', nodeMsg.msgId);
|
||||
}
|
||||
deleteAfterSentFiles.map(f => fs.unlink(f, () => {
|
||||
}));
|
||||
|
||||
} catch (e) {
|
||||
log('生成转发消息节点失败', e);
|
||||
logDebug('生成转发消息节点失败', e);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -491,10 +491,10 @@ export class SendMsg extends BaseAction<OB11PostSendMsg, ReturnDataType> {
|
||||
}
|
||||
}
|
||||
}
|
||||
log('nodeMsgArray', nodeMsgArray);
|
||||
logDebug('nodeMsgArray', nodeMsgArray);
|
||||
nodeMsgIds = nodeMsgArray.map(msg => msg.msgId);
|
||||
if (needSendSelf) {
|
||||
log('需要克隆转发消息');
|
||||
logDebug('需要克隆转发消息');
|
||||
for (const [index, msg] of nodeMsgArray.entries()) {
|
||||
if (msg.peerUid !== selfInfo.uid) {
|
||||
const cloneMsg = await this.cloneMsg(msg);
|
||||
@ -518,10 +518,10 @@ export class SendMsg extends BaseAction<OB11PostSendMsg, ReturnDataType> {
|
||||
throw Error('转发消息失败,生成节点为空');
|
||||
}
|
||||
try {
|
||||
log('开发转发', srcPeer, destPeer, nodeMsgIds);
|
||||
logDebug('开发转发', srcPeer, destPeer, nodeMsgIds);
|
||||
return await NTQQMsgApi.multiForwardMsg(srcPeer!, destPeer, nodeMsgIds);
|
||||
} catch (e) {
|
||||
log('forward failed', e);
|
||||
logError('forward failed', e);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
@ -2,7 +2,7 @@ import { NTQQUserApi } from '../../../core/src/apis';
|
||||
import BaseAction from '../BaseAction';
|
||||
import { getFriend, getUidByUin, uid2UinMap } from '../../../common/data';
|
||||
import { ActionName } from '../types';
|
||||
import { log } from '../../../common/utils/log';
|
||||
import { log, logDebug } from '../../../common/utils/log';
|
||||
|
||||
interface Payload {
|
||||
user_id: number,
|
||||
@ -13,7 +13,7 @@ export default class SendLike extends BaseAction<Payload, null> {
|
||||
actionName = ActionName.SendLike;
|
||||
|
||||
protected async _handle(payload: Payload): Promise<null> {
|
||||
log('点赞参数', payload);
|
||||
logDebug('点赞参数', payload);
|
||||
try {
|
||||
const qq = payload.user_id.toString();
|
||||
const friend = await getFriend(qq);
|
||||
@ -24,7 +24,7 @@ export default class SendLike extends BaseAction<Payload, null> {
|
||||
uid = friend.uid;
|
||||
}
|
||||
const result = await NTQQUserApi.like(uid, parseInt(payload.times?.toString()) || 1);
|
||||
console.log('点赞结果', result);
|
||||
logDebug('点赞结果', result);
|
||||
if (result.result !== 0) {
|
||||
throw Error(result.errMsg);
|
||||
}
|
||||
|
@ -1,6 +1,7 @@
|
||||
import fs from 'node:fs';
|
||||
import path from 'node:path';
|
||||
import { selfInfo } from '@/common/data';
|
||||
import { logDebug, logError } from '@/common/utils/log';
|
||||
|
||||
export interface OB11Config {
|
||||
httpPort: number;
|
||||
@ -56,21 +57,21 @@ class Config implements OB11Config {
|
||||
read() {
|
||||
const ob11ConfigPath = this.getConfigPath();
|
||||
if (!fs.existsSync(ob11ConfigPath)) {
|
||||
console.log(`onebot11配置文件 ${ob11ConfigPath} 不存在, 现已创建,请修改配置文件后重启NapCat`);
|
||||
logError(`onebot11配置文件 ${ob11ConfigPath} 不存在, 现已创建,请修改配置文件后重启NapCat`);
|
||||
this.save();
|
||||
return this;
|
||||
}
|
||||
const data = fs.readFileSync(ob11ConfigPath, 'utf-8');
|
||||
try {
|
||||
const jsonData = JSON.parse(data);
|
||||
console.log('get config', jsonData);
|
||||
logDebug('Onebot 11配置文件已加载', jsonData);
|
||||
Object.assign(this, jsonData);
|
||||
// eslint-disable-next-line
|
||||
} catch (e: any) {
|
||||
if (e instanceof SyntaxError) {
|
||||
console.error(`配置文件 ${ob11ConfigPath} 格式错误,请检查配置文件:`, e.message);
|
||||
logError(`配置文件 ${ob11ConfigPath} 格式错误,请检查配置文件:`, e.message);
|
||||
}else{
|
||||
console.error(`读取配置文件 ${ob11ConfigPath} 时发生错误:`, e.message);
|
||||
logError(`读取配置文件 ${ob11ConfigPath} 时发生错误:`, e.message);
|
||||
}
|
||||
}
|
||||
return this;
|
||||
|
@ -33,7 +33,7 @@ import { OB11GroupNoticeEvent } from './event/notice/OB11GroupNoticeEvent';
|
||||
import { OB11FriendAddNoticeEvent } from './event/notice/OB11FriendAddNoticeEvent';
|
||||
|
||||
import { calcQQLevel } from '../common/utils/qqlevel';
|
||||
import { log } from '../common/utils/log';
|
||||
import { log, logDebug, logError } from '../common/utils/log';
|
||||
import { sleep } from '../common/utils/helper';
|
||||
import { OB11GroupTitleEvent } from './event/notice/OB11GroupTitleEvent';
|
||||
import { OB11GroupCardEvent } from './event/notice/OB11GroupCardEvent';
|
||||
@ -132,7 +132,7 @@ export class OB11Constructor {
|
||||
continue;
|
||||
}
|
||||
} catch (e: any) {
|
||||
log('获取不到引用的消息', e.stack, element.replyElement.replayMsgSeq);
|
||||
logError('获取不到引用的消息', e.stack, element.replyElement.replayMsgSeq);
|
||||
}
|
||||
|
||||
} else if (element.picElement) {
|
||||
@ -259,7 +259,7 @@ export class OB11Constructor {
|
||||
if (groupElement) {
|
||||
// log("收到群提示消息", groupElement)
|
||||
if (groupElement.type == TipGroupElementType.memberIncrease) {
|
||||
log('收到群成员增加消息', groupElement);
|
||||
logDebug('收到群成员增加消息', groupElement);
|
||||
await sleep(1000);
|
||||
const member = await getGroupMember(msg.peerUid, groupElement.memberUid);
|
||||
const memberUin = member?.uin;
|
||||
@ -276,7 +276,7 @@ export class OB11Constructor {
|
||||
return event;
|
||||
}
|
||||
} else if (groupElement.type === TipGroupElementType.ban) {
|
||||
log('收到群群员禁言提示', groupElement);
|
||||
logDebug('收到群群员禁言提示', groupElement);
|
||||
const memberUid = groupElement.shutUp!.member.uid;
|
||||
const adminUid = groupElement.shutUp!.admin.uid;
|
||||
let memberUin: string = '';
|
||||
@ -298,7 +298,7 @@ export class OB11Constructor {
|
||||
return event;
|
||||
}
|
||||
} else if (groupElement.type == TipGroupElementType.kicked) {
|
||||
log(`收到我被踢出或退群提示, 群${msg.peerUid}`, groupElement);
|
||||
logDebug(`收到我被踢出或退群提示, 群${msg.peerUid}`, groupElement);
|
||||
deleteGroup(msg.peerUid);
|
||||
NTQQGroupApi.quitGroup(msg.peerUid).then();
|
||||
try {
|
||||
@ -321,7 +321,7 @@ export class OB11Constructor {
|
||||
|
||||
if (grayTipElement) {
|
||||
if (grayTipElement.subElementType == GrayTipElementSubType.INVITE_NEW_MEMBER) {
|
||||
log('收到新人被邀请进群消息', grayTipElement);
|
||||
logDebug('收到新人被邀请进群消息', grayTipElement);
|
||||
const xmlElement = grayTipElement.xmlElement;
|
||||
if (xmlElement?.content) {
|
||||
const regex = /jp="(\d+)"/g;
|
||||
@ -366,7 +366,7 @@ export class OB11Constructor {
|
||||
* */
|
||||
const memberUin = json.items[1].param[0];
|
||||
const title = json.items[3].txt;
|
||||
log('收到群成员新头衔消息', json);
|
||||
logDebug('收到群成员新头衔消息', json);
|
||||
return new OB11GroupTitleEvent(parseInt(msg.peerUid), parseInt(memberUin), title);
|
||||
}
|
||||
}
|
||||
@ -451,7 +451,7 @@ export class OB11Constructor {
|
||||
}
|
||||
|
||||
static stranger(user: User): OB11User {
|
||||
log('construct ob11 stranger', user);
|
||||
logDebug('construct ob11 stranger', user);
|
||||
return {
|
||||
...user,
|
||||
user_id: parseInt(user.uin),
|
||||
@ -465,7 +465,7 @@ export class OB11Constructor {
|
||||
}
|
||||
|
||||
static groupMembers(group: Group): OB11GroupMember[] {
|
||||
log('construct ob11 group members', group);
|
||||
logDebug('construct ob11 group members', group);
|
||||
return Array.from(groupMembers.get(group.groupCode)?.values() || []).map(m => OB11Constructor.groupMember(group.groupCode, m));
|
||||
}
|
||||
|
||||
|
@ -20,7 +20,7 @@ import { dbUtil } from '@/common/utils/db';
|
||||
import { BuddyListener, GroupListener, NodeIKernelBuddyListener } from '../core/src/listeners';
|
||||
import { OB11FriendRequestEvent } from '@/onebot11/event/request/OB11FriendRequest';
|
||||
import { NTQQGroupApi, NTQQUserApi } from '../core/src/apis';
|
||||
import { log } from '@/common/utils/log';
|
||||
import { log, logDebug, logError } from '@/common/utils/log';
|
||||
import { OB11GroupRequestEvent } from '@/onebot11/event/request/OB11GroupRequest';
|
||||
import { OB11GroupAdminNoticeEvent } from '@/onebot11/event/notice/OB11GroupAdminNoticeEvent';
|
||||
import { GroupDecreaseSubType, OB11GroupDecreaseEvent } from '@/onebot11/event/notice/OB11GroupDecreaseEvent';
|
||||
@ -38,7 +38,7 @@ export class NapCatOnebot11 {
|
||||
}
|
||||
|
||||
public onReady() {
|
||||
console.log('ob11 ready');
|
||||
logDebug('ob11 ready');
|
||||
ob11Config.read();
|
||||
if (ob11Config.enableHttp) {
|
||||
ob11HTTPServer.start(ob11Config.httpPort);
|
||||
@ -95,7 +95,7 @@ export class NapCatOnebot11 {
|
||||
}
|
||||
};
|
||||
napCatCore.addListener(msgListener);
|
||||
console.log('ob11 msg listener added');
|
||||
logDebug('ob11 msg listener added');
|
||||
|
||||
// BuddyListener
|
||||
const buddyListener = new BuddyListener();
|
||||
@ -103,13 +103,13 @@ export class NapCatOnebot11 {
|
||||
this.postFriendRequest(req.buddyReqs).then().catch(log);
|
||||
});
|
||||
napCatCore.addListener(buddyListener);
|
||||
console.log('ob11 buddy listener added');
|
||||
logDebug('ob11 buddy listener added');
|
||||
|
||||
// GroupListener
|
||||
const groupListener = new GroupListener();
|
||||
groupListener.onGroupNotifiesUpdated = (doubt, notifies) => {
|
||||
// console.log('ob11 onGroupNotifiesUpdated', notifies);
|
||||
this.postGroupNotifies(notifies).then().catch(e => log('postGroupNotifies error: ', e));
|
||||
this.postGroupNotifies(notifies).then().catch(e => logError('postGroupNotifies error: ', e));
|
||||
};
|
||||
groupListener.onJoinGroupNotify = (...notify) => {
|
||||
// console.log('ob11 onJoinGroupNotify', notify);
|
||||
@ -120,13 +120,13 @@ export class NapCatOnebot11 {
|
||||
};
|
||||
|
||||
napCatCore.addListener(groupListener);
|
||||
console.log('ob11 group listener added');
|
||||
logDebug('ob11 group listener added');
|
||||
}
|
||||
|
||||
async postReceiveMsg(msgList: RawMessage[]) {
|
||||
const { debug, reportSelfMessage } = ob11Config;
|
||||
for (const message of msgList) {
|
||||
// console.log("ob11 收到新消息", message)
|
||||
log('收到新消息', message);
|
||||
// if (message.senderUin !== selfInfo.uin){
|
||||
// message.msgShortId = await dbUtil.addMsg(message);
|
||||
// }
|
||||
@ -147,18 +147,18 @@ export class NapCatOnebot11 {
|
||||
}
|
||||
postOB11Event(msg);
|
||||
// log("post msg", msg)
|
||||
}).catch(e => log('constructMessage error: ', e));
|
||||
}).catch(e => logError('constructMessage error: ', e));
|
||||
OB11Constructor.GroupEvent(message).then(groupEvent => {
|
||||
if (groupEvent) {
|
||||
// log("post group event", groupEvent);
|
||||
postOB11Event(groupEvent);
|
||||
}
|
||||
}).catch(e => log('constructGroupEvent error: ', e));
|
||||
}).catch(e => logError('constructGroupEvent error: ', e));
|
||||
OB11Constructor.FriendAddEvent(message).then(friendAddEvent=>{
|
||||
if(friendAddEvent){
|
||||
postOB11Event(friendAddEvent);
|
||||
}
|
||||
}).catch(e => log('constructFriendAddEvent error: ', e));
|
||||
}).catch(e => logError('constructFriendAddEvent error: ', e));
|
||||
}
|
||||
}
|
||||
|
||||
@ -176,7 +176,7 @@ export class NapCatOnebot11 {
|
||||
if (existNotify) {
|
||||
continue;
|
||||
}
|
||||
log('收到群通知', notify);
|
||||
logDebug('收到群通知', notify);
|
||||
groupNotifies[flag] = notify;
|
||||
// let member2: GroupMember;
|
||||
// if (notify.user2.uid) {
|
||||
@ -184,22 +184,22 @@ export class NapCatOnebot11 {
|
||||
// }
|
||||
if ([GroupNotifyTypes.ADMIN_SET, GroupNotifyTypes.ADMIN_UNSET].includes(notify.type)) {
|
||||
const member1 = await getGroupMember(notify.group.groupCode, notify.user1.uid);
|
||||
log('有管理员变动通知');
|
||||
logDebug('有管理员变动通知');
|
||||
// refreshGroupMembers(notify.group.groupCode).then();
|
||||
const groupAdminNoticeEvent = new OB11GroupAdminNoticeEvent();
|
||||
groupAdminNoticeEvent.group_id = parseInt(notify.group.groupCode);
|
||||
log('开始获取变动的管理员');
|
||||
logDebug('开始获取变动的管理员');
|
||||
if (member1) {
|
||||
log('变动管理员获取成功');
|
||||
logDebug('变动管理员获取成功');
|
||||
groupAdminNoticeEvent.user_id = parseInt(member1.uin);
|
||||
groupAdminNoticeEvent.sub_type = notify.type == GroupNotifyTypes.ADMIN_UNSET ? 'unset' : 'set';
|
||||
// member1.role = notify.type == GroupNotifyTypes.ADMIN_SET ? GroupMemberRole.admin : GroupMemberRole.normal;
|
||||
postOB11Event(groupAdminNoticeEvent, true);
|
||||
} else {
|
||||
log('获取群通知的成员信息失败', notify, getGroup(notify.group.groupCode));
|
||||
logDebug('获取群通知的成员信息失败', notify, getGroup(notify.group.groupCode));
|
||||
}
|
||||
} else if (notify.type == GroupNotifyTypes.MEMBER_EXIT || notify.type == GroupNotifyTypes.KICK_MEMBER) {
|
||||
log('有成员退出通知', notify);
|
||||
logDebug('有成员退出通知', notify);
|
||||
try {
|
||||
const member1 = await NTQQUserApi.getUserDetailInfo(notify.user1.uid);
|
||||
let operatorId = member1.uin;
|
||||
@ -215,17 +215,17 @@ export class NapCatOnebot11 {
|
||||
const groupDecreaseEvent = new OB11GroupDecreaseEvent(parseInt(notify.group.groupCode), parseInt(member1.uin), parseInt(operatorId), subType);
|
||||
postOB11Event(groupDecreaseEvent, true);
|
||||
} catch (e: any) {
|
||||
log('获取群通知的成员信息失败', notify, e.stack.toString());
|
||||
logError('获取群通知的成员信息失败', notify, e.stack.toString());
|
||||
}
|
||||
} else if ([GroupNotifyTypes.JOIN_REQUEST].includes(notify.type)) {
|
||||
log('有加群请求');
|
||||
logDebug('有加群请求');
|
||||
const groupRequestEvent = new OB11GroupRequestEvent();
|
||||
groupRequestEvent.group_id = parseInt(notify.group.groupCode);
|
||||
let requestQQ = '';
|
||||
try {
|
||||
requestQQ = (await NTQQUserApi.getUserDetailInfo(notify.user1.uid)).uin;
|
||||
} catch (e) {
|
||||
log('获取加群人QQ号失败', e);
|
||||
logError('获取加群人QQ号失败', e);
|
||||
}
|
||||
groupRequestEvent.user_id = parseInt(requestQQ) || 0;
|
||||
groupRequestEvent.sub_type = 'add';
|
||||
@ -233,7 +233,7 @@ export class NapCatOnebot11 {
|
||||
groupRequestEvent.flag = flag;
|
||||
postOB11Event(groupRequestEvent);
|
||||
} else if (notify.type == GroupNotifyTypes.INVITE_ME) {
|
||||
log('收到邀请我加群通知');
|
||||
logDebug('收到邀请我加群通知');
|
||||
const groupInviteEvent = new OB11GroupRequestEvent();
|
||||
groupInviteEvent.group_id = parseInt(notify.group.groupCode);
|
||||
let user_id = (await getFriend(notify.user2.uid))?.uin;
|
||||
@ -246,7 +246,7 @@ export class NapCatOnebot11 {
|
||||
postOB11Event(groupInviteEvent);
|
||||
}
|
||||
} catch (e: any) {
|
||||
log('解析群通知失败', e.stack.toString());
|
||||
logDebug('解析群通知失败', e.stack.toString());
|
||||
}
|
||||
}
|
||||
|
||||
@ -298,7 +298,7 @@ export class NapCatOnebot11 {
|
||||
const requester = await NTQQUserApi.getUserDetailInfo(req.friendUid);
|
||||
friendRequestEvent.user_id = parseInt(requester.uin);
|
||||
} catch (e) {
|
||||
log('获取加好友者QQ号失败', e);
|
||||
logDebug('获取加好友者QQ号失败', e);
|
||||
}
|
||||
friendRequestEvent.flag = flag;
|
||||
friendRequestEvent.comment = req.extWords;
|
||||
|
@ -3,7 +3,7 @@ import { OB11BaseMetaEvent } from '../event/meta/OB11BaseMetaEvent';
|
||||
import { OB11BaseNoticeEvent } from '../event/notice/OB11BaseNoticeEvent';
|
||||
import { WebSocket as WebSocketClass } from 'ws';
|
||||
import { wsReply } from './ws/reply';
|
||||
import { log } from '@/common/utils/log';
|
||||
import { log, logDebug, logError } from '@/common/utils/log';
|
||||
import { ob11Config } from '@/onebot11/config';
|
||||
import crypto from 'crypto';
|
||||
import { ChatType, Group, GroupRequestOperateTypes, Peer } from '../../core/src/entities';
|
||||
@ -95,14 +95,14 @@ export function postOB11Event(msg: PostEventType, reportSelf = false, postWs= tr
|
||||
headers,
|
||||
body: msgStr
|
||||
}).then(async (res) => {
|
||||
log(`新消息事件HTTP上报成功: ${host} `, msgStr);
|
||||
logDebug(`新消息事件HTTP上报成功: ${host} `, msgStr);
|
||||
// todo: 处理不够优雅,应该使用高级泛型进行QuickAction类型识别
|
||||
let resJson: QuickAction;
|
||||
try {
|
||||
resJson = await res.json();
|
||||
log('新消息事件HTTP上报返回快速操作: ', JSON.stringify(resJson));
|
||||
logDebug('新消息事件HTTP上报返回快速操作: ', JSON.stringify(resJson));
|
||||
} catch (e) {
|
||||
log('新消息事件HTTP上报没有返回快速操作,不需要处理');
|
||||
logDebug('新消息事件HTTP上报没有返回快速操作,不需要处理');
|
||||
return;
|
||||
}
|
||||
if (msg.post_type === 'message') {
|
||||
@ -177,7 +177,7 @@ export function postOB11Event(msg: PostEventType, reportSelf = false, postWs= tr
|
||||
}
|
||||
}
|
||||
}, (err: any) => {
|
||||
log(`新消息事件HTTP上报失败: ${host} `, err, msg);
|
||||
logError(`新消息事件HTTP上报失败: ${host} `, err, msg);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
@ -7,7 +7,7 @@ import { postWsEvent, registerWsEventSender, unregisterWsEventSender } from '../
|
||||
import { wsReply } from './reply';
|
||||
import { WebSocket as WebSocketClass } from 'ws';
|
||||
import { OB11HeartbeatEvent } from '../../event/meta/OB11HeartbeatEvent';
|
||||
import { log } from '../../../common/utils/log';
|
||||
import { log, logDebug, logError } from '../../../common/utils/log';
|
||||
import { ob11Config } from '@/onebot11/config';
|
||||
import { napCatCore } from '@/core';
|
||||
import { selfInfo } from '@/common/data';
|
||||
@ -40,7 +40,7 @@ export class ReverseWebsocket {
|
||||
try {
|
||||
receiveData = JSON.parse(msg.toString());
|
||||
echo = receiveData.echo;
|
||||
log('收到反向Websocket消息', receiveData);
|
||||
logDebug('收到反向Websocket消息', receiveData);
|
||||
} catch (e) {
|
||||
return wsReply(this.websocket!, OB11Response.error('json解析失败,请检查数据格式', 1400, echo));
|
||||
}
|
||||
@ -57,7 +57,7 @@ export class ReverseWebsocket {
|
||||
}
|
||||
|
||||
public onclose = () => {
|
||||
log('反向ws断开', this.url);
|
||||
logDebug('反向ws断开', this.url);
|
||||
unregisterWsEventSender(this.websocket!);
|
||||
if (this.running) {
|
||||
this.reconnect();
|
||||
@ -89,11 +89,11 @@ export class ReverseWebsocket {
|
||||
}
|
||||
});
|
||||
registerWsEventSender(this.websocket);
|
||||
log('Trying to connect to the websocket server: ' + this.url);
|
||||
logDebug('Trying to connect to the websocket server: ' + this.url);
|
||||
|
||||
|
||||
this.websocket.on('open', () => {
|
||||
log('Connected to the websocket server: ' + this.url);
|
||||
logDebug('Connected to the websocket server: ' + this.url);
|
||||
this.onopen();
|
||||
});
|
||||
|
||||
@ -108,7 +108,7 @@ export class ReverseWebsocket {
|
||||
}, heartInterval); // 心跳包
|
||||
this.websocket.on('close', () => {
|
||||
clearInterval(wsClientInterval);
|
||||
log('The websocket connection: ' + this.url + ' closed, trying reconnecting...');
|
||||
logDebug('The websocket connection: ' + this.url + ' closed, trying reconnecting...');
|
||||
this.onclose();
|
||||
});
|
||||
}
|
||||
@ -122,7 +122,7 @@ class OB11ReverseWebsockets {
|
||||
try {
|
||||
rwsList.push(new ReverseWebsocket(url));
|
||||
} catch (e: any) {
|
||||
log(e.stack);
|
||||
logError(e.stack);
|
||||
}
|
||||
}).then();
|
||||
}
|
||||
|
@ -10,7 +10,7 @@ import { WebsocketServerBase } from '@/common/server/websocket';
|
||||
import { IncomingMessage } from 'node:http';
|
||||
import { wsReply } from './reply';
|
||||
import { napCatCore } from '@/core';
|
||||
import { log } from '../../../common/utils/log';
|
||||
import { log, logDebug, logError } from '../../../common/utils/log';
|
||||
import { ob11Config } from '@/onebot11/config';
|
||||
import { selfInfo } from '@/common/data';
|
||||
|
||||
@ -58,19 +58,19 @@ class OB11WebsocketServer extends WebsocketServerBase {
|
||||
if (url == '/event' || url == '/event/' || url == '/') {
|
||||
registerWsEventSender(wsClient);
|
||||
|
||||
log('event上报ws客户端已连接');
|
||||
logDebug('event上报ws客户端已连接');
|
||||
|
||||
try {
|
||||
wsReply(wsClient, new OB11LifeCycleEvent(LifeCycleSubType.CONNECT));
|
||||
} catch (e) {
|
||||
log('发送生命周期失败', e);
|
||||
logError('发送生命周期失败', e);
|
||||
}
|
||||
const { heartInterval } = ob11Config;
|
||||
const wsClientInterval = setInterval(() => {
|
||||
postWsEvent(new OB11HeartbeatEvent(!!selfInfo.online, true, heartInterval));
|
||||
}, heartInterval); // 心跳包
|
||||
wsClient.on('close', () => {
|
||||
log('event上报ws客户端已断开');
|
||||
logError('event上报ws客户端已断开');
|
||||
clearInterval(wsClientInterval);
|
||||
unregisterWsEventSender(wsClient);
|
||||
});
|
||||
|
@ -1,7 +1,7 @@
|
||||
import { WebSocket as WebSocketClass } from 'ws';
|
||||
import { OB11Response } from '../../action/OB11Response';
|
||||
import { PostEventType } from '../postOB11Event';
|
||||
import { log } from '../../../common/utils/log';
|
||||
import { log, logDebug, logError } from '../../../common/utils/log';
|
||||
import { isNull } from '../../../common/utils/helper';
|
||||
|
||||
|
||||
@ -12,8 +12,8 @@ export function wsReply(wsClient: WebSocketClass, data: OB11Response | PostEvent
|
||||
delete packet['echo'];
|
||||
}
|
||||
wsClient.send(JSON.stringify(packet));
|
||||
log('ws 消息上报', wsClient.url || '', data);
|
||||
logDebug('ws 消息上报', wsClient.url || '', data);
|
||||
} catch (e: any) {
|
||||
log('websocket 回复失败', e.stack, data);
|
||||
logError('websocket 回复失败', e.stack, data);
|
||||
}
|
||||
}
|
||||
|
@ -64,7 +64,7 @@ const baseConfig = (mode: string = 'development') => defineConfig({
|
||||
target: 'esnext',
|
||||
minify: mode === 'production' ? 'esbuild' : false,
|
||||
lib: {
|
||||
entry: 'src/onebot11/index.ts',
|
||||
entry: 'src/index.ts',
|
||||
formats: ['cjs'],
|
||||
fileName: () => 'napcat.cjs',
|
||||
},
|
||||
|
Loading…
x
Reference in New Issue
Block a user