From b74246d69a0e1d8478c55a45d5cc126c06b4e2f7 Mon Sep 17 00:00:00 2001 From: Roi Greenberg Date: Sun, 14 Aug 2022 18:30:14 +0300 Subject: [PATCH 01/11] Add "fromMe" option to fetchMessages (#1444) --- index.d.ts | 4 ++++ src/structures/Chat.js | 13 +++++++++++-- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/index.d.ts b/index.d.ts index a99c508..edf4684 100644 --- a/index.d.ts +++ b/index.d.ts @@ -1062,6 +1062,10 @@ declare namespace WAWebJS { * Set this to Infinity to load all messages. */ limit?: number + /** + * Return only messages from the bot number or vise versa. To get all messages, leave the option undefined. + */ + fromMe?: boolean } /** diff --git a/src/structures/Chat.js b/src/structures/Chat.js index 6f0f0e2..241d297 100644 --- a/src/structures/Chat.js +++ b/src/structures/Chat.js @@ -170,13 +170,22 @@ class Chat extends Base { /** * Loads chat messages, sorted from earliest to latest. - * @param {Object} searchOptions Options for searching messages. Right now only limit is supported. + * @param {Object} searchOptions Options for searching messages. Right now only limit and fromMe is supported. * @param {Number} [searchOptions.limit] The amount of messages to return. If no limit is specified, the available messages will be returned. Note that the actual number of returned messages may be smaller if there aren't enough messages in the conversation. Set this to Infinity to load all messages. + * @param {Boolean} [searchOptions.fromMe] Return only messages from the bot number or vise versa. To get all messages, leave the option undefined. * @returns {Promise>} */ async fetchMessages(searchOptions) { let messages = await this.client.pupPage.evaluate(async (chatId, searchOptions) => { - const msgFilter = m => !m.isNotification; // dont include notification messages + const msgFilter = (m) => { + if (m.isNotification) { + return false; // dont include notification messages + } + if (searchOptions && searchOptions.fromMe && m.id.fromMe !== searchOptions.fromMe) { + return false; + } + return true; + }; const chat = window.Store.Chat.get(chatId); let msgs = chat.msgs.getModelsArray().filter(msgFilter); From c459eca799d93c604713e5d577c399744fa061b4 Mon Sep 17 00:00:00 2001 From: Pedro Lopez Date: Mon, 15 Aug 2022 02:52:17 -0400 Subject: [PATCH 02/11] add release action --- .github/workflows/release.yml | 28 ++++++++++++ tools/publish | 80 +++++++++++++++++++++++++++++++++++ 2 files changed, 108 insertions(+) create mode 100644 .github/workflows/release.yml create mode 100755 tools/publish diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..3c3d623 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,28 @@ +name: release + +on: + workflow_dispatch: + inputs: + release_type: + description: "`alpha`, `alpha-minor`, `alpha-major` release?" + required: true + default: "alpha" + +jobs: + release: + runs-on: ubuntu-latest + if: ${{ github.repository == 'pedroslopez/whatsapp-web.js' }} + steps: + - uses: actions/checkout@v2 + - name: Bump version and publish to NPM + id: publish + run: ./tools/publish ${{ github.event.inputs.release_type }} + env: + NPM_TOKEN: ${{ secrets.RELEASE_NPM_TOKEN }} + - name: Create GitHub Release + id: create_release + uses: ncipollo/release-action@v1 + with: + prerelease: ${{ steps.publish.outputs.PRERELEASE }} + generateReleaseNotes: true + tag: v${{ steps.publish.outputs.NEW_VERSION }} \ No newline at end of file diff --git a/tools/publish b/tools/publish new file mode 100755 index 0000000..80a2670 --- /dev/null +++ b/tools/publish @@ -0,0 +1,80 @@ +#!/bin/bash + +cd "$(dirname "$0")" +cd '..' + +BRANCH=`git rev-parse --abbrev-ref HEAD` +RELEASE_MODE=$1 + +echo "" +echo "-----> CHECK INPUTS" +echo "" + +if [[ "$RELEASE_MODE" == "alpha" ]] +then + PRERELEASE='true' + VERSION_ARGS='prerelease --preid alpha -m "chore: prerelease v%s"' + DIST_TAG="next" +elif [[ "$RELEASE_MODE" == "alpha-minor" ]] +then + PRERELEASE='true' + VERSION_ARGS='preminor --preid alpha -m "chore: prerelease v%s"' + DIST_TAG="next" +elif [[ "$RELEASE_MODE" == "alpha-major" ]] +then + PRERELEASE='true' + VERSION_ARGS='premajor --preid alpha -m "chore: prerelease v%s"' + DIST_TAG="next" +else + echo 'Release Mode required' + exit 1 +fi + +if [ -f ~/.npmrc ]; then + echo "Found existing .npmrc" +else + if [[ -z "$NPM_TOKEN" ]];then + echo "No NPM_TOKEN or ~/.npmrc, exiting.." + exit 1; + else + echo "//registry.npmjs.org/:_authToken=$NPM_TOKEN" >> ~/.npmrc + fi +fi +echo "Publishing as NPM user: `npm whoami`" + +if [[ $BRANCH != 'main' ]]; then + echo "Not on 'main' branch. Exiting" + exit 1 +fi + +if [[ -n $(git status -s) ]]; then + echo "There are uncommitted changes on this branch. Exiting" + exit 1 +fi + +echo "" +echo "-----> BUMP VERSION" +echo "" + +npm version $VERSION_ARGS || exit 1 +git push && git push --tags + +NEW_VERSION=`cat package.json | jq -r .version` +echo "New Version: $NEW_VERSION" + +echo "" +echo "-----> PUSH TO NPM" +echo "" + +npm publish --tag $DIST_TAG + + +echo "" +echo "-----> Done!" +echo "Version $NEW_VERSION published to $DIST_TAG tag" +echo "" + +echo "::set-output name=NEW_VERSION::$NEW_VERSION" +echo "::set-output name=PRERELEASE::$PRELEASE" + +exit 0 \ No newline at end of file From 694a52bf26525a2f31d8766bfbed23ca00644c67 Mon Sep 17 00:00:00 2001 From: Pedro Lopez Date: Mon, 15 Aug 2022 03:22:43 -0400 Subject: [PATCH 03/11] fix(publish): ouput, remove message --- tools/publish | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/tools/publish b/tools/publish index 80a2670..2989faf 100755 --- a/tools/publish +++ b/tools/publish @@ -13,17 +13,17 @@ echo "" if [[ "$RELEASE_MODE" == "alpha" ]] then PRERELEASE='true' - VERSION_ARGS='prerelease --preid alpha -m "chore: prerelease v%s"' + VERSION_ARGS="prerelease --preid alpha" DIST_TAG="next" elif [[ "$RELEASE_MODE" == "alpha-minor" ]] then PRERELEASE='true' - VERSION_ARGS='preminor --preid alpha -m "chore: prerelease v%s"' + VERSION_ARGS="preminor --preid alpha" DIST_TAG="next" elif [[ "$RELEASE_MODE" == "alpha-major" ]] then PRERELEASE='true' - VERSION_ARGS='premajor --preid alpha -m "chore: prerelease v%s"' + VERSION_ARGS="premajor --preid alpha" DIST_TAG="next" else echo 'Release Mode required' @@ -48,7 +48,7 @@ if [[ $BRANCH != 'main' ]]; then fi if [[ -n $(git status -s) ]]; then - echo "There are uncommitted changes on this branch. Exiting" + echo "There are uncommitted changes on this branch. Exiting..." exit 1 fi @@ -75,6 +75,6 @@ echo "Version $NEW_VERSION published to $DIST_TAG tag" echo "" echo "::set-output name=NEW_VERSION::$NEW_VERSION" -echo "::set-output name=PRERELEASE::$PRELEASE" +echo "::set-output name=PRERELEASE::$PRERELEASE" exit 0 \ No newline at end of file From bb09bb74e7aaae72380014fe865b1210c48a2a4f Mon Sep 17 00:00:00 2001 From: "Pedro S. Lopez" Date: Mon, 15 Aug 2022 03:32:40 -0400 Subject: [PATCH 04/11] fix(publish): add git user --- .github/workflows/release.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 3c3d623..89299c6 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -14,6 +14,8 @@ jobs: if: ${{ github.repository == 'pedroslopez/whatsapp-web.js' }} steps: - uses: actions/checkout@v2 + - run: git config --global user.email "hello@wwebjs.dev" + - run: git config --global user.name "WWebJS Bot" - name: Bump version and publish to NPM id: publish run: ./tools/publish ${{ github.event.inputs.release_type }} @@ -25,4 +27,4 @@ jobs: with: prerelease: ${{ steps.publish.outputs.PRERELEASE }} generateReleaseNotes: true - tag: v${{ steps.publish.outputs.NEW_VERSION }} \ No newline at end of file + tag: v${{ steps.publish.outputs.NEW_VERSION }} From c09a22c53360aecf74d12eb5ab9c412739050534 Mon Sep 17 00:00:00 2001 From: "Pedro S. Lopez" Date: Mon, 15 Aug 2022 03:42:06 -0400 Subject: [PATCH 05/11] fix(publish): exit if pushing to github failed --- tools/publish | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/publish b/tools/publish index 2989faf..c3a6a97 100755 --- a/tools/publish +++ b/tools/publish @@ -57,7 +57,7 @@ echo "-----> BUMP VERSION" echo "" npm version $VERSION_ARGS || exit 1 -git push && git push --tags +git push && git push --tags || exit 1 NEW_VERSION=`cat package.json | jq -r .version` echo "New Version: $NEW_VERSION" @@ -77,4 +77,4 @@ echo "" echo "::set-output name=NEW_VERSION::$NEW_VERSION" echo "::set-output name=PRERELEASE::$PRERELEASE" -exit 0 \ No newline at end of file +exit 0 From 09a81d0e1e98abd1c62c3a03bd1e814cedf7924b Mon Sep 17 00:00:00 2001 From: Pedro Lopez Date: Mon, 15 Aug 2022 03:47:51 -0400 Subject: [PATCH 06/11] v1.18.0-alpha.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 13f41c0..2d15522 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "whatsapp-web.js", - "version": "1.17.1", + "version": "1.18.0-alpha.0", "description": "Library for interacting with the WhatsApp Web API ", "main": "./index.js", "typings": "./index.d.ts", From 7fe35747308fad980e6dc5b42149e1802d4ab991 Mon Sep 17 00:00:00 2001 From: "Pedro S. Lopez" Date: Mon, 15 Aug 2022 03:53:57 -0400 Subject: [PATCH 07/11] fix(release): try setting PAT to push to main --- .github/workflows/release.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 89299c6..a5e1d3d 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -14,6 +14,8 @@ jobs: if: ${{ github.repository == 'pedroslopez/whatsapp-web.js' }} steps: - uses: actions/checkout@v2 + with: + token: ${{ secrets.RELEASE_GITHUB_TOKEN }} - run: git config --global user.email "hello@wwebjs.dev" - run: git config --global user.name "WWebJS Bot" - name: Bump version and publish to NPM From bd4df4cf75cbe0fdc91c28f8b85cc6be524826b6 Mon Sep 17 00:00:00 2001 From: WWebJS Bot Date: Mon, 15 Aug 2022 07:54:39 +0000 Subject: [PATCH 08/11] 1.18.0-alpha.1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 2d15522..46ce339 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "whatsapp-web.js", - "version": "1.18.0-alpha.0", + "version": "1.18.0-alpha.1", "description": "Library for interacting with the WhatsApp Web API ", "main": "./index.js", "typings": "./index.d.ts", From 705d4d31fdbfcfdc4a1f997c2864ce23176419ef Mon Sep 17 00:00:00 2001 From: Shir Serlui <70711723+shirser121@users.noreply.github.com> Date: Thu, 18 Aug 2022 19:20:30 +0300 Subject: [PATCH 09/11] Use getCommonGroups not contact (#1623) --- src/Client.js | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/Client.js b/src/Client.js index b36eb96..d3c9bb4 100644 --- a/src/Client.js +++ b/src/Client.js @@ -989,7 +989,13 @@ class Client extends EventEmitter { */ async getCommonGroups(contactId) { const commonGroups = await this.pupPage.evaluate(async (contactId) => { - const contact = window.Store.Contact.get(contactId); + let contact = window.Store.Contact.get(contactId); + if (!contact) { + const wid = window.Store.WidFactory.createUserWid(contactId); + const chatConstructor = window.Store.Contact.getModelsArray().find(c=>!c.isGroup).constructor; + contact = new chatConstructor({id: wid}); + } + if (contact.commonGroups) { return contact.commonGroups.serialize(); } From 62623347e8bcb23ba62ea43d36048b77cee10821 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E0=BC=BA=20L=E1=B4=87G=CC=B8=E1=B4=87=C9=B4D=20=E0=BC=BB?= <39593002+jtourisNS@users.noreply.github.com> Date: Thu, 18 Aug 2022 14:26:46 -0300 Subject: [PATCH 10/11] [Update] - adding catch block on promise for windows error (#1659) --- src/authStrategies/RemoteAuth.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/authStrategies/RemoteAuth.js b/src/authStrategies/RemoteAuth.js index 5ae85cc..f84ba59 100644 --- a/src/authStrategies/RemoteAuth.js +++ b/src/authStrategies/RemoteAuth.js @@ -178,9 +178,9 @@ class RemoteAuth extends BaseAuthStrategy { await fs.promises.rm(dirElement, { recursive: true, force: true - }); + }).catch(() => {}); } else { - await fs.promises.unlink(dirElement); + await fs.promises.unlink(dirElement).catch(() => {}); } } } From b1e0fce5048c51a1c15b20d0e03845190d04d971 Mon Sep 17 00:00:00 2001 From: blox <73058244+soudblox@users.noreply.github.com> Date: Mon, 19 Sep 2022 02:33:43 +0700 Subject: [PATCH 11/11] Allow the deletion of others' messages (#1688) --- src/structures/Message.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/structures/Message.js b/src/structures/Message.js index dc4acaf..e8260dd 100644 --- a/src/structures/Message.js +++ b/src/structures/Message.js @@ -430,14 +430,14 @@ class Message extends Base { /** * Deletes a message from the chat - * @param {?boolean} everyone If true and the message is sent by the current user, will delete it for everyone in the chat. + * @param {?boolean} everyone If true and the message is sent by the current user or the user is an admin, will delete it for everyone in the chat. */ async delete(everyone) { await this.client.pupPage.evaluate((msgId, everyone) => { let msg = window.Store.Msg.get(msgId); - if (everyone && msg.id.fromMe && msg._canRevoke()) { - return window.Store.Cmd.sendRevokeMsgs(msg.chat, [msg], {type: 'Sender'}); + if (everyone && msg._canRevoke()) { + return window.Store.Cmd.sendRevokeMsgs(msg.chat, [msg], { type: msg.id.fromMe ? 'Sender' : 'Admin' }); } return window.Store.Cmd.sendDeleteMsgs(msg.chat, [msg], true);