From d2597bba72ff18ddeb570c397102fda3f81c627b Mon Sep 17 00:00:00 2001 From: tuyuribr <45042245+tuyuribr@users.noreply.github.com> Date: Wed, 18 Sep 2024 04:33:23 -0300 Subject: [PATCH] Count user connected devices (#3223) * Update Store.js * All * Make Eslist god happy --------- Co-authored-by: alechkos <93551621+alechkos@users.noreply.github.com> Co-authored-by: Shir Serlui <70711723+shirser121@users.noreply.github.com> --- example.js | 8 ++++++++ index.d.ts | 10 +++++++++- src/Client.js | 19 +++++++++++++++++-- src/util/Injected/Store.js | 1 + 4 files changed, 35 insertions(+), 3 deletions(-) diff --git a/example.js b/example.js index 74aaf01..4776bff 100644 --- a/example.js +++ b/example.js @@ -450,6 +450,14 @@ client.on('message', async msg => { */ const result = await msg.pin(60); // Will pin a message for 1 minute console.log(result); // True if the operation completed successfully, false otherwise + }else if (msg.body === '!howManyConnections'){ + /** + * Get user device count by ID + * Each WaWeb Connection counts as one device, and the phone (if exists) counts as one + * So for a non-enterprise user with one WaWeb connection it should return "2" + */ + let deviceCount = await client.getContactDeviceCount(msg.from); + await msg.reply(`You have *${deviceCount}* devices connected`); } }); diff --git a/index.d.ts b/index.d.ts index 93b4a4e..9699230 100644 --- a/index.d.ts +++ b/index.d.ts @@ -176,7 +176,15 @@ declare namespace WAWebJS { * @param flag true/false on or off */ setAutoDownloadVideos(flag: boolean): Promise - + + /** + * Get user device count by ID + * Each WaWeb Connection counts as one device, and the phone (if exists) counts as one + * So for a non-enterprise user with one WaWeb connection it should return "2" + * @param {string} contactId + */ + getContactDeviceCount(contactId: string): Promise + /** Changes and returns the archive state of the Chat */ unarchiveChat(chatId: string): Promise diff --git a/src/Client.js b/src/Client.js index d85d8c3..25aa73b 100644 --- a/src/Client.js +++ b/src/Client.js @@ -1617,8 +1617,8 @@ class Client extends EventEmitter { * @returns {Promise>} An array of membership requests */ async getGroupMembershipRequests(groupId) { - return await this.pupPage.evaluate(async (gropId) => { - const groupWid = window.Store.WidFactory.createWid(gropId); + return await this.pupPage.evaluate(async (groupId) => { + const groupWid = window.Store.WidFactory.createWid(groupId); return await window.Store.MembershipRequestUtils.getMembershipApprovalRequests(groupWid); }, groupId); } @@ -1724,6 +1724,21 @@ class Client extends EventEmitter { return flag; }, flag); } + + /** + * Get user device count by ID + * Each WaWeb Connection counts as one device, and the phone (if exists) counts as one + * So for a non-enterprise user with one WaWeb connection it should return "2" + * @param {string} contactId + * @returns {number} + */ + async getContactDeviceCount(contactId) { + let devices = await window.Store.DeviceList.getDeviceIds([window.Store.WidFactory.createWid(contactId)]); + if(devices && devices.length && devices[0] != null && typeof devices[0].devices == 'object'){ + return devices[0].devices.length; + } + return 0; + } } module.exports = Client; \ No newline at end of file diff --git a/src/util/Injected/Store.js b/src/util/Injected/Store.js index 873f09c..a028bed 100644 --- a/src/util/Injected/Store.js +++ b/src/util/Injected/Store.js @@ -97,6 +97,7 @@ exports.ExposeStore = () => { window.Store.Settings = window.require('WAWebUserPrefsGeneral'); window.Store.BotSecret = window.require('WAWebBotMessageSecret'); window.Store.BotProfiles = window.require('WAWebBotProfileCollection'); + window.Store.DeviceList = window.require('WAWebApiDeviceList'); if (window.compareWwebVersions(window.Debug.VERSION, '>=', '2.3000.1014111620')) window.Store.AddonReactionTable = window.require('WAWebAddonReactionTableMode').reactionTableMode;