From 940845db84dbab8b9d7893bd18d740fc1475b489 Mon Sep 17 00:00:00 2001 From: CrescentLeaf Date: Sun, 28 Dec 2025 00:30:51 +0800 Subject: [PATCH] =?UTF-8?q?!break:=20=E8=8E=B7=E5=8F=96=E6=B6=88=E6=81=AF?= =?UTF-8?q?=E6=96=B9=E6=B3=95=E6=9B=B4=E6=96=B0:=20=E6=94=AF=E6=8C=81=20of?= =?UTF-8?q?fset,=20=E5=AE=A2=E6=88=B7=E7=AB=AF=E5=8D=8F=E8=AE=AE=E7=A0=B4?= =?UTF-8?q?=E5=9D=8F=E6=80=A7=E5=8F=98=E6=9B=B4=E5=8F=82=E6=95=B0=E4=B8=BA?= =?UTF-8?q?=E5=AF=B9=E8=B1=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- client-protocol/Chat.ts | 15 ++++++++------- server/api/ChatApi.ts | 8 ++++++-- server/data/MessagesManager.ts | 8 ++++---- 3 files changed, 18 insertions(+), 13 deletions(-) diff --git a/client-protocol/Chat.ts b/client-protocol/Chat.ts index 62142ee..ee76c07 100644 --- a/client-protocol/Chat.ts +++ b/client-protocol/Chat.ts @@ -81,23 +81,24 @@ export default class Chat extends BaseClientObject { * 对话消息 * ================================================ */ - async getMessages(page: number = 0) { - return (await this.getMessageBeans(page)).map((v) => new Message(this.client, v)) + async getMessages(args: { page?: number, offset?: number }) { + return (await this.getMessageBeans(args)).map((v) => new Message(this.client, v)) } - async getMessagesOrThrow(page: number = 0) { - return (await this.getMessageBeansOrThrow(page)).map((v) => new Message(this.client, v)) + async getMessagesOrThrow(args: { page?: number, offset?: number }) { + return (await this.getMessageBeansOrThrow(args)).map((v) => new Message(this.client, v)) } - async getMessageBeans(page: number = 0) { + async getMessageBeans(args: { page?: number, offset?: number }) { try { - return await this.getMessageBeansOrThrow(page) + return await this.getMessageBeansOrThrow(args) } catch (_) { return [] } } - async getMessageBeansOrThrow(page: number = 0) { + async getMessageBeansOrThrow({ page, offset }: { page?: number, offset?: number }) { const re = await this.client.invoke("Chat.getMessageHistory", { token: this.client.access_token, page, + offset, target: this.bean.id, }) if (re.code == 200) return re.data!.messages as MessageBean[] diff --git a/server/api/ChatApi.ts b/server/api/ChatApi.ts index 414cff6..8b31771 100644 --- a/server/api/ChatApi.ts +++ b/server/api/ChatApi.ts @@ -87,7 +87,11 @@ export default class ChatApi extends BaseApi { * @param page 頁面 */ this.registerEvent("Chat.getMessageHistory", (args, { deviceId }) => { - if (this.checkArgsMissing(args, ['token', 'target', 'page'])) return { + if (this.checkArgsMissing(args, ['token', 'target'])) return { + msg: "参数缺失", + code: 400, + } + if (!args.page && !args.offset) return { msg: "参数缺失", code: 400, } @@ -112,7 +116,7 @@ export default class ChatApi extends BaseApi { code: 200, msg: "成功", data: { - messages: MessagesManager.getInstanceForChat(chat).getMessagesWithPage(15, args.page as number), + messages: MessagesManager.getInstanceForChat(chat)[args.page ? 'getMessagesWithPage' : 'getMessagesWithOffset'](null, (args.page ? args.page : args.offset) as number), }, } }) diff --git a/server/data/MessagesManager.ts b/server/data/MessagesManager.ts index f22653d..c7e459f 100644 --- a/server/data/MessagesManager.ts +++ b/server/data/MessagesManager.ts @@ -59,14 +59,14 @@ export default class MessagesManager { text }) } - getMessages(limit: number = 15, offset: number = 0) { - const ls = MessagesManager.database.prepare(`SELECT * FROM ${this.getTableName()} ORDER BY id DESC LIMIT ? OFFSET ?;`).all(limit, offset) as unknown as MessageBean[] + getMessagesWithOffset(limit: number | undefined | null, offset: number = 0) { + const ls = MessagesManager.database.prepare(`SELECT * FROM ${this.getTableName()} ORDER BY id DESC LIMIT ? OFFSET ?;`).all(limit || 15, offset) as unknown as MessageBean[] return ls.map((v) => ({ ...v, chat_id: this.chat.bean.id, })) } - getMessagesWithPage(limit: number = 15, page: number = 0) { - return this.getMessages(limit, limit * page) + getMessagesWithPage(limit: number | undefined | null, page: number = 0) { + return this.getMessagesWithOffset(limit, (limit || 15) * page) } }