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