refactor: core

This commit is contained in:
linyuchen
2024-04-27 00:50:08 +08:00
parent 071a9f644b
commit 0782bd116f
21 changed files with 217 additions and 114 deletions

View File

@@ -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);
}
}
@@ -46,4 +46,4 @@ class BaseAction<PayloadType, ReturnDataType> {
}
}
export default BaseAction;
export default BaseAction;

View File

@@ -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);

View File

@@ -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) {

View File

@@ -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);

View File

@@ -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);

View File

@@ -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('查无此人');

View File

@@ -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 {

View File

@@ -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;
}
}

View File

@@ -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;
}
}

View File

@@ -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);
}