Skip to content

Commit

Permalink
feat: new function and some corrections
Browse files Browse the repository at this point in the history
  • Loading branch information
joaosouz4dev committed Nov 6, 2020
1 parent 24c57fb commit a4be96f
Show file tree
Hide file tree
Showing 9 changed files with 243 additions and 81 deletions.
19 changes: 17 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@

> Venom is a high-performance system developed with JavaScript to create a bot for WhatsApp, support for creating any interaction, such as customer service, media sending, sentence recognition based on artificial intelligence and all types of design architecture for WhatsApp.

# Important Warning

**Future fixes that we will be making on the venom-bot.**
Expand Down Expand Up @@ -170,7 +169,7 @@ venom
Gets the return if the session is `isLogged` or `notLogged` or `browserClose` or `qrReadSuccess` or `qrReadFail` or `autocloseCalled` or `desconnectedMobile` or `deleteToken` or `Create session wss return "serverClose" case server for close`

| Status | Condition |
|----------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------|
| -------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `isLogged` | When the user is already logged in to the browser |
| `notLogged` | When the user is not connected to the browser, it is necessary to scan the QR code through the cell phone in the option WhatsApp Web |
| `browserClose` | If the browser is closed this parameter is returned |
Expand Down Expand Up @@ -430,6 +429,22 @@ await client.reply(
['5218113130740', '5218243160777']
);

// Send message with options
await client.
.sendMessageOptions(
'[email protected]',
'This is a reply!',
{
quotedMessageId: reply,
}
)
.then((retorno) => {
resp = retorno;
})
.catch((e) => {
console.log(e);
});

// Send gif
await client.sendVideoAsGif(
'[email protected]',
Expand Down
23 changes: 22 additions & 1 deletion src/api/layers/sender.layer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,7 @@ declare module WAPI {
const startTyping: (to: string) => void;
const stopTyping: (to: string) => void;
const sendMessage: (to: string, content: string) => Promise<object>;
const sendMessageOptions: (chat: any, content: any, options?: any) => any;
const sendImage: (
imgBase64: string,
to: string,
Expand Down Expand Up @@ -199,6 +200,26 @@ export class SenderLayer extends ListenerLayer {
});
}

public async sendMessageOptions(
chat: any,
content: any,
options?: any
): Promise<any> {
return new Promise(async (resolve, reject) => {
try {
var result = await this.page.evaluate(
({ chat, content, options }) => {
return WAPI.sendMessageOptions(chat, content, options);
},
{ chat, content, options }
);
resolve(result);
} catch (error) {
reject(error);
}
});
}

/**
* Sends image message
* @param to Chat id
Expand Down Expand Up @@ -376,7 +397,7 @@ export class SenderLayer extends ListenerLayer {
filename = filename + '.' + extension;

let b64 = await downloadFileImgHttp(path, MINES()),
obj;
obj: { erro: boolean; to: string; text: string };
if (!b64) {
b64 = await fileToBase64(path);
}
Expand Down
2 changes: 1 addition & 1 deletion src/controllers/browser.ts
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ export async function initWhatsapp(
const timeout = 2 * 1000;
await Promise.race([
waPage.goto(puppeteerConfig.whatsappUrl, { timeout }).catch(() => {}),
waPage.waitForTimeout('body', { timeout }).catch(() => {}),
waPage.waitForSelector('body', { timeout }).catch(() => {}),
]);

return waPage;
Expand Down
76 changes: 2 additions & 74 deletions src/lib/middleware/middleware.ts
Original file line number Diff line number Diff line change
Expand Up @@ -72,80 +72,8 @@ WAPI.waitNewMessages(false, (data: any[]) => {
});
});

WAPI.waitNewAcknowledgements(function (data: {
id: any;
body: any;
type: any;
t: any;
subtype: any;
notifyName: any;
from: any;
to: any;
self: any;
ack: any;
invis: any;
isNewMsg: any;
star: any;
loc: any;
lat: any;
lng: any;
mentionedJidList: any;
isForwarded: any;
labels: any;
ephemeralStartTimestamp: any;
}) {
function ack(data: any) {
switch (data) {
case -7:
return 'MD_DOWNGRADE';
case -6:
return 'INACTIVE';
case -5:
return 'CONTENT_UNUPLOADABLE';
case -4:
return 'CONTENT_TOO_BIG';
case -3:
return 'CONTENT_GONE';
case -2:
return 'EXPIRED';
case -1:
return 'FAILED';
case 0:
return 'CLOCK';
case 1:
return 'SENT';
case 2:
return 'RECEIVED';
case 3:
return 'READ';
case 4:
return 'PLAYED';
}
}
let message = {
id: data.id,
body: data.body,
type: data.type,
t: data.t,
subtype: data.subtype,
notifyName: data.notifyName,
from: data.from,
to: data.to,
self: data.self,
ack: ack(data.ack),
invis: data.invis,
isNewMsg: data.isNewMsg,
star: data.star,
loc: data.loc,
lat: data.lat,
lng: data.lng,
mentionedJidList: data.mentionedJidList,
isForwarded: data.isForwarded,
labels: data.labels,
ephemeralStartTimestamp: data.ephemeralStartTimestamp,
};

WAPI.waitNewAcknowledgements(function (data: any) {
if (window[ExposedFn.OnAck]) {
window[ExposedFn.OnAck](message);
window[ExposedFn.OnAck](data);
}
});
1 change: 1 addition & 0 deletions src/lib/wapi/functions/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,7 @@ export { sendImageAsSticker } from './send-image-as-stricker';
export { sendImageWithProduct } from './send-image-with-product';
export { sendLocation } from './send-location';
export { sendMessage } from './send-message';
export { sendMessageOptions } from './sendMessageOptions';
export { sendMessageWithTags } from './send-message-with-tags';
export { sendMessageWithThumb } from './send-message-with-thumb';
export { sendMessage2 } from './send-message2';
Expand Down
6 changes: 3 additions & 3 deletions src/lib/wapi/functions/send-location.js
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,6 @@ export async function sendLocation(
ephemeralStartTimestamp: undefined,
body: undefined,
mediaData: undefined,
isQuotedMsgAvailable: false,
};

Object.assign(tempMsg, extend);
Expand All @@ -106,13 +105,14 @@ export async function sendLocation(
title: location,
type: 'location',
},
obj,
To = await WAPI.getchatId(chat.id);
if (result[1] == 'success' || result[1] == 'OK') {
var obj = WAPI.scope(To, false, result[1], null);
obj = WAPI.scope(To, false, result[1], null);
Object.assign(obj, m);
return obj;
} else {
var obj = WAPI.scope(To, true, result[1], null);
obj = WAPI.scope(To, true, result[1], null);
Object.assign(obj, m);
return obj;
}
Expand Down
178 changes: 178 additions & 0 deletions src/lib/wapi/functions/sendMessageOptions.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,178 @@
/*
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
mMMMMMMMMMNNNmmNNNMMNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
mmNMMNMMMMNNNNNmmmddhdddNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
mddNMMNy:/odNmmddmmNNmdhhddmNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
NmmdNMNd:--+dNmmddhhddmmhsyhhmdmmNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
NmNmdNmy:.-oyNmmmhmdhho+sososyhhhddNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
NmmNdh+-`.:oyNNdmmdmmdo-://oysssyhhhdmNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
Nmmmoyyyo+osdNmdmmddNNhs+/::/+osyssydyhdNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
NNmhsymMMNmmmmdmdNNddNmsso+++////ossssyyhdmNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
mhhhmNNMNNNhssshhmmddmmssyooooso/::+oysshhhhmMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
mmdhdddNNdyoosyhdmddmmmsoooooyysyys/::/oyyhhhyMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
mdddhddmhsooshdmdmdhhyyyysso/ooo+syhhs/-/+shyhMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
dyyhdmd+ososhdmdmyyhhhhhhhyo++o/+///+ohhso++sdMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
dhdmNNdsossyhmdmsydhssssyhhs/++o/o+//:++yhhy+/hNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
mdmNNNNmhysshddyshdyyy/oss+s::/:://++///++++/::hmNNNNNNNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
NNMNNNmmNNdymNNhshdshdyhdysh+sy+-:++osssosss++yNNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
NmNNNmdNNmNmmmNmyyddyyhdhydyohys/-oo+osssysyyohNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
mmNNNhdNmmNNmNMMNhyyhhhdhyyhmmyh+-/s+sysssyyhyydNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
mNMMMhdNdmMNMMMMMNNmdhdddmhdmmNho/-osoyyo++oyddhhNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
NMMMNmhNdNMNMNMMNmNNNmmmdyoohmhoyo::hsooo++oooydhymMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMNNNhmNNMmmNMNNmmmmdmmdyhhoyddddoo++yoyysooossyhsmMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMNNNmmNNNmdNdNmmddhhhdNNhsmNssdooo/dso++osyyysoymMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMNNNNmNNNNNmddmmNhshNmmmNmNMdhNsh/ohho++/:++MMNNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MNNNMMNNNNmmmhhhhdyosdNmdmMMhoNmhdmys+ooo++/+MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
mmNNNMMNNNNmddmdoodmMMNmmNNhssdmNMMMNdNd/osomMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
NmNdhMNmNNMNmdNddohmMMNNNmdmdddNMMMMMMMMmMNNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
NmNhmMmmmmNNmdNyoNMNmNmdhyyyhdhoyNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
NmdmMmmddddNmmdys+hmMMMmmhysssyy++dMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
NmdNMMdmdddmmNNyshmNNNNNNNdhhs+yy//dMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
NmNMMMdmdddmmMNysdmNNMMMNhhNdhs+y+/:mMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
mmNMMNhmmddNNNMdyydmMMMNdyshNhyoss+:/MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
NmNMMddmmmmNMNMNdsymNNmdhhdNMNdhsss+:yMMMMMMMMMMMMMMMMNNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMdhmmmmmNMNNMmshNMMMmmMMMMMmNdyo+//NMMMMMMMMMMMMMMMhNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMmhmmmmmmNMMNNMyshdhhhyhNMMMMMMdhso+sMMMMMMMMMMMMMMMhmMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMmdmmmmmmmNMMMmNm+ys++oyyNMMMMMMNmmyyoyNMMMMMMMMMMMMMddMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
NmmmmmmmmmmmNMNNmNNyyo+/oohNMMMMMMMMdhhsshmMMMMMMMMMMMyNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
mmNNNNNNmmmmNMMNmmddNmmdhhdmMMMMMMMMMNddhssshmmNNNmmdhdMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
NNNNNNNNNNNNNNNNmNNNNMMMMMNomMMMMMMMMMNNmdhhyyyyyyyhdmMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
Nd+oNMMMMMMMmodo++++++++++m..yNMMMMMNo+mNMMmhssshdNMMNhNMMMMMMMMMMMddMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MN+ /NMMMMMm: d` -ssssss+`d. `+mMMMMN. dNm+:+syso//hNN--yNMMMMMMMd+`yMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMN+ /NMMMm: oM` +NMMMMMNdN. /`.yNMMN. dh.omMMMMMNy.oM- `:hNMMMm+. yMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMN/ /NMm: oNy` :sssmMMMMN. dh-`/mMN. d-/NMMMMMMMMy`m- y/`/dmo..o: yMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMN/ /m: +NNy. /yyyNMMMMN. dNNo`.yN- d.oNMMMMMMMMd d- mNh-`.`+mN/ yMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMN/ . +NMMN- oNMMMMMNdN. dMMMd:`/. ds.dNMMMMMMm::M- dMMNy/dMMN/ yMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMN/ +NMMMN- /yyyyyys d. dMMMMNo` dNy-+ymmmho-+NN- dMMMMMMMMN/ yMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMNyNMMMMN+::::::::::m+/mMMMMMMd: dMMNho///+ymMMN+/mMMMMMMMMNs/hMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMNMMMMMMMMMMMMMMMMMMMMMMMMMMMMNsmMMMMMMMMMMMMMMNNNNMMNNNMMNNNNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNMMMMMMMMMMMMMMNMMNMNMMMNMMNNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNMMNMNMMMNMMNNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNNNMMNNNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
*/

/**
* Send message with options
* @param {string} chatid the numberid [email protected]
* @param {string} content the message
* @param {string} options object aditionais
*/
export async function sendMessageOptions(chatId, content, options = {}) {
const chat = Store.Chat.get(chatId);
let attOptions = {};
if (options.attachment) {
attOptions = await WWebJS.processMediaData(
options.attachment,
options.sendAudioAsVoice
);
content = attOptions.preview;
delete options.attachment;
}

let quotedMsgOptions = {};
if (options.quotedMessageId) {
let quotedMessage = window.Store.Msg.get(options.quotedMessageId);
if (quotedMessage.canReply()) {
quotedMsgOptions = quotedMessage.msgContextInfo(chat);
}
delete options.quotedMessageId;
}

if (options.mentionedJidList) {
options.mentionedJidList = options.mentionedJidList.map(
(cId) => window.Store.Contact.get(cId).id
);
}

let locationOptions = {};
if (options.location) {
locationOptions = {
type: 'location',
loc: options.location.description,
lat: options.location.latitude,
lng: options.location.longitude,
};
delete options.location;
}

let vcardOptions = {};
if (options.contactCard) {
let contact = window.Store.Contact.get(options.contactCard);
vcardOptions = {
body: window.Store.VCard.vcardFromContactModel(contact).vcard,
type: 'vcard',
vcardFormattedName: contact.formattedName,
};
delete options.contactCard;
} else if (options.contactCardList) {
let contacts = options.contactCardList.map((c) =>
window.Store.Contact.get(c)
);
let vcards = contacts.map((c) =>
window.Store.VCard.vcardFromContactModel(c)
);
vcardOptions = {
type: 'multi_vcard',
vcardList: vcards,
body: undefined,
};
delete options.contactCardList;
} else if (
options.parseVCards &&
typeof content === 'string' &&
content.startsWith('BEGIN:VCARD')
) {
delete options.parseVCards;
try {
const parsed = await window.Store.VCard.parseVcard(content);
if (parsed) {
vcardOptions = {
type: 'vcard',
vcardFormattedName: await window.Store.VCard.vcardGetNameFromParsed(
parsed
),
};
}
} catch (_) {
// not a vcard
}
}

if (options.linkPreview) {
delete options.linkPreview;
const link = await window.Store.Validators.findLink(content);
if (link) {
const preview = await window.Store.Wap2.default.queryLinkPreview(
link.url
);
preview.preview = true;
preview.subtype = 'url';
options = { ...options, ...preview };
}
}
const newMsgId = await window.WAPI.getNewMessageId(chat.id);
const fromwWid = await window.Store.Conn.wid;
const message = {
...options,
id: newMsgId,
ack: 0,
body: content,
from: fromwWid,
to: chat.id,
local: !0,
self: 'out',
t: parseInt(new Date().getTime() / 1000),
isNewMsg: !0,
type: 'chat',
...locationOptions,
...attOptions,
...quotedMsgOptions,
...vcardOptions,
};

await window.Store.addAndSendMsgToChat(chat, message);

return newMsgId._serialized;
}
Loading

0 comments on commit a4be96f

Please sign in to comment.