!break: 获取消息方法更新: 支持 offset, 客户端协议破坏性变更参数为对象

This commit is contained in:
CrescentLeaf
2025-12-28 00:30:51 +08:00
parent 01c1ccfd00
commit 940845db84
3 changed files with 18 additions and 13 deletions

View File

@@ -81,23 +81,24 @@ export default class Chat extends BaseClientObject {
* 对话消息 * 对话消息
* ================================================ * ================================================
*/ */
async getMessages(page: number = 0) { async getMessages(args: { page?: number, offset?: number }) {
return (await this.getMessageBeans(page)).map((v) => new Message(this.client, v)) return (await this.getMessageBeans(args)).map((v) => new Message(this.client, v))
} }
async getMessagesOrThrow(page: number = 0) { async getMessagesOrThrow(args: { page?: number, offset?: number }) {
return (await this.getMessageBeansOrThrow(page)).map((v) => new Message(this.client, v)) 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 { try {
return await this.getMessageBeansOrThrow(page) return await this.getMessageBeansOrThrow(args)
} catch (_) { } catch (_) {
return [] return []
} }
} }
async getMessageBeansOrThrow(page: number = 0) { async getMessageBeansOrThrow({ page, offset }: { page?: number, offset?: number }) {
const re = await this.client.invoke("Chat.getMessageHistory", { const re = await this.client.invoke("Chat.getMessageHistory", {
token: this.client.access_token, token: this.client.access_token,
page, page,
offset,
target: this.bean.id, target: this.bean.id,
}) })
if (re.code == 200) return re.data!.messages as MessageBean[] if (re.code == 200) return re.data!.messages as MessageBean[]

View File

@@ -87,7 +87,11 @@ export default class ChatApi extends BaseApi {
* @param page 頁面 * @param page 頁面
*/ */
this.registerEvent("Chat.getMessageHistory", (args, { deviceId }) => { 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: "参数缺失", msg: "参数缺失",
code: 400, code: 400,
} }
@@ -112,7 +116,7 @@ export default class ChatApi extends BaseApi {
code: 200, code: 200,
msg: "成功", msg: "成功",
data: { 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),
}, },
} }
}) })

View File

@@ -59,14 +59,14 @@ export default class MessagesManager {
text text
}) })
} }
getMessages(limit: number = 15, offset: number = 0) { 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, offset) as unknown as MessageBean[] 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) => ({ return ls.map((v) => ({
...v, ...v,
chat_id: this.chat.bean.id, chat_id: this.chat.bean.id,
})) }))
} }
getMessagesWithPage(limit: number = 15, page: number = 0) { getMessagesWithPage(limit: number | undefined | null, page: number = 0) {
return this.getMessages(limit, limit * page) return this.getMessagesWithOffset(limit, (limit || 15) * page)
} }
} }