diff --git a/src/ntqqapi/constructor.ts b/src/ntqqapi/entities.ts similarity index 96% rename from src/ntqqapi/constructor.ts rename to src/ntqqapi/entities.ts index 309319f..5e27668 100644 --- a/src/ntqqapi/constructor.ts +++ b/src/ntqqapi/entities.ts @@ -1,3 +1,5 @@ +import ffmpeg from 'fluent-ffmpeg' +import faceConfig from './helper/face_config.json' import { AtType, ElementType, @@ -13,22 +15,16 @@ import { SendTextElement, SendVideoElement, } from './types' -import { promises as fs } from 'node:fs' -import ffmpeg from 'fluent-ffmpeg' +import { stat, writeFile, copyFile, unlink } from 'node:fs/promises' import { calculateFileMD5, isGIF } from '../common/utils/file' import { defaultVideoThumb, getVideoInfo } from '../common/utils/video' import { encodeSilk } from '../common/utils/audio' -import faceConfig from './helper/face_config.json' import { Context } from 'cordis' import { isNullable } from 'cosmokit' export const mFaceCache = new Map() // emojiId -> faceName -export namespace SendMsgElementConstructor { - export function poke(groupCode: string, uin: string) { - return null - } - +export namespace SendElementEntities { export function text(content: string): SendTextElement { return { elementType: ElementType.TEXT, @@ -123,7 +119,7 @@ export namespace SendMsgElementConstructor { export async function video(ctx: Context, filePath: string, fileName: string = '', diyThumbPath: string = ''): Promise { try { - await fs.stat(filePath) + await stat(filePath) } catch (e) { throw `文件${filePath}异常,不存在` } @@ -165,7 +161,7 @@ export namespace SendMsgElementConstructor { function useDefaultThumb() { if (completed) return ctx.logger.info('获取视频封面失败,使用默认封面') - fs.writeFile(thumbPath, defaultVideoThumb) + writeFile(thumbPath, defaultVideoThumb) .then(() => { resolve(thumbPath) }) @@ -176,7 +172,7 @@ export namespace SendMsgElementConstructor { ffmpeg(filePath) .on('error', (err) => { if (diyThumbPath) { - fs.copyFile(diyThumbPath, thumbPath) + copyFile(diyThumbPath, thumbPath) .then(() => { completed = true resolve(thumbPath) @@ -201,7 +197,7 @@ export namespace SendMsgElementConstructor { let thumbPath = new Map() const _thumbPath = await createThumb ctx.logger.info('生成视频缩略图', _thumbPath) - const thumbSize = (await fs.stat(_thumbPath)).size + const thumbSize = (await stat(_thumbPath)).size // log("生成缩略图", _thumbPath) thumbPath.set(0, _thumbPath) const thumbMd5 = await calculateFileMD5(_thumbPath) @@ -246,7 +242,7 @@ export namespace SendMsgElementConstructor { throw '文件异常,大小为0' } if (converted) { - fs.unlink(silkPath).then() + unlink(silkPath) } return { elementType: ElementType.PTT, diff --git a/src/onebot11/action/go-cqhttp/GetForwardMsg.ts b/src/onebot11/action/go-cqhttp/GetForwardMsg.ts index fdf76a5..a2a29ef 100644 --- a/src/onebot11/action/go-cqhttp/GetForwardMsg.ts +++ b/src/onebot11/action/go-cqhttp/GetForwardMsg.ts @@ -1,6 +1,6 @@ import BaseAction from '../BaseAction' import { OB11ForwardMessage, OB11Message, OB11MessageData } from '../../types' -import { OB11Constructor } from '../../constructor' +import { OB11Entities } from '../../entities' import { ActionName } from '../types' import { MessageUnique } from '@/common/utils/messageUnique' @@ -32,7 +32,7 @@ export class GoCQHTTGetForwardMsgAction extends BaseAction { const msgList = data.msgList const messages = await Promise.all( msgList.map(async (msg) => { - const resMsg = await OB11Constructor.message(this.ctx, msg) + const resMsg = await OB11Entities.message(this.ctx, msg) resMsg.message_id = MessageUnique.createMsg({ chatType: msg.chatType, peerUid: msg.peerUid, diff --git a/src/onebot11/action/go-cqhttp/GetGroupMsgHistory.ts b/src/onebot11/action/go-cqhttp/GetGroupMsgHistory.ts index 87b3df8..aed1a06 100644 --- a/src/onebot11/action/go-cqhttp/GetGroupMsgHistory.ts +++ b/src/onebot11/action/go-cqhttp/GetGroupMsgHistory.ts @@ -2,7 +2,7 @@ import BaseAction from '../BaseAction' import { OB11Message } from '../../types' import { ActionName } from '../types' import { ChatType } from '@/ntqqapi/types' -import { OB11Constructor } from '../../constructor' +import { OB11Entities } from '../../entities' import { RawMessage } from '@/ntqqapi/types' import { MessageUnique } from '@/common/utils/messageUnique' @@ -40,7 +40,7 @@ export default class GoCQHTTPGetGroupMsgHistory extends BaseAction OB11Constructor.message(this.ctx, msg))) + const ob11MsgList = await Promise.all(msgList.map((msg) => OB11Entities.message(this.ctx, msg))) return { messages: ob11MsgList } } } diff --git a/src/onebot11/action/go-cqhttp/GetStrangerInfo.ts b/src/onebot11/action/go-cqhttp/GetStrangerInfo.ts index 2ba6534..dbe1946 100644 --- a/src/onebot11/action/go-cqhttp/GetStrangerInfo.ts +++ b/src/onebot11/action/go-cqhttp/GetStrangerInfo.ts @@ -1,6 +1,6 @@ import BaseAction from '../BaseAction' import { OB11User } from '../../types' -import { OB11Constructor } from '../../constructor' +import { OB11Entities } from '../../entities' import { ActionName } from '../types' import { getBuildVersion } from '@/common/utils' import { OB11UserSex } from '../../types' @@ -33,7 +33,7 @@ export default class GoCQHTTPGetStrangerInfo extends BaseAction { if (!downloadResult.success) { throw new Error(downloadResult.errMsg) } - const sendFileEle = await SendMsgElementConstructor.file(this.ctx, downloadResult.path, payload.name, payload.folder_id) + const sendFileEle = await SendElementEntities.file(this.ctx, downloadResult.path, payload.name, payload.folder_id) await sendMsg(this.ctx, { chatType: ChatType.group, peerUid: payload.group_id?.toString()!, @@ -62,7 +62,7 @@ export class GoCQHTTPUploadPrivateFile extends BaseAction { if (!downloadResult.success) { throw new Error(downloadResult.errMsg) } - const sendFileEle: SendFileElement = await SendMsgElementConstructor.file(this.ctx, downloadResult.path, payload.name) + const sendFileEle: SendFileElement = await SendElementEntities.file(this.ctx, downloadResult.path, payload.name) await sendMsg(this.ctx, peer, [sendFileEle], [], true) return null } diff --git a/src/onebot11/action/group/GetGroupInfo.ts b/src/onebot11/action/group/GetGroupInfo.ts index da5c527..3d8f8b6 100644 --- a/src/onebot11/action/group/GetGroupInfo.ts +++ b/src/onebot11/action/group/GetGroupInfo.ts @@ -1,5 +1,5 @@ import { OB11Group } from '../../types' -import { OB11Constructor } from '../../constructor' +import { OB11Entities } from '../../entities' import BaseAction from '../BaseAction' import { ActionName } from '../types' @@ -13,7 +13,7 @@ class GetGroupInfo extends BaseAction { protected async _handle(payload: Payload) { const group = (await this.ctx.ntGroupApi.getGroups()).find(e => e.groupCode == payload.group_id.toString()) if (group) { - return OB11Constructor.group(group) + return OB11Entities.group(group) } else { throw `群${payload.group_id}不存在` } diff --git a/src/onebot11/action/group/GetGroupList.ts b/src/onebot11/action/group/GetGroupList.ts index cd1bdc5..0e3f15d 100644 --- a/src/onebot11/action/group/GetGroupList.ts +++ b/src/onebot11/action/group/GetGroupList.ts @@ -1,5 +1,5 @@ import { OB11Group } from '../../types' -import { OB11Constructor } from '../../constructor' +import { OB11Entities } from '../../entities' import BaseAction from '../BaseAction' import { ActionName } from '../types' @@ -12,7 +12,7 @@ class GetGroupList extends BaseAction { protected async _handle(payload: Payload) { const groupList = await this.ctx.ntGroupApi.getGroups(payload?.no_cache === true || payload?.no_cache === 'true') - return OB11Constructor.groups(groupList) + return OB11Entities.groups(groupList) } } diff --git a/src/onebot11/action/group/GetGroupMemberInfo.ts b/src/onebot11/action/group/GetGroupMemberInfo.ts index 4a90cf0..e05ea91 100644 --- a/src/onebot11/action/group/GetGroupMemberInfo.ts +++ b/src/onebot11/action/group/GetGroupMemberInfo.ts @@ -1,6 +1,6 @@ import BaseAction from '../BaseAction' import { OB11GroupMember } from '../../types' -import { OB11Constructor } from '../../constructor' +import { OB11Entities } from '../../entities' import { ActionName } from '../types' import { selfInfo } from '@/common/globalVars' import { isNullable } from 'cosmokit' @@ -22,7 +22,7 @@ class GetGroupMemberInfo extends BaseAction { //log('群成员详细信息结果', info) Object.assign(member, info) } - const ret = OB11Constructor.groupMember(payload.group_id.toString(), member) + const ret = OB11Entities.groupMember(payload.group_id.toString(), member) const self = await this.ctx.ntGroupApi.getGroupMember(payload.group_id.toString(), selfInfo.uid) if (self?.role === 3 || self?.role === 4) { const webGroupMembers = await this.ctx.ntWebApi.getGroupMembers(payload.group_id.toString()) diff --git a/src/onebot11/action/group/GetGroupMemberList.ts b/src/onebot11/action/group/GetGroupMemberList.ts index 8df0238..9ffc178 100644 --- a/src/onebot11/action/group/GetGroupMemberList.ts +++ b/src/onebot11/action/group/GetGroupMemberList.ts @@ -1,5 +1,5 @@ import { OB11GroupMember } from '../../types' -import { OB11Constructor } from '../../constructor' +import { OB11Entities } from '../../entities' import BaseAction from '../BaseAction' import { ActionName } from '../types' import { selfInfo } from '@/common/globalVars' @@ -17,7 +17,7 @@ class GetGroupMemberList extends BaseAction { const groupMembersArr = Array.from(groupMembers.values()) let _groupMembers = groupMembersArr.map(item => { - return OB11Constructor.groupMember(payload.group_id.toString(), item) + return OB11Entities.groupMember(payload.group_id.toString(), item) }) const MemberMap: Map = new Map() diff --git a/src/onebot11/action/msg/GetMsg.ts b/src/onebot11/action/msg/GetMsg.ts index 4681d46..1782256 100644 --- a/src/onebot11/action/msg/GetMsg.ts +++ b/src/onebot11/action/msg/GetMsg.ts @@ -1,6 +1,6 @@ import BaseAction from '../BaseAction' import { OB11Message } from '../../types' -import { OB11Constructor } from '../../constructor' +import { OB11Entities } from '../../entities' import { ActionName } from '../types' import { MessageUnique } from '@/common/utils/messageUnique' @@ -28,7 +28,7 @@ class GetMsg extends BaseAction { chatType: msgIdWithPeer.Peer.chatType } const msg = this.adapter.getMsgCache(msgIdWithPeer.MsgId) ?? (await this.ctx.ntMsgApi.getMsgsByMsgId(peer, [msgIdWithPeer.MsgId])).msgList[0] - const retMsg = await OB11Constructor.message(this.ctx, msg) + const retMsg = await OB11Entities.message(this.ctx, msg) retMsg.message_id = MessageUnique.createMsg(peer, msg.msgId)! retMsg.message_seq = retMsg.message_id retMsg.real_id = retMsg.message_id diff --git a/src/onebot11/action/user/GetFriendList.ts b/src/onebot11/action/user/GetFriendList.ts index 103dde6..420a3d6 100644 --- a/src/onebot11/action/user/GetFriendList.ts +++ b/src/onebot11/action/user/GetFriendList.ts @@ -1,6 +1,6 @@ import BaseAction from '../BaseAction' import { OB11User } from '../../types' -import { OB11Constructor } from '../../constructor' +import { OB11Entities } from '../../entities' import { ActionName } from '../types' import { getBuildVersion } from '@/common/utils' @@ -14,9 +14,9 @@ export class GetFriendList extends BaseAction { protected async _handle(payload: Payload) { const refresh = payload?.no_cache === true || payload?.no_cache === 'true' if (getBuildVersion() >= 26702) { - return OB11Constructor.friendsV2(await this.ctx.ntFriendApi.getBuddyV2(refresh)) + return OB11Entities.friendsV2(await this.ctx.ntFriendApi.getBuddyV2(refresh)) } - return OB11Constructor.friends(await this.ctx.ntFriendApi.getFriends(refresh)) + return OB11Entities.friends(await this.ctx.ntFriendApi.getFriends(refresh)) } } @@ -27,7 +27,7 @@ export class GetFriendWithCategory extends BaseAction { protected async _handle(payload: void) { if (getBuildVersion() >= 26702) { //全新逻辑 - return OB11Constructor.friendsV2(await this.ctx.ntFriendApi.getBuddyV2ExWithCate(true)) + return OB11Entities.friendsV2(await this.ctx.ntFriendApi.getBuddyV2ExWithCate(true)) } else { throw new Error('this ntqq version not support, must be 26702 or later') } diff --git a/src/onebot11/adapter.ts b/src/onebot11/adapter.ts index 9b2bab1..96b347f 100644 --- a/src/onebot11/adapter.ts +++ b/src/onebot11/adapter.ts @@ -1,5 +1,5 @@ import { Service, Context } from 'cordis' -import { OB11Constructor } from './constructor' +import { OB11Entities } from './entities' import { GroupNotify, GroupNotifyTypes, @@ -203,7 +203,7 @@ class OneBot11Adapter extends Service { message.msgShortId = MessageUnique.createMsg(peer, message.msgId) this.addMsgCache(message) - OB11Constructor.message(this.ctx, message) + OB11Entities.message(this.ctx, message) .then((msg) => { if (!this.config.debug && msg.message.length === 0) { return @@ -219,13 +219,13 @@ class OneBot11Adapter extends Service { }) .catch((e) => this.ctx.logger.error('constructMessage error: ', e.stack.toString())) - OB11Constructor.GroupEvent(this.ctx, message).then((groupEvent) => { + OB11Entities.groupEvent(this.ctx, message).then((groupEvent) => { if (groupEvent) { this.dispatch(groupEvent) } }) - OB11Constructor.PrivateEvent(this.ctx, message).then((privateEvent) => { + OB11Entities.privateEvent(this.ctx, message).then((privateEvent) => { if (privateEvent) { this.dispatch(privateEvent) } @@ -240,7 +240,7 @@ class OneBot11Adapter extends Service { if (!oriMessageId) { continue } - OB11Constructor.RecallEvent(this.ctx, message, oriMessageId).then((recallEvent) => { + OB11Entities.recallEvent(this.ctx, message, oriMessageId).then((recallEvent) => { if (recallEvent) { this.dispatch(recallEvent) } diff --git a/src/onebot11/constructor.ts b/src/onebot11/entities.ts similarity index 97% rename from src/onebot11/constructor.ts rename to src/onebot11/entities.ts index 77c480d..43ff05e 100644 --- a/src/onebot11/constructor.ts +++ b/src/onebot11/entities.ts @@ -37,7 +37,7 @@ import { OB11GroupTitleEvent } from './event/notice/OB11GroupTitleEvent' import { OB11GroupCardEvent } from './event/notice/OB11GroupCardEvent' import { OB11GroupDecreaseEvent } from './event/notice/OB11GroupDecreaseEvent' import { OB11GroupMsgEmojiLikeEvent } from './event/notice/OB11MsgEmojiLikeEvent' -import { mFaceCache } from '../ntqqapi/constructor' +import { mFaceCache } from '../ntqqapi/entities' import { OB11FriendAddNoticeEvent } from './event/notice/OB11FriendAddNoticeEvent' import { OB11FriendRecallNoticeEvent } from './event/notice/OB11FriendRecallNoticeEvent' import { OB11GroupRecallNoticeEvent } from './event/notice/OB11GroupRecallNoticeEvent' @@ -48,7 +48,7 @@ import { omit, isNullable } from 'cosmokit' import { Context } from 'cordis' import { selfInfo } from '@/common/globalVars' -export namespace OB11Constructor { +export namespace OB11Entities { export async function message(ctx: Context, msg: RawMessage): Promise { let config = getConfigUtil().getConfig() const { @@ -319,7 +319,7 @@ export namespace OB11Constructor { return resMsg } - export async function PrivateEvent(ctx: Context, msg: RawMessage): Promise { + export async function privateEvent(ctx: Context, msg: RawMessage): Promise { if (msg.chatType !== ChatType.friend) { return } @@ -352,7 +352,7 @@ export namespace OB11Constructor { } } - export async function GroupEvent(ctx: Context, msg: RawMessage): Promise { + export async function groupEvent(ctx: Context, msg: RawMessage): Promise { if (msg.chatType !== ChatType.group) { return } @@ -607,7 +607,7 @@ export namespace OB11Constructor { } } - export async function RecallEvent( + export async function recallEvent( ctx: Context, msg: RawMessage, shortId: number @@ -638,13 +638,13 @@ export namespace OB11Constructor { user_id: parseInt(friend.uin), nickname: friend.nick, remark: friend.remark, - sex: OB11Constructor.sex(friend.sex!), + sex: sex(friend.sex!), level: (friend.qqLevel && calcQQLevel(friend.qqLevel)) || 0, } } export function friends(friends: User[]): OB11User[] { - return friends.map(OB11Constructor.friend) + return friends.map(friend) } export function friendsV2(friends: FriendV2[]): OB11User[] { @@ -689,7 +689,7 @@ export namespace OB11Constructor { user_id: parseInt(member.uin), nickname: member.nick, card: member.cardName, - sex: OB11Constructor.sex(member.sex!), + sex: sex(member.sex!), age: 0, area: '', level: '0', @@ -701,7 +701,7 @@ export namespace OB11Constructor { card_changeable: true, is_robot: member.isRobot, shut_up_timestamp: member.shutUpTime, - role: OB11Constructor.groupMemberRole(member.role), + role: groupMemberRole(member.role), title: member.memberSpecialTitle || '', } } @@ -711,7 +711,7 @@ export namespace OB11Constructor { ...user, user_id: parseInt(user.uin), nickname: user.nick, - sex: OB11Constructor.sex(user.sex!), + sex: sex(user.sex!), age: 0, qid: user.qid, login_days: 0, @@ -719,10 +719,6 @@ export namespace OB11Constructor { } } - export function groupMembers(group: Group): OB11GroupMember[] { - return group.members.map((m) => OB11Constructor.groupMember(group.groupCode, m)) - } - export function group(group: Group): OB11Group { return { group_id: parseInt(group.groupCode), @@ -733,6 +729,6 @@ export namespace OB11Constructor { } export function groups(groups: Group[]): OB11Group[] { - return groups.map(OB11Constructor.group) + return groups.map(group) } } diff --git a/src/onebot11/helper/createMessage.ts b/src/onebot11/helper/createMessage.ts index 779d371..0868176 100644 --- a/src/onebot11/helper/createMessage.ts +++ b/src/onebot11/helper/createMessage.ts @@ -15,7 +15,7 @@ import { } from '../types' import { decodeCQCode } from '../cqcode' import { Peer } from '@/ntqqapi/types/msg' -import { SendMsgElementConstructor } from '@/ntqqapi/constructor' +import { SendElementEntities } from '@/ntqqapi/entities' import { MessageUnique } from '@/common/utils/messageUnique' import { selfInfo } from '@/common/globalVars' import { uri2local } from '@/common/utils' @@ -37,7 +37,7 @@ export async function createSendElements( case OB11MessageDataType.text: { const text = sendMsg.data?.text if (text) { - sendElements.push(SendMsgElementConstructor.text(sendMsg.data!.text)) + sendElements.push(SendElementEntities.text(sendMsg.data!.text)) } } break @@ -63,7 +63,7 @@ export async function createSendElements( } } if (isAdmin && remainAtAllCount > 0) { - sendElements.push(SendMsgElementConstructor.at(atQQ, atQQ, AtType.atAll, '@全体成员')) + sendElements.push(SendElementEntities.at(atQQ, atQQ, AtType.atAll, '@全体成员')) } } else if (peer.chatType === ChatType.group) { @@ -71,14 +71,14 @@ export async function createSendElements( if (atMember) { const display = `@${atMember.cardName || atMember.nick}` sendElements.push( - SendMsgElementConstructor.at(atQQ, atMember.uid, AtType.atUser, display), + SendElementEntities.at(atQQ, atMember.uid, AtType.atUser, display), ) } else { const atNmae = sendMsg.data?.name const uid = await ctx.ntUserApi.getUidByUin(atQQ) || '' const display = atNmae ? `@${atNmae}` : '' sendElements.push( - SendMsgElementConstructor.at(atQQ, uid, AtType.atUser, display), + SendElementEntities.at(atQQ, uid, AtType.atUser, display), ) } } @@ -98,7 +98,7 @@ export async function createSendElements( )).msgList[0] if (replyMsg) { sendElements.push( - SendMsgElementConstructor.reply( + SendElementEntities.reply( replyMsg.msgSeq, replyMsg.msgId, replyMsg.senderUin!, @@ -112,13 +112,13 @@ export async function createSendElements( case OB11MessageDataType.face: { const faceId = sendMsg.data?.id if (faceId) { - sendElements.push(SendMsgElementConstructor.face(parseInt(faceId))) + sendElements.push(SendElementEntities.face(parseInt(faceId))) } } break case OB11MessageDataType.mface: { sendElements.push( - SendMsgElementConstructor.mface( + SendElementEntities.mface( +sendMsg.data.emoji_package_id, sendMsg.data.emoji_id, sendMsg.data.key, @@ -128,7 +128,7 @@ export async function createSendElements( } break case OB11MessageDataType.image: { - const res = await SendMsgElementConstructor.pic( + const res = await SendElementEntities.pic( ctx, (await handleOb11FileLikeMessage(ctx, sendMsg, { deleteAfterSentFiles })).path, sendMsg.data.summary || '', @@ -140,7 +140,7 @@ export async function createSendElements( break case OB11MessageDataType.file: { const { path, fileName } = await handleOb11FileLikeMessage(ctx, sendMsg, { deleteAfterSentFiles }) - sendElements.push(await SendMsgElementConstructor.file(ctx, path, fileName)) + sendElements.push(await SendElementEntities.file(ctx, path, fileName)) } break case OB11MessageDataType.video: { @@ -150,18 +150,18 @@ export async function createSendElements( const uri2LocalRes = await uri2local(thumb) if (uri2LocalRes.success) thumb = uri2LocalRes.path } - const res = await SendMsgElementConstructor.video(ctx, path, fileName, thumb) + const res = await SendElementEntities.video(ctx, path, fileName, thumb) deleteAfterSentFiles.push(res.videoElement.filePath) sendElements.push(res) } break case OB11MessageDataType.voice: { const { path } = await handleOb11FileLikeMessage(ctx, sendMsg, { deleteAfterSentFiles }) - sendElements.push(await SendMsgElementConstructor.ptt(ctx, path)) + sendElements.push(await SendElementEntities.ptt(ctx, path)) } break case OB11MessageDataType.json: { - sendElements.push(SendMsgElementConstructor.ark(sendMsg.data.data)) + sendElements.push(SendElementEntities.ark(sendMsg.data.data)) } break case OB11MessageDataType.poke: { @@ -170,12 +170,12 @@ export async function createSendElements( break case OB11MessageDataType.dice: { const resultId = sendMsg.data?.result - sendElements.push(SendMsgElementConstructor.dice(resultId)) + sendElements.push(SendElementEntities.dice(resultId)) } break case OB11MessageDataType.RPS: { const resultId = sendMsg.data?.result - sendElements.push(SendMsgElementConstructor.rps(resultId)) + sendElements.push(SendElementEntities.rps(resultId)) } break }