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

7
index.d.ts vendored
View file

@ -99,6 +99,9 @@ declare namespace WAWebJS {
/** Get message by ID */
getMessageById(messageId: string): Promise<Message>
/** Gets instances of all pinned messages in a chat */
getPinnedMessages(chatId: string): Promise<[Message]|[]>
/** Get all current contact instances */
getContacts(): Promise<Contact[]>
@ -370,7 +373,7 @@ declare namespace WAWebJS {
ack: MessageAck
) => void): this
/** Emitted when an ack event occurrs on message type */
/** Emitted when an edit event occurrs on message type */
on(event: 'message_edit', listener: (
/** The message that was affected */
message: Message,
@ -1601,6 +1604,8 @@ declare namespace WAWebJS {
getLabels: () => Promise<Label[]>,
/** Add or remove labels to this Chat */
changeLabels: (labelIds: Array<string | number>) => Promise<void>
/** Gets instances of all pinned messages in a chat */
getPinnedMessages: () => Promise<[Message]|[]>
/** Sync history conversation of the Chat */
syncHistory: () => Promise<boolean>
}

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');