feat: get pinned messages (#3004)

* feat: add getPinnedMessage method

* docs: add docs for the method

* chore: fix eslint

* refactor: change logic of getting pinned messages

* refactor: combine all PinnedMsgUtils

* chore: remove comments and mark as ready for review

* style: fix typo

Co-authored-by: crazynds <36674096+crazynds@users.noreply.github.com>

---------

Co-authored-by: crazynds <36674096+crazynds@users.noreply.github.com>
This commit is contained in:
alechkos 2025-08-09 00:34:52 +03:00 • committed by GitHub
commit 18b1d32825
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 38 additions and 1 deletions

View file

@ -1143,6 +1143,29 @@ class Client extends EventEmitter {
return null;
}
/**
* Gets instances of all pinned messages in a chat
* @param {string} chatId The chat ID
* @returns {Promise<[Message]|[]>}
*/
async getPinnedMessages(chatId) {
const pinnedMsgs = await this.pupPage.evaluate(async (chatId) => {
const chatWid = window.Store.WidFactory.createWid(chatId);
const chat = window.Store.Chat.get(chatWid) ?? await window.Store.Chat.find(chatWid);
if (!chat) return [];
const msgs = await window.Store.PinnedMsgUtils.getTable().equals(['chatId'], chatWid.toString());
const pinnedMsgs = msgs.map((msg) => window.Store.Msg.get(msg.parentMsgKey));
return !pinnedMsgs.length
? []
: pinnedMsgs.map((msg) => window.WWebJS.getMessageModel(msg));
}, chatId);
return pinnedMsgs.map((msg) => new Message(this, msg));
}
/**
* Returns an object with information about the invite code's group
* @param {string} inviteCode

View file

@ -279,6 +279,14 @@ class Chat extends Base {
return this.client.addOrRemoveLabels(labelIds, [this.id._serialized]);
}
/**
* Gets instances of all pinned messages in a chat
* @returns {Promise<[Message]|[]>}
*/
async getPinnedMessages() {
return this.client.getPinnedMessages(this.id._serialized);
}
/**
* Sync chat history conversation
* @return {Promise<boolean>} True if operation completed successfully, false otherwise.

View file

@ -97,6 +97,7 @@ exports.ExposeStore = () => {
window.Store.DeviceList = window.require('WAWebApiDeviceList');
window.Store.HistorySync = window.require('WAWebSendNonMessageDataRequest');
window.Store.AddonReactionTable = window.require('WAWebAddonReactionTableMode').reactionTableMode;
window.Store.PinnedMsgUtils = window.require('WAWebPinInChatSchema');
window.Store.ChatGetters = window.require('WAWebChatGetters');
window.Store.UploadUtils = window.require('WAWebUploadManager');
window.Store.WAWebStreamModel = window.require('WAWebStreamModel');