From 55f1bc48f2e15c3bc1efb327864469070a0f8d83 Mon Sep 17 00:00:00 2001 From: Flysoft <1922656933@qq.com> Date: Sun, 18 Jun 2023 20:42:53 +0800 Subject: [PATCH] feat(renderer/api/nt): support getting previous messages (#29) * feat(renderer/api/nt): support getting previous messages * feat(examples/auto-reply): add example for `getPreviousMessages` * fix(renderer/api/nt): don't throw error when no message available --- .../qqntim.json" | 2 +- .../renderer.js" | 24 ++++++++++++++++++ src/renderer/api/nt/index.ts | 25 +++++++++++++++++++ 3 files changed, 50 insertions(+), 1 deletion(-) diff --git "a/examples/\350\207\252\345\212\250\345\233\236\345\244\215/qqntim.json" "b/examples/\350\207\252\345\212\250\345\233\236\345\244\215/qqntim.json" index f3b3c67..58ad0db 100644 --- "a/examples/\350\207\252\345\212\250\345\233\236\345\244\215/qqntim.json" +++ "b/examples/\350\207\252\345\212\250\345\233\236\345\244\215/qqntim.json" @@ -2,5 +2,5 @@ "id": "example-auto-reply", "name": "示例插件:自动回复", "author": "Flysoft", - "injections": [{ "type": "renderer", "script": "renderer.js" }] + "injections": [{ "type": "renderer", "script": "renderer.js", "page": "main" }] } diff --git "a/examples/\350\207\252\345\212\250\345\233\236\345\244\215/renderer.js" "b/examples/\350\207\252\345\212\250\345\233\236\345\244\215/renderer.js" index 5941983..3866194 100644 --- "a/examples/\350\207\252\345\212\250\345\233\236\345\244\215/renderer.js" +++ "b/examples/\350\207\252\345\212\250\345\233\236\345\244\215/renderer.js" @@ -1,10 +1,34 @@ module.exports = (qqntim) => { qqntim.nt.getFriendsList().then((list) => { console.log("[Example-AutoReply] 好友列表", list); + list.forEach((friend) => + qqntim.nt + .getPreviousMessages({ chatType: "friend", uid: friend.uid }, 20) + .then((messages) => + console.log( + "[Example-AutoReply] 好友 " + + friend.nickName + + " 的最近 20 条消息", + messages + ) + ) + ); }); + qqntim.nt.getGroupsList().then((list) => { console.log("[Example-AutoReply] 群组列表", list); + list.forEach((group) => + qqntim.nt + .getPreviousMessages({ chatType: "group", uid: group.uid }, 20) + .then((messages) => + console.log( + "[Example-AutoReply] 群组 " + group.name + " 的最近 20 条消息", + messages + ) + ) + ); }); + qqntim.nt.on("new-messages", (messages) => { console.log("[Example-AutoReply] 收到新消息", messages); messages.forEach((message) => { diff --git a/src/renderer/api/nt/index.ts b/src/renderer/api/nt/index.ts index f1b25cc..edfcda8 100644 --- a/src/renderer/api/nt/index.ts +++ b/src/renderer/api/nt/index.ts @@ -239,6 +239,7 @@ class NT extends (EventEmitter as new () => TypedEmitter) { this.once("friends-list-updated", (list) => resolve(list)); }); } + async getGroupsList(forced: boolean) { ntCall("ns-ntApi-2", "nodeIKernelGroupService/getGroupList", [ { forceFetch: forced }, @@ -248,6 +249,30 @@ class NT extends (EventEmitter as new () => TypedEmitter) { this.once("groups-list-updated", (list) => resolve(list)); }); } + + async getPreviousMessages(peer: Peer, count: number = 20, startMsgId = "0") { + try { + const msgs = await ntCall( + "ns-ntApi-2", + "nodeIKernelMsgService/getMsgsIncludeSelf", + [ + { + peer: destructPeer(peer), + msgId: startMsgId, + cnt: count, + queryOrder: true, + }, + undefined, + ] + ); + const messages = (msgs.msgList as any[]).map((msg) => + constructMessage(msg, this.pendingMediaDownloads) + ); + return messages; + } catch { + return []; + } + } } export const nt = new NT();