From 173f83808e4255a2b839263cd4af053e0fb71208 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=89=8B=E7=93=9C=E4=B8=80=E5=8D=81=E9=9B=AA?= Date: Fri, 9 Aug 2024 18:17:45 +0800 Subject: [PATCH] chore Api --- src/onebot/action/group/SetGroupBan.ts | 5 ++- src/onebot/action/msg/MarkMsgAsRead.ts | 1 + src/onebot/action/msg/SendMsg/index.ts | 52 ++++++++++++---------- src/onebot/action/user/GetFriendList.ts | 20 +-------- src/onebot/action/user/GetRecentContact.ts | 7 +-- 5 files changed, 40 insertions(+), 45 deletions(-) diff --git a/src/onebot/action/group/SetGroupBan.ts b/src/onebot/action/group/SetGroupBan.ts index 39570a48..eaf77c26 100644 --- a/src/onebot/action/group/SetGroupBan.ts +++ b/src/onebot/action/group/SetGroupBan.ts @@ -19,8 +19,11 @@ export default class SetGroupBan extends BaseAction { PayloadSchema = SchemaData; protected async _handle(payload: Payload): Promise { const NTQQGroupApi = this.CoreContext.getApiContext().GroupApi; + const NTQQUserApi = this.CoreContext.getApiContext().UserApi; + const uid = await NTQQUserApi.getUidByUin(payload.user_id.toString()); + if(!uid) throw new Error('uid error'); await NTQQGroupApi.banMember(payload.group_id.toString(), - [{ uid: member.uid, timeStamp: parseInt(payload.duration.toString()) }]); + [{ uid: uid, timeStamp: parseInt(payload.duration.toString()) }]); return null; } } diff --git a/src/onebot/action/msg/MarkMsgAsRead.ts b/src/onebot/action/msg/MarkMsgAsRead.ts index 05f82ed4..01f1e8ba 100644 --- a/src/onebot/action/msg/MarkMsgAsRead.ts +++ b/src/onebot/action/msg/MarkMsgAsRead.ts @@ -17,6 +17,7 @@ type PlayloadType = FromSchema; class MarkMsgAsRead extends BaseAction { async getPeer(payload: PlayloadType): Promise { const NTQQUserApi = this.CoreContext.getApiContext().UserApi; + const NTQQFriendApi = this.CoreContext.getApiContext().FriendApi; if (payload.user_id) { const peerUid = await NTQQUserApi.getUidByUin(payload.user_id.toString()); if (!peerUid) { diff --git a/src/onebot/action/msg/SendMsg/index.ts b/src/onebot/action/msg/SendMsg/index.ts index 94255d01..ec6c9816 100644 --- a/src/onebot/action/msg/SendMsg/index.ts +++ b/src/onebot/action/msg/SendMsg/index.ts @@ -1,21 +1,20 @@ -import BaseAction from '@/onebot11/action/BaseAction'; + import { OB11MessageData, OB11MessageDataType, OB11MessageMixType, OB11MessageNode, OB11PostSendMsg -} from '@/onebot11/types'; -import { ActionName, BaseCheckResult } from '@/onebot11/action/types'; -import { getGroup } from '@/core/data'; -import { ChatType, ElementType, Group, NTQQFileApi, NTQQFriendApi, NTQQMsgApi, NTQQUserApi, Peer, SendMessageElement, } from '@/core'; +} from '@/onebot/types'; +import { ActionName, BaseCheckResult } from '@/onebot/action/types'; import fs from 'node:fs'; import fsPromise from 'node:fs/promises'; -import { logDebug, logError } from '@/common/utils/log'; -import { decodeCQCode } from '@/onebot11/cqcode'; +import { decodeCQCode } from '@/onebot/helper/cqcode'; import createSendElements from './create-send-elements'; -import { handleForwardNode } from '@/onebot11/action/msg/SendMsg/handle-forward-node'; import { MessageUnique } from '@/common/utils/MessageUnique'; +import { ChatType, ElementType, NapCatCore, Peer, SendMessageElement } from '@/core'; +import BaseAction from '../../BaseAction'; +import { handleForwardNode } from './handle-forward-node'; export interface ReturnDataType { message_id: number; @@ -36,7 +35,9 @@ export function normalize(message: OB11MessageMixType, autoEscape = false): OB11 export { createSendElements }; -export async function sendMsg(peer: Peer, sendElements: SendMessageElement[], deleteAfterSentFiles: string[], waitComplete = true) { +export async function sendMsg(coreContext: NapCatCore, peer: Peer, sendElements: SendMessageElement[], deleteAfterSentFiles: string[], waitComplete = true) { + const NTQQMsgApi = coreContext.getApiContext().MsgApi; + const logger = coreContext.context.logger; if (!sendElements.length) { throw ('消息体无法解析, 请检查是否发送了不支持的消息类型'); } @@ -63,29 +64,31 @@ export async function sendMsg(peer: Peer, sendElements: SendMessageElement[], de timeout += PredictTime;// 10S Basic Timeout + PredictTime( For File 512kb/s ) } } catch (e) { - logError('发送消息计算预计时间异常', e); + logger.logError('发送消息计算预计时间异常', e); } const returnMsg = await NTQQMsgApi.sendMsg(peer, sendElements, waitComplete, timeout); try { - returnMsg!.id = await MessageUnique.createMsg({ chatType: peer.chatType, guildId: '', peerUid: peer.peerUid }, returnMsg!.msgId); + returnMsg!.id = MessageUnique.createMsg({ chatType: peer.chatType, guildId: '', peerUid: peer.peerUid }, returnMsg!.msgId); } catch (e: any) { - logDebug('发送消息id获取失败', e); + logger.logDebug('发送消息id获取失败', e); returnMsg!.id = 0; } - deleteAfterSentFiles.map((f) => { fsPromise.unlink(f).then().catch(e => logError('发送消息删除文件失败', e)); }); + deleteAfterSentFiles.map((f) => { fsPromise.unlink(f).then().catch(e => logger.logError('发送消息删除文件失败', e)); }); return returnMsg; } -async function createContext(payload: OB11PostSendMsg, contextMode: ContextMode): Promise { +async function createContext(coreContext: NapCatCore, payload: OB11PostSendMsg, contextMode: ContextMode): Promise { // This function determines the type of message by the existence of user_id / group_id, // not message_type. // This redundant design of Ob11 here should be blamed. - + const NTQQGroupApi = coreContext.getApiContext().GroupApi; + const NTQQFriendApi = coreContext.getApiContext().FriendApi; + const NTQQUserApi = coreContext.getApiContext().UserApi; if ((contextMode === ContextMode.Group || contextMode === ContextMode.Normal) && payload.group_id) { - const group = (await getGroup(payload.group_id))!; // checked before + const group = (await NTQQGroupApi.getGroups()).find(e => e.groupCode == payload.group_id?.toString()) return { chatType: ChatType.group, - peerUid: group.groupCode + peerUid: payload.group_id.toString() }; } if ((contextMode === ContextMode.Private || contextMode === ContextMode.Normal) && payload.user_id) { @@ -112,14 +115,17 @@ export class SendMsg extends BaseAction { contextMode = ContextMode.Normal; protected async check(payload: OB11PostSendMsg): Promise { + const NTQQGroupApi = this.CoreContext.getApiContext().GroupApi; + const NTQQFriendApi = this.CoreContext.getApiContext().FriendApi; + const NTQQUserApi = this.CoreContext.getApiContext().UserApi; const messages = normalize(payload.message); const nodeElementLength = getSpecialMsgNum(payload, OB11MessageDataType.node); if (nodeElementLength > 0 && nodeElementLength != messages.length) { return { valid: false, message: '转发消息不能和普通消息混在一起发送,转发需要保证message只有type为node的元素' }; } - if (payload.message_type !== 'private' && payload.group_id && !(await getGroup(payload.group_id))) { - return { valid: false, message: `群${payload.group_id}不存在` }; - } + // if (payload.message_type !== 'private' && payload.group_id && !(await getGroup(payload.group_id))) { + // return { valid: false, message: `群${payload.group_id}不存在` }; + // } if (payload.user_id && payload.message_type !== 'group') { const uid = await NTQQUserApi.getUidByUin(payload.user_id.toString()); const isBuddy = await NTQQFriendApi.isBuddy(uid!); @@ -132,7 +138,7 @@ export class SendMsg extends BaseAction { } protected async _handle(payload: OB11PostSendMsg): Promise<{ message_id: number }> { - const peer = await createContext(payload, this.contextMode); + const peer = await createContext(this.CoreContext, payload, this.contextMode); const messages = normalize( payload.message, @@ -156,9 +162,9 @@ export class SendMsg extends BaseAction { } // log("send msg:", peer, sendElements) - const { sendElements, deleteAfterSentFiles } = await createSendElements(messages, peer); + const { sendElements, deleteAfterSentFiles } = await createSendElements(this.CoreContext, messages, peer); //console.log(peer, JSON.stringify(sendElements,null,2)); - const returnMsg = await sendMsg(peer, sendElements, deleteAfterSentFiles); + const returnMsg = await sendMsg(this.CoreContext, peer, sendElements, deleteAfterSentFiles); return { message_id: returnMsg!.id! }; } } diff --git a/src/onebot/action/user/GetFriendList.ts b/src/onebot/action/user/GetFriendList.ts index e72eaa31..c505aece 100644 --- a/src/onebot/action/user/GetFriendList.ts +++ b/src/onebot/action/user/GetFriendList.ts @@ -1,12 +1,8 @@ import { OB11User } from '../../types'; -import { OB11Constructor } from '../../constructor'; -import { friends } from '@/core/data'; +import { OB11Constructor } from '../../helper/data'; import BaseAction from '../BaseAction'; import { ActionName } from '../types'; -import { NTQQFriendApi } from '@/core'; import { FromSchema, JSONSchema } from 'json-schema-to-ts'; -import { requireMinNTQQBuild } from '@/common/utils/QQBasicInfo'; - // no_cache get时传字符串 const SchemaData = { @@ -21,20 +17,8 @@ export default class GetFriendList extends BaseAction { actionName = ActionName.GetFriendList; PayloadSchema = SchemaData; protected async _handle(payload: Payload) { - if (requireMinNTQQBuild('26702')) { //全新逻辑 + const NTQQFriendApi = this.CoreContext.getApiContext().FriendApi; return OB11Constructor.friendsV2(await NTQQFriendApi.getBuddyV2(payload?.no_cache === true || payload?.no_cache === 'true')); - } - if (friends.size === 0 || payload?.no_cache === true || payload?.no_cache === 'true') { - const _friends = await NTQQFriendApi.getFriends(true); - // log('强制刷新好友列表,结果: ', _friends) - if (_friends.length > 0) { - friends.clear(); - for (const friend of _friends) { - friends.set(friend.uid, friend); - } - } - } - return OB11Constructor.friends(Array.from(friends.values())); } } diff --git a/src/onebot/action/user/GetRecentContact.ts b/src/onebot/action/user/GetRecentContact.ts index 9132d244..97cfee34 100644 --- a/src/onebot/action/user/GetRecentContact.ts +++ b/src/onebot/action/user/GetRecentContact.ts @@ -2,8 +2,7 @@ import { FromSchema, JSONSchema } from 'json-schema-to-ts'; import BaseAction from '../BaseAction'; import { ActionName } from '../types'; -import { NTQQMsgApi, NTQQUserApi } from '@/core'; -import { OB11Constructor } from '@/onebot11/constructor'; +import { OB11Constructor } from '@/onebot/helper/data'; const SchemaData = { type: 'object', @@ -18,12 +17,14 @@ export default class GetRecentContact extends BaseAction { actionName = ActionName.GetRecentContact; PayloadSchema = SchemaData; protected async _handle(payload: Payload) { + const NTQQUserApi = this.CoreContext.getApiContext().UserApi; + const NTQQMsgApi = this.CoreContext.getApiContext().MsgApi; const ret = await NTQQUserApi.getRecentContactListSnapShot(parseInt((payload.count || 10).toString())); const data = await Promise.all(ret.info.changedList.map(async (t) => { const FastMsg = await NTQQMsgApi.getMsgsByMsgId({ chatType: t.chatType, peerUid: t.peerUid }, [t.msgId]); if (FastMsg.msgList.length > 0) { //扩展ret.info.changedList - const lastestMsg = await OB11Constructor.message(FastMsg.msgList[0]); + const lastestMsg = await OB11Constructor.message(this.CoreContext, FastMsg.msgList[0], "array"); return { lastestMsg: lastestMsg, peerUin: t.peerUin,