diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 0000000..4a3a146 --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1,3 @@ +github: [pedroslopez, PurpShell] +ko_fi: pedroslopez +custom: ["paypal.me/psla", "buymeacoff.ee/pedroslopez"] diff --git a/README.md b/README.md index 3824f63..242dc28 100644 --- a/README.md +++ b/README.md @@ -94,7 +94,7 @@ You can support the maintainer of this project through the links below - [Support via GitHub Sponsors](https://github.com/sponsors/pedroslopez) - [Support via PayPal](https://www.paypal.me/psla/) -- [Sign up for DigitalOcean](https://m.do.co/c/73f906a36ed4) and get $100 in credit when you sign up (Referral) +- [Sign up for DigitalOcean](https://m.do.co/c/73f906a36ed4) and get $200 in credit when you sign up (Referral) ## Disclaimer diff --git a/example.js b/example.js index 96a2553..e169bb3 100644 --- a/example.js +++ b/example.js @@ -280,6 +280,15 @@ client.on('change_state', state => { console.log('CHANGE STATE', state ); }); +// Change to false if you don't want to reject incoming calls +let rejectCalls = true; + +client.on('call', async (call) => { + console.log('Call received, rejecting. GOTO Line 261 to disable', call); + if (rejectCalls) await call.reject(); + await client.sendMessage(call.from, `[${call.fromMe ? 'Outgoing' : 'Incoming'}] Phone call from ${call.from}, type ${call.isGroup ? 'group' : ''} ${call.isVideo ? 'video' : 'audio'} call. ${rejectCalls ? 'This call was automatically rejected by the script.' : ''}`); +}); + client.on('disconnected', (reason) => { console.log('Client was logged out', reason); }); diff --git a/index.d.ts b/index.d.ts index e05ec5f..9774cd3 100644 --- a/index.d.ts +++ b/index.d.ts @@ -1328,6 +1328,9 @@ declare namespace WAWebJS { webClientShouldHandle: boolean, /** Object with participants */ participants: object + + /** Reject the call */ + reject: () => Promise } /** Message type List */ diff --git a/src/structures/Call.js b/src/structures/Call.js index 1e6644d..0e48989 100644 --- a/src/structures/Call.js +++ b/src/structures/Call.js @@ -62,7 +62,15 @@ class Call extends Base { return super._patch(data); } - + + /** + * Reject the call + */ + async reject() { + return this.client.pupPage.evaluate((peerJid, id) => { + return window.WWebJS.rejectCall(peerJid, id); + }, this.from, this.id); + } } module.exports = Call; \ No newline at end of file diff --git a/src/util/Constants.js b/src/util/Constants.js index d062c7a..4c22fa1 100644 --- a/src/util/Constants.js +++ b/src/util/Constants.js @@ -51,7 +51,7 @@ exports.Events = { DISCONNECTED: 'disconnected', STATE_CHANGED: 'change_state', BATTERY_CHANGED: 'change_battery', - INCOMING_CALL: 'incoming_call', + INCOMING_CALL: 'call', REMOTE_SESSION_SAVED: 'remote_session_saved' }; diff --git a/src/util/Injected.js b/src/util/Injected.js index 5260ce9..1ccbd01 100644 --- a/src/util/Injected.js +++ b/src/util/Injected.js @@ -53,6 +53,8 @@ exports.ExposeStore = (moduleRaidStr) => { window.Store.ReplyUtils = window.mR.findModule('canReplyMsg').length > 0 && window.mR.findModule('canReplyMsg')[0]; window.Store.MsgActionChecks = window.mR.findModule('canSenderRevokeMsg')[0]; window.Store.QuotedMsg = window.mR.findModule('getQuotedMsgObj')[0]; + window.Store.Socket = window.mR.findModule('deprecatedSendIq')[0]; + window.Store.SocketWap = window.mR.findModule('wap')[0]; window.Store.StickerTools = { ...window.mR.findModule('toWebpSticker')[0], ...window.mR.findModule('addWebpMetadata')[0] @@ -930,4 +932,21 @@ exports.LoadUtils = () => { return undefined; }; + + window.WWebJS.rejectCall = async (peerJid, id) => { + peerJid = peerJid.split('@')[0] + '@s.whatsapp.net'; + let userId = window.Store.User.getMaybeMeUser().user + '@s.whatsapp.net'; + const stanza = window.Store.SocketWap.wap('call', { + id: window.Store.SocketWap.generateId(), + from: window.Store.SocketWap.USER_JID(userId), + to: window.Store.SocketWap.USER_JID(peerJid), + }, [ + window.Store.SocketWap.wap('reject', { + 'call-id': id, + 'call-creator': window.Store.SocketWap.USER_JID(peerJid), + count: '0', + }) + ]); + await window.Store.Socket.deprecatedCastStanza(stanza); + }; };