diff --git a/example.js b/example.js index 24fe7cc..6f6a327 100644 --- a/example.js +++ b/example.js @@ -470,6 +470,12 @@ client.on('message', async msg => { console.log(statuses); const chat = await statuses[0]?.getChat(); // Get user chat of a first status console.log(chat); + } else if (msg.body === '!sendMediaHD' && msg.hasQuotedMsg) { + const quotedMsg = await msg.getQuotedMessage(); + if (quotedMsg.hasMedia) { + const media = await quotedMsg.downloadMedia(); + await client.sendMessage(msg.from, media, { sendMediaAsHd: true }); + } } else if (msg.body === '!parseVCard') { const vCard = 'BEGIN:VCARD\n' + diff --git a/index.d.ts b/index.d.ts index 5d511f4..46c9a0e 100644 --- a/index.d.ts +++ b/index.d.ts @@ -1225,6 +1225,8 @@ declare namespace WAWebJS { sendMediaAsSticker?: boolean /** Send media as document */ sendMediaAsDocument?: boolean + /** Send media as quality HD */ + sendMediaAsHd?: boolean /** Send photo/video as a view once message */ isViewOnce?: boolean /** Automatically parse vCards and send them as contacts */ diff --git a/src/Client.js b/src/Client.js index 5f73f25..bd9758f 100644 --- a/src/Client.js +++ b/src/Client.js @@ -840,6 +840,7 @@ class Client extends EventEmitter { * @property {boolean} [sendVideoAsGif=false] - Send video as gif * @property {boolean} [sendMediaAsSticker=false] - Send media as a sticker * @property {boolean} [sendMediaAsDocument=false] - Send media as a document + * @property {boolean} [sendMediaAsHd=false] - Send image as quality HD * @property {boolean} [isViewOnce=false] - Send photo/video as a view once message * @property {boolean} [parseVCards=true] - Automatically parse vCards and send them as contacts * @property {string} [caption] - Image or video caption @@ -894,6 +895,7 @@ class Client extends EventEmitter { sendVideoAsGif: options.sendVideoAsGif, sendMediaAsSticker: options.sendMediaAsSticker, sendMediaAsDocument: options.sendMediaAsDocument, + sendMediaAsHd: options.sendMediaAsHd, caption: options.caption, quotedMessageId: options.quotedMessageId, parseVCards: options.parseVCards !== false, @@ -2145,7 +2147,7 @@ class Client extends EventEmitter { return false; }, chatId); } - + /** * Save new contact to user's addressbook or edit the existing one * @param {string} phoneNumber The contact's phone number in a format "17182222222", where "1" is a country code diff --git a/src/util/Injected/Utils.js b/src/util/Injected/Utils.js index abcd862..d17e6d4 100644 --- a/src/util/Injected/Utils.js +++ b/src/util/Injected/Utils.js @@ -34,6 +34,7 @@ exports.LoadUtils = () => { forceGif: options.sendVideoAsGif, forceVoice: options.sendAudioAsVoice, forceDocument: options.sendMediaAsDocument, + forceMediaHd: options.sendMediaAsHd, sendToChannel: isChannel }); mediaOptions.caption = options.caption; @@ -363,16 +364,21 @@ exports.LoadUtils = () => { }; }; - window.WWebJS.processMediaData = async (mediaInfo, { forceSticker, forceGif, forceVoice, forceDocument, sendToChannel }) => { + window.WWebJS.processMediaData = async (mediaInfo, { forceSticker, forceGif, forceVoice, forceDocument, forceMediaHd, sendToChannel }) => { const file = window.WWebJS.mediaInfoToFile(mediaInfo); const opaqueData = await window.Store.OpaqueData.createFromData(file, file.type); - const mediaPrep = window.Store.MediaPrep.prepRawMedia( - opaqueData, { - asSticker: forceSticker, - asGif: forceGif, - isPtt: forceVoice, - asDocument: forceDocument - }); + const mediaParams = { + asSticker: forceSticker, + asGif: forceGif, + isPtt: forceVoice, + asDocument: forceDocument + }; + + if (forceMediaHd && file.type.indexOf('image/') === 0) { + mediaParams.maxDimension = 2560; + } + + const mediaPrep = window.Store.MediaPrep.prepRawMedia(opaqueData, mediaParams); const mediaData = await mediaPrep.waitForPrep(); const mediaObject = window.Store.MediaObject.getOrCreateMediaObject(mediaData.filehash); const mediaType = window.Store.MediaTypes.msgToMediaType({