feat: pin/unpin messages (#2692)

* feat: add Message.pin and Message.unpin methods

* feat: added usage example

* docs: clarifications
This commit is contained in:
alechkos 2024-01-11 10:24:02 +02:00 • committed by GitHub
commit 8d683a668b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 56 additions and 1 deletions

View file

@ -376,14 +376,35 @@ client.on('message', async msg => {
requesterIds: ['number1@c.us', 'number2@c.us'],
sleep: null
});
} else {
/**
* Pins a message in a chat, a method takes a number in seconds for the message to be pinned.
* WhatsApp default values for duration to pass to the method are:
* 1. 86400 for 24 hours
* 2. 604800 for 7 days
* 3. 2592000 for 30 days
* You can pass your own value:
*/
const result = await msg.pin(60); // Will pin a message for 1 minute
console.log(result); // True if the operation completed successfully, false otherwise
}
});
client.on('message_create', (msg) => {
client.on('message_create', async (msg) => {
// Fired on all message creations, including your own
if (msg.fromMe) {
// do stuff here
}
// Unpins a message
if (msg.fromMe && msg.body.startsWith('!unpin')) {
const pinnedMsg = await msg.getQuotedMessage();
if (pinnedMsg) {
// Will unpin a message
const result = await pinnedMsg.unpin();
console.log(result); // True if the operation completed successfully, false otherwise
}
}
});
client.on('message_ciphertext', (msg) => {

4
index.d.ts vendored
View file

@ -935,6 +935,10 @@ declare namespace WAWebJS {
star: () => Promise<void>,
/** Unstar this message */
unstar: () => Promise<void>,
/** Pins the message (group admins can pin messages of all group members) */
pin: (duration: number) => Promise<boolean>,
/** Unpins the message (group admins can unpin messages of all group members) */
unpin: () => Promise<boolean>,
/** Get information about message delivery status */
getInfo: () => Promise<MessageInfo | null>,
/**

View file

@ -522,6 +522,27 @@ class Message extends Base {
}, this.id._serialized);
}
/**
* Pins the message (group admins can pin messages of all group members)
* @param {number} duration The duration in seconds the message will be pinned in a chat
* @returns {Promise<boolean>} Returns true if the operation completed successfully, false otherwise
*/
async pin(duration) {
return await this.client.pupPage.evaluate(async (msgId, duration) => {
return await window.WWebJS.pinUnpinMsgAction(msgId, 1, duration);
}, this.id._serialized, duration);
}
/**
* Unpins the message (group admins can unpin messages of all group members)
* @returns {Promise<boolean>} Returns true if the operation completed successfully, false otherwise
*/
async unpin() {
return await this.client.pupPage.evaluate(async (msgId) => {
return await window.WWebJS.pinUnpinMsgAction(msgId, 2);
}, this.id._serialized);
}
/**
* Message Info
* @typedef {Object} MessageInfo

View file

@ -58,6 +58,7 @@ exports.ExposeStore = (moduleRaidStr) => {
window.Store.LidUtils = window.mR.findModule('getCurrentLid')[0];
window.Store.WidToJid = window.mR.findModule('widToUserJid')[0];
window.Store.JidToWid = window.mR.findModule('userJidToUserWid')[0];
window.Store.pinUnpinMsg = window.mR.findModule('sendPinInChatMsg')[0].sendPinInChatMsg;
/* eslint-disable no-undef, no-cond-assign */
window.Store.QueryExist = ((m = window.mR.findModule('queryExists')[0]) ? m.queryExists : window.mR.findModule('queryExist')[0].queryWidExists);
@ -1083,4 +1084,12 @@ exports.LoadUtils = () => {
return [];
}
};
window.WWebJS.pinUnpinMsgAction = async (msgId, action, duration) => {
const message = window.Store.Msg.get(msgId);
if (!message) return false;
const response = await window.Store.pinUnpinMsg(message, action, duration);
if (response.messageSendResult === 'OK') return true;
return false;
};
};