Open yoi1616 opened 2 years ago
Could you be more specific about the problem? I've used it and I haven't have any problem to send and receive messages.
Could you be more specific about the problem? I've used it and I haven't have any problem to send and receive messages.
I can't catch the incoming message, can you send me the latest wapi.js?
/**
/**
functions and creates the Store object. */ if (!window.Store) { (function () { function getStore(modules) { let foundCount = 0; let neededObjects = [ { id: "Store", conditions: (module) => (module.default && module.default.Chat && module.default.Msg) ? module.default : null }, { id: "MediaCollection", conditions: (module) => (module.default && module.default.prototype && module.default.prototype.processAttachments) ? module.default : null }, { id: "MediaProcess", conditions: (module) => (module.BLOB) ? module : null }, { id: "Wap", conditions: (module) => (module.createGroup) ? module : null }, { id: "ServiceWorker", conditions: (module) => (module.default && module.default.killServiceWorker) ? module : null }, { id: "State", conditions: (module) => (module.STATE && module.STREAM) ? module : null }, { id: "WapDelete", conditions: (module) => (module.sendConversationDelete && module.sendConversationDelete.length == 2) ? module : null }, { id: "Conn", conditions: (module) => (module.default && module.default.ref && module.default.refTTL) ? module.default : (module.Conn && module.Conn.ref && module.Conn.refTTL?module.Conn:null)}, { id: "WapQuery", conditions: (module) => (module.default && module.instance && module.instance.queryExist) ? module.instance : null }, { id: "CryptoLib", conditions: (module) => (module.decryptE2EMedia) ? module : null }, { id: "OpenChat", conditions: (module) => (module.default && module.default.prototype && module.default.prototype.openChat) ? module.default : null }, { id: "UserConstructor", conditions: (module) => (module.default && module.default.prototype && module.default.prototype.isServer && module.default.prototype.isUser) ? module.default : null }, { id: "SendTextMsgToChat", conditions: (module) => (module.sendTextMsgToChat) ? module.sendTextMsgToChat : null }, { id: "SendSeen", conditions: (module) => (module.sendSeen) ? module.sendSeen : null }, { id: "sendDelete", conditions: (module) => (module.sendDelete) ? module.sendDelete : null }, { id: "FeatureChecker", conditions: (module) => (module && module.getProtobufFeatureName) ? module : null }, { id: "GetMaybeMeUser", conditions: (module) => (module && module.getMaybeMeUser) ? module : null }, { id: "QueryExist", conditions: (module) => (module.queryExist) ? module : null }, { id: "FindChat", conditions: (module) => module.findChat ? module : module.default && module.default.findChat ? module.default : null } ];
window.x = [];
for (let idx in modules) {
const module = modules[idx];
if (module && (module.findChat || (module.default && module.default.findChat))) {
console.log(module);
window.x.push(module);
}
if ((typeof modules[idx] === "object") && (modules[idx] !== null)) {
neededObjects.forEach((needObj) => {
if (!needObj.conditions || needObj.foundedModule)
return;
let neededModule = needObj.conditions(modules[idx]);
if (neededModule !== null) {
foundCount++;
needObj.foundedModule = neededModule;
}
});
}
}
let neededStore = neededObjects.find((needObj) => needObj.id === "Store");
window.Store = neededStore.foundedModule ? neededStore.foundedModule : {};
neededObjects.splice(neededObjects.indexOf(neededStore), 1);
neededObjects.forEach((needObj) => {
if (needObj.foundedModule) {
window.Store[needObj.id] = needObj.foundedModule;
}
});
window.Store.Chat._find = e => {
const target = window.Store.Chat.get(e)
return target ? Promise.resolve(target) : Promise.resolve({
id: e
})
}
window.Store.Chat.modelClass.prototype.sendMessage = function (e) {
window.Store.SendTextMsgToChat(this, ...arguments);
}
return window.Store;
}
if (typeof webpackJsonp === 'function') {
webpackJsonp([], { 'parasite': (x, y, z) => getStore(z) }, ['parasite']);
} else {
let tag = new Date().getTime();
webpackChunkwhatsapp_web_client.push([
["parasite" + tag],
{
},
function (o, e, t) {
let modules = [];
for (let idx in o.m) {
let module = o(idx);
modules.push(module);
}
getStore(modules);
}
]);
}
})(); }
window.WAPI = { lastRead: {} };
window.WAPI._serializeRawObj = (obj) => { if (obj) { return obj.toJSON(); } return {} };
/**
window.WAPI._serializeChatObj = (obj) => { if (obj == undefined) { return null; }
return Object.assign(window.WAPI._serializeRawObj(obj), {
kind: obj.kind,
isGroup: obj.isGroup,
contact: obj['contact'] ? window.WAPI._serializeContactObj(obj['contact']) : null,
groupMetadata: obj["groupMetadata"] ? window.WAPI._serializeRawObj(obj["groupMetadata"]) : null,
presence: obj["presence"] ? window.WAPI._serializeRawObj(obj["presence"]) : null,
msgs: null
});
};
window.WAPI._serializeContactObj = (obj) => { if (obj == undefined) { return null; }
return Object.assign(window.WAPI._serializeRawObj(obj), {
formattedName: obj.formattedName,
isHighLevelVerified: obj.isHighLevelVerified,
isMe: obj.isMe,
isMyContact: obj.isMyContact,
isPSA: obj.isPSA,
isUser: obj.isUser,
isVerified: obj.isVerified,
isWAContact: obj.isWAContact,
profilePicThumbObj: obj.profilePicThumb ? WAPI._serializeProfilePicThumb(obj.profilePicThumb) : {},
statusMute: obj.statusMute,
msgs: null
});
};
window.WAPI._serializeMessageObj = (obj) => { if (obj == undefined) { return null; }
return Object.assign(window.WAPI._serializeRawObj(obj), {
id: obj.id._serialized,
sender: obj["senderObj"] ? WAPI._serializeContactObj(obj["senderObj"]) : null,
timestamp: obj["t"],
content: obj["body"],
isGroupMsg: obj.isGroupMsg,
isLink: obj.isLink,
isMMS: obj.isMMS,
isMedia: obj.isMedia,
isNotification: obj.isNotification,
isPSA: obj.isPSA,
type: obj.type,
chat: WAPI._serializeChatObj(obj['chat']),
chatId: obj.id.remote,
quotedMsgObj: WAPI._serializeMessageObj(obj['_quotedMsgObj']),
mediaData: window.WAPI._serializeRawObj(obj['mediaData'])
});
};
window.WAPI._serializeNumberStatusObj = (obj) => { if (obj == undefined) { return null; }
return Object.assign({}, {
id: obj.jid,
status: obj.status,
isBusiness: (obj.biz === true),
canReceiveMessage: (obj.status === 200)
});
};
window.WAPI._serializeProfilePicThumb = (obj) => { if (obj == undefined) { return null; }
return Object.assign({}, {
eurl: obj.eurl,
id: obj.id,
img: obj.img,
imgFull: obj.imgFull,
raw: obj.raw,
tag: obj.tag
});
}
window.WAPI.createGroup = function (name, contactsId) { if (!Array.isArray(contactsId)) { contactsId = [contactsId]; }
return window.Store.Wap.createGroup(name, contactsId);
};
window.WAPI.leaveGroup = function (groupId) { groupId = typeof groupId == "string" ? groupId : groupId._serialized; var group = WAPI.getChat(groupId); return group.sendExit() };
window.WAPI.getAllContacts = function (done) { const contacts = window.Store.Contact.map((contact) => WAPI._serializeContactObj(contact));
if (done !== undefined) done(contacts);
return contacts;
};
/**
/**
@returns {T|} Contact object / window.WAPI.getContact = function (id, done) { const found = window.Store.Contact.get(id);
if (done !== undefined) done(window.WAPI._serializeContactObj(found)) return window.WAPI._serializeContactObj(found); };
/**
@returns {Array|} List of chats / window.WAPI.getAllChats = function (done) { const chats = window.Store.Chat.map((chat) => WAPI._serializeChatObj(chat));
if (done !== undefined) done(chats); return chats; };
window.WAPI.haveNewMsg = function (chat) { return chat.unreadCount > 0; };
window.WAPI.getAllChatsWithNewMsg = function (done) { const chats = window.Store.Chat.filter(window.WAPI.haveNewMsg).map((chat) => WAPI._serializeChatObj(chat));
if (done !== undefined) done(chats);
return chats;
};
/**
@returns {Array|} List of chat id's / window.WAPI.getAllChatIds = function (done) { const chatIds = window.Store.Chat.map((chat) => chat.id._serialized || chat.id);
if (done !== undefined) done(chatIds); return chatIds; };
/**
@returns {Array|} List of chats / window.WAPI.getAllGroups = function (done) { const groups = window.Store.Chat.filter((chat) => chat.isGroup);
if (done !== undefined) done(groups); return groups; };
/**
@returns {T|} Chat object / window.WAPI.getChat = function (id, done) { // New version WhatsApp Beta Multi Device if (WAPI.isMultiDeviceVersion()) { let chat = window.Store.Chat.get(id); if (chat) { if (chat.sendMessage) { if (done) done(chat); return chat; } else { if (done) done(chat._value); return chat._value; } } else { // Create user var idx = new window.Store.UserConstructor(id, { intentionallyUsePrivateConstructor: true });
// Get chat
// window.Store.Chat.find(idx, chat => {
// debugger
// if (chat._value) {
// if (done) done(chat._value);
// } else {
// if (done) done(chat);
// }
// });
window.Store.FindChat.findChat(idx).then(chat => {
if (done) done(chat);
}).catch(e => {
if (done) done(null);
})
return undefined;
}
} else // Old version { id = typeof id == "string" ? id : id._serialized; const found = window.Store.Chat.get(id); found.sendMessage = (found.sendMessage) ? found.sendMessage : function () { return window.Store.sendMessage.apply(this, arguments); }; if (done !== undefined) done(found); return found; } }
window.WAPI.getChatByName = function (name, done) { const found = window.WAPI.getAllChats().find(val => val.name.includes(name)) if (done !== undefined) done(found); return found; };
window.WAPI.sendImageFromDatabasePicBot = function (picId, chatId, caption) { var chatDatabase = window.WAPI.getChatByName('DATABASEPICBOT'); var msgWithImg = chatDatabase.msgs.find((msg) => msg.caption == picId);
if (msgWithImg === undefined) {
return false;
}
// Nova versão Beta
if (WAPI.isMultiDeviceVersion()) {
WAPI.getChat(chatId, chatSend => {
if (chatSend === undefined) {
return false;
}
const oldCaption = msgWithImg.caption;
msgWithImg.id.id = window.WAPI.getNewId();
msgWithImg.id.remote = chatId;
msgWithImg.t = Math.ceil(new Date().getTime() / 1000);
msgWithImg.to = chatId;
if (caption !== undefined && caption !== '') {
msgWithImg.caption = caption;
} else {
msgWithImg.caption = '';
}
msgWithImg.collection.send(msgWithImg).then(function (e) {
msgWithImg.caption = oldCaption;
});
return true;
});
} else {
// Versão antiga
var chatSend = WAPI.getChat(chatId);
if (chatSend === undefined) {
return false;
}
const oldCaption = msgWithImg.caption;
msgWithImg.id.id = window.WAPI.getNewId();
msgWithImg.id.remote = chatId;
msgWithImg.t = Math.ceil(new Date().getTime() / 1000);
msgWithImg.to = chatId;
if (caption !== undefined && caption !== '') {
msgWithImg.caption = caption;
} else {
msgWithImg.caption = '';
}
msgWithImg.collection.send(msgWithImg).then(function (e) {
msgWithImg.caption = oldCaption;
});
return true;
}
};
window.WAPI.sendMessageWithThumb = function (thumb, url, title, description, text, chatId, done) { var chatSend = WAPI.getChat(chatId); if (chatSend === undefined) { if (done !== undefined) done(false); return false; } var linkPreview = { canonicalUrl: url, description: description, matchedText: url, title: title, thumbnail: thumb, compose: true }; chatSend.sendMessage(text, { linkPreview: linkPreview, mentionedJidList: [], quotedMsg: null, quotedMsgAdminGroupJid: null }); if (done !== undefined) done(true); return true; };
window.WAPI.getNewId = function () { var text = ""; var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
for (var i = 0; i < 20; i++)
text += possible.charAt(Math.floor(Math.random() * possible.length));
return text;
};
window.WAPI.getChatById = function (id, done) { let found = WAPI.getChat(id); if (found) { found = WAPI._serializeChatObj(found); } else { found = false; }
if (done !== undefined) done(found);
return found;
};
/**
:rtype: object */ window.WAPI.getUnreadMessagesInChat = function (id, includeMe, includeNotifications, done) { // get chat and its messages let chat = WAPI.getChat(id); let messages = chat.msgs._models;
// initialize result list let output = [];
// look for unread messages, newest is at the end of array for (let i = messages.length - 1; i >= 0; i--) { // system message: skip it if (i === "remove") { continue; }
// get message
let messageObj = messages[i];
// found a read message: stop looking for others
if (typeof (messageObj.isNewMsg) !== "boolean" || messageObj.isNewMsg === false) {
continue;
} else {
messageObj.isNewMsg = false;
// process it
let message = WAPI.processMessageObj(messageObj,
includeMe,
includeNotifications);
// save processed message on result list
if (message)
output.push(message);
}
} // callback was passed: run it if (done !== undefined) done(output); // return result list return output; } ;
/**
/**
window.WAPI.asyncLoadAllEarlierMessages = function (id, done) { done(); window.WAPI.loadAllEarlierMessages(id); };
window.WAPI.areAllMessagesLoaded = function (id, done) { const found = WAPI.getChat(id); if (!found.msgs.msgLoadState.noEarlierMsgs) { if (done) done(false); return false } if (done) done(true); return true };
/**
window.WAPI.loadEarlierMessagesTillDate = function (id, lastMessage, done) { const found = WAPI.getChat(id); x = function () { if (found.msgs.models[0].t > lastMessage && !found.msgs.msgLoadState.noEarlierMsgs) { found.loadEarlierMsgs().then(x); } else { done(); } }; x(); };
/**
@returns {Array|} List of group metadata / window.WAPI.getAllGroupMetadata = function (done) { const groupData = window.Store.GroupMetadata.map((groupData) => groupData.all);
if (done !== undefined) done(groupData); return groupData; };
/**
@returns {T|} Group metadata object / window.WAPI.getGroupMetadata = async function (id, done) { let output = window.Store.GroupMetadata.get(id);
if (output !== undefined) { if (output.stale) { await window.Store.GroupMetadata.update(id); } }
if (done !== undefined) done(output); return output;
};
/**
/**
@returns {Promise.<Array|>} Yields list of IDs / window.WAPI.getGroupParticipantIDs = async function (id, done) { const output = (await WAPI._getGroupParticipants(id)) .map((participant) => participant.id);
if (done !== undefined) done(output); return output; };
window.WAPI.getGroupAdmins = async function (id, done) { const output = (await WAPI._getGroupParticipants(id)) .filter((participant) => participant.isAdmin) .map((admin) => admin.id);
if (done !== undefined) done(output);
return output;
};
/**
window.WAPI.isLoggedIn = function (done) { // Contact always exists when logged in const isLogged = window.Store.Contact && window.Store.Contact.checksum !== undefined;
if (done !== undefined) done(isLogged);
return isLogged;
};
window.WAPI.isConnected = function (done) { // Phone Disconnected icon appears when phone is disconnected from the tnternet const isConnected = document.querySelector('*[data-icon="alert-phone"]') !== null ? false : true;
if (done !== undefined) done(isConnected);
return isConnected;
};
window.WAPI.processMessageObj = function (messageObj, includeMe, includeNotifications) { if (messageObj.isNotification) { if (includeNotifications) { ret = WAPI._serializeMessageObj(messageObj); delete ret.waveform delete ret.mediaData.waveform if (ret.quotedMsg && ret.quotedMsg.waveform) delete ret.quotedMsg.waveform return ret } else { return; } // System message // (i.e. "Messages you send to this chat and calls are now secured with end-to-end encryption...") } else if (messageObj.id.fromMe === false || includeMe) { ret = WAPI._serializeMessageObj(messageObj); delete ret.waveform delete ret.mediaData.waveform if (ret.quotedMsg && ret.quotedMsg.waveform) delete ret.quotedMsg.waveform return ret } return; };
window.WAPI.getAllMessagesInChat = function (id, includeMe, includeNotifications, done) { const chat = WAPI.getChat(id); let output = []; const messages = chat.msgs._models;
for (const i in messages) {
if (i === "remove") {
continue;
}
const messageObj = messages[i];
let message = WAPI.processMessageObj(messageObj, includeMe, includeNotifications)
if (message)
output.push(message);
}
if (done !== undefined) done(output);
return output;
};
window.WAPI.getAllMessageIdsInChat = function (id, includeMe, includeNotifications, done) { const chat = WAPI.getChat(id); let output = []; const messages = chat.msgs._models;
for (const i in messages) {
if ((i === "remove")
|| (!includeMe && messages[i].isMe)
|| (!includeNotifications && messages[i].isNotification)) {
continue;
}
output.push(messages[i].id._serialized);
}
if (done !== undefined) done(output);
return output;
};
window.WAPI.getMessageById = function (id, done) { let result = false; try { let msg = window.Store.Msg.get(id); if (msg) { result = WAPI.processMessageObj(msg, true, true); } } catch (err) { }
if (done !== undefined) {
done(result);
} else {
return result;
}
};
window.WAPI.ReplyMessage = function (idMessage, message, done) { var messageObject = window.Store.Msg.get(idMessage); if (messageObject === undefined) { if (done !== undefined) done(false); return false; } messageObject = messageObject.value();
const chat = WAPI.getChat(messageObject.chat.id)
if (chat !== undefined) {
if (done !== undefined) {
chat.sendMessage(message, null, messageObject).then(function () {
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
var trials = 0;
function check() {
for (let i = chat.msgs.models.length - 1; i >= 0; i--) {
let msg = chat.msgs.models[i];
if (!msg.senderObj.isMe || msg.body != message) {
continue;
}
done(WAPI._serializeMessageObj(msg));
return True;
}
trials += 1;
console.log(trials);
if (trials > 30) {
done(true);
return;
}
sleep(500).then(check);
}
check();
});
return true;
} else {
chat.sendMessage(message, null, messageObject);
return true;
}
} else {
if (done !== undefined) done(false);
return false;
}
};
window.WAPI.sendMessageToID = function (id, message, done) {
try {
// Nova versão do WhatsApp Beta
if (WAPI.isMultiDeviceVersion()) {
console.log('Fluxo para Multdevice: ' + id);
WAPI.getChat(id, chat => {
if (chat) {
chat.sendMessage(message);
console.log('Mensagem enviada!');
done(true);
return true;
} else {
console.log('Mensagem NÃO enviada!');
done(false);
return false;
}
});
} else {
// Versão antiga do WhatsApp para um só navegador
try {
window.getContact = (id) => {
return Store.WapQuery.queryExist(id);
// return Store.WapQuery.SendPing().queryExist(id);
}
window.getContact(id).then(contact => {
if (contact.status === 404) {
done(true);
} else {
Store.Chat.find(contact.jid).then(chat => {
chat.sendMessage(message);
done(true);
return true;
}).catch(reject => {
if (WAPI.sendMessage(id, message)) {
done(true);
return true;
} else {
done(false);
return false;
}
});
}
});
} catch (e) {
// Quando ainda não é um contato
if (window.Store.Chat.length === 0) {
done(false);
return false;
}
firstChat = Store.Chat.models[0];
var originalID = firstChat.id;
firstChat.id = typeof originalID === "string" ? id : new window.Store.UserConstructor(id, { intentionallyUsePrivateConstructor: true });
if (done !== undefined) {
firstChat.sendMessage(message).then(function () {
firstChat.id = originalID;
done(true);
});
return true;
} else {
firstChat.sendMessage(message);
firstChat.id = originalID;
done(true);
return true;
}
}
// Fim do fluxo antigo
}
} catch (e) {
console.log('Erro ao enviar a mensagem: ' + e.message);
done(false);
return false;
}
// try {
// if (WAPI.isMultiDeviceVersion()) {
// console.log('Fluxo para Multdevice: ' + id);
// var chat = WAPI.getChat(id);
// console.chat('Chat: ');
// // console.log(chat);
// // chat.sendMessage(message);
// console.log('Mensagem enviada!');
// done(true);
// return true;
// } else {
// window.getContact = (id) => {
// return Store.WapQuery.queryExist(id);
// // return Store.WapQuery.SendPing().queryExist(id);
// }
// window.getContact(id).then(contact => {
// if (contact.status === 404) {
// done(true);
// } else {
// Store.Chat.find(contact.jid).then(chat => {
// chat.sendMessage(message);
// return true;
// }).catch(reject => {
// if (WAPI.sendMessage(id, message)) {
// done(true);
// return true;
// }else{
// done(false);
// return false;
// }
// });
// }
// });
// }
// } catch (e) {
// console.log('Caiu no fluxo antigo');
// if (window.Store.Chat.length === 0)
// return false;
// firstChat = Store.Chat.models[0];
// var originalID = firstChat.id;
// firstChat.id = typeof originalID === "string" ? id : new window.Store.UserConstructor(id, { intentionallyUsePrivateConstructor: true });
// if (done !== undefined) {
// firstChat.sendMessage(message).then(function () {
// firstChat.id = originalID;
// done(true);
// });
// return true;
// } else {
// firstChat.sendMessage(message);
// firstChat.id = originalID;
// return true;
// }
// }
// if (done !== undefined) done(false);
// return false;
}
window.WAPI.sendMessage = function (id, message, done) { var chat = WAPI.getChat(id); if (chat !== undefined) { if (done !== undefined) { chat.sendMessage(message).then(function () { function sleep(ms) { return new Promise(resolve => setTimeout(resolve, ms)); }
var trials = 0;
function check() {
for (let i = chat.msgs.models.length - 1; i >= 0; i--) {
let msg = chat.msgs.models[i];
if (!msg.senderObj.isMe || msg.body != message) {
continue;
}
done(WAPI._serializeMessageObj(msg));
return True;
}
trials += 1;
console.log(trials);
if (trials > 30) {
done(true);
return;
}
sleep(500).then(check);
}
check();
});
return true;
} else {
chat.sendMessage(message);
return true;
}
} else {
if (done !== undefined) done(false);
return false;
}
};
window.WAPI.sendMessage2 = function (id, message, done) { var chat = WAPI.getChat(id); if (chat !== undefined) { try { if (done !== undefined) { chat.sendMessage(message).then(function () { done(true); }); } else { chat.sendMessage(message); } return true; } catch (error) { if (done !== undefined) done(false) return false; } } if (done !== undefined) done(false) return false; };
window.WAPI.sendSeen = function (id, done) { var chat = window.WAPI.getChat(id); if (chat !== undefined) { if (done !== undefined) { if (chat.getLastMsgKeyForAction === undefined) chat.getLastMsgKeyForAction = function () { }; Store.SendSeen(chat, false).then(function () { done(true); }); return true; } else { Store.SendSeen(chat, false); return true; } } if (done !== undefined) done(); return false; };
function isChatMessage(message) { if (message.isSentByMe) { return false; } if (message.isNotification) { return false; } if (!message.isUserCreatedType) { return false; } return true; }
window.WAPI.getUnreadMessages = function (includeMe, includeNotifications, use_unread_count, done) { const chats = window.Store.Chat.models; let output = [];
for (let chat in chats) {
if (isNaN(chat)) {
continue;
}
let messageGroupObj = chats[chat];
let messageGroup = WAPI._serializeChatObj(messageGroupObj);
messageGroup.messages = [];
const messages = messageGroupObj.msgs._models;
for (let i = messages.length - 1; i >= 0; i--) {
let messageObj = messages[i];
if (typeof (messageObj.isNewMsg) != "boolean" || messageObj.isNewMsg === false) {
continue;
} else {
messageObj.isNewMsg = false;
let message = WAPI.processMessageObj(messageObj, includeMe, includeNotifications);
if (message) {
messageGroup.messages.push(message);
}
}
}
if (messageGroup.messages.length > 0) {
output.push(messageGroup);
} else { // no messages with isNewMsg true
if (use_unread_count) {
let n = messageGroupObj.unreadCount; // will use unreadCount attribute to fetch last n messages from sender
for (let i = messages.length - 1; i >= 0; i--) {
let messageObj = messages[i];
if (n > 0) {
if (!messageObj.isSentByMe) {
let message = WAPI.processMessageObj(messageObj, includeMe, includeNotifications);
messageGroup.messages.unshift(message);
n -= 1;
}
} else if (n === -1) { // chat was marked as unread so will fetch last message as unread
if (!messageObj.isSentByMe) {
let message = WAPI.processMessageObj(messageObj, includeMe, includeNotifications);
messageGroup.messages.unshift(message);
break;
}
} else { // unreadCount = 0
break;
}
}
if (messageGroup.messages.length > 0) {
messageGroupObj.unreadCount = 0; // reset unread counter
output.push(messageGroup);
}
}
}
}
if (done !== undefined) {
done(output);
}
return output;
};
window.WAPI.getGroupOwnerID = async function (id, done) { const output = (await WAPI.getGroupMetadata(id)).owner.id; if (done !== undefined) { done(output); } return output;
};
window.WAPI.getCommonGroups = async function (id, done) { let output = [];
groups = window.WAPI.getAllGroups();
for (let idx in groups) {
try {
participants = await window.WAPI.getGroupParticipantIDs(groups[idx].id);
if (participants.filter((participant) => participant == id).length) {
output.push(groups[idx]);
}
} catch (err) {
console.log("Error in group:");
console.log(groups[idx]);
console.log(err);
}
}
if (done !== undefined) {
done(output);
}
return output;
};
window.WAPI.getProfilePicSmallFromId = function (id, done) { window.Store.ProfilePicThumb.find(id).then(function (d) { if (d.img !== undefined) { window.WAPI.downloadFileWithCredentials(d.img, done); } else { done(false); } }, function (e) { done(false); }) };
window.WAPI.getProfilePicFromId = function (id, done) { window.Store.ProfilePicThumb.find(id).then(function (d) { if (d.imgFull !== undefined) { window.WAPI.downloadFileWithCredentials(d.imgFull, done); } else { done(false); } }, function (e) { done(false); }) };
window.WAPI.downloadFileWithCredentials = function (url, done) { let xhr = new XMLHttpRequest();
xhr.onload = function () {
if (xhr.readyState == 4) {
if (xhr.status == 200) {
let reader = new FileReader();
reader.readAsDataURL(xhr.response);
reader.onload = function (e) {
done(reader.result.substr(reader.result.indexOf(',') + 1))
};
} else {
console.error(xhr.statusText);
}
} else {
console.log(err);
done(false);
}
};
xhr.open("GET", url, true);
xhr.withCredentials = true;
xhr.responseType = 'blob';
xhr.send(null);
};
window.WAPI.downloadFile = function (url, done) { let xhr = new XMLHttpRequest();
xhr.onload = function () {
if (xhr.readyState == 4) {
if (xhr.status == 200) {
let reader = new FileReader();
reader.readAsDataURL(xhr.response);
reader.onload = function (e) {
done(reader.result.substr(reader.result.indexOf(',') + 1))
};
} else {
console.error(xhr.statusText);
}
} else {
console.log(err);
done(false);
}
};
xhr.open("GET", url, true);
xhr.responseType = 'blob';
xhr.send(null);
};
window.WAPI.getBatteryLevel = function (done) { if (window.Store.Conn.plugged) { if (done !== undefined) { done(100); } return 100; } output = window.Store.Conn.battery; if (done !== undefined) { done(output); } return output; };
window.WAPI.deleteConversation = function (chatId, done) { let userId = new window.Store.UserConstructor(chatId, { intentionallyUsePrivateConstructor: true }); let conversation = WAPI.getChat(userId);
if (!conversation) {
if (done !== undefined) {
done(false);
}
return false;
}
window.Store.sendDelete(conversation, false).then(() => {
if (done !== undefined) {
done(true);
}
}).catch(() => {
if (done !== undefined) {
done(false);
}
});
return true;
};
window.WAPI.deleteMessage = function (chatId, messageArray, revoke = false, done) { let userId = new window.Store.UserConstructor(chatId, { intentionallyUsePrivateConstructor: true }); let conversation = WAPI.getChat(userId);
if (!conversation) {
if (done !== undefined) {
done(false);
}
return false;
}
if (!Array.isArray(messageArray)) {
messageArray = [messageArray];
}
let messagesToDelete = messageArray.map(msgId => window.Store.Msg.get(msgId));
if (revoke) {
conversation.sendRevokeMsgs(messagesToDelete, conversation);
} else {
conversation.sendDeleteMsgs(messagesToDelete, conversation);
}
if (done !== undefined) {
done(true);
}
return true;
};
window.WAPI.isMultiDeviceVersion = function () { try { let resp = window.Store.FeatureChecker.GK.features['MD_BACKEND']; return resp; } catch { return true; } }
window.WAPI.getMyChatId = () => { return Store.GetMaybeMeUser.getMaybeMeUser(); }
window.WAPI.checkNumberStatus = function (id, done) { window.WAPI.findJidFromNumber(id).then((result) => { if (done !== undefined) { if (result.jid === undefined) throw 404; done(window.WAPI._serializeNumberStatusObj(result)); } }).catch((e) => { if (done !== undefined) { done(window.WAPI._serializeNumberStatusObj({ status: e, jid: id })); } });
return true;
};
window.WAPI.findJidFromNumber = (number) => { if (WAPI.isMultiDeviceVersion()) { return Store.QueryExist.queryExist(WAPI.tryFixNumber(number)).then(value => { return { status: 200, jid: value.wid } }); } else { if (!number.includes("@c.us")) number += "@c.us"; return Store.WapQuery.queryExist(number); } }
window.WAPI.tryFixNumber = (number) => { let firstNumbersMe = Store.GetMaybeMeUser.getMaybeMeUser().user.substring(0, 2); let firstNumbersContact = number.substring(0, 2); if (firstNumbersMe === firstNumbersContact) { return number.substring(2); } firstNumbersMe = Store.GetMaybeMeUser.getMaybeMeUser().user.substring(0, 3); firstNumbersContact = number.substring(0, 3); if (firstNumbersMe === firstNumbersContact) { return number.substring(3); } return number; }
/**
window.Store.Msg.off('add'); sessionStorage.removeItem('saved_msgs');
window.WAPI._newMessagesListener = window.Store.Msg.on('add', (newMessage) => { if (newMessage && newMessage.isNewMsg && !newMessage.isSentByMe) { let message = window.WAPI.processMessageObj(newMessage, false, false); if (message) { window.WAPI._newMessagesQueue.push(message); window.WAPI._newMessagesBuffer.push(message); }
// Starts debouncer time to don't call a callback for each message if more than one message arrives
// in the same second
if (!window.WAPI._newMessagesDebouncer && window.WAPI._newMessagesQueue.length > 0) {
window.WAPI._newMessagesDebouncer = setTimeout(() => {
let queuedMessages = window.WAPI._newMessagesQueue;
window.WAPI._newMessagesDebouncer = null;
window.WAPI._newMessagesQueue = [];
let removeCallbacks = [];
window.WAPI._newMessagesCallbacks.forEach(function (callbackObj) {
if (callbackObj.callback !== undefined) {
callbackObj.callback(queuedMessages);
}
if (callbackObj.rmAfterUse === true) {
removeCallbacks.push(callbackObj);
}
});
// Remove removable callbacks.
removeCallbacks.forEach(function (rmCallbackObj) {
let callbackIndex = window.WAPI._newMessagesCallbacks.indexOf(rmCallbackObj);
window.WAPI._newMessagesCallbacks.splice(callbackIndex, 1);
});
}, 1000);
}
}
});
window.WAPI._unloadInform = (event) => { // Save in the buffer the ungot unreaded messages window.WAPI._newMessagesBuffer.forEach((message) => { Object.keys(message).forEach(key => message[key] === undefined ? delete message[key] : ''); }); sessionStorage.setItem("saved_msgs", JSON.stringify(window.WAPI._newMessagesBuffer));
// Inform callbacks that the page will be reloaded.
window.WAPI._newMessagesCallbacks.forEach(function (callbackObj) {
if (callbackObj.callback !== undefined) {
callbackObj.callback({ status: -1, message: 'page will be reloaded, wait and register callback again.' });
}
});
};
window.addEventListener("unload", window.WAPI._unloadInform, false); window.addEventListener("beforeunload", window.WAPI._unloadInform, false); window.addEventListener("pageunload", window.WAPI._unloadInform, false);
/**
/**
window.WAPI.sendImage = function (imgBase64, chatid, filename, caption, done) { //var idUser = new window.Store.UserConstructor(chatid); var idUser = new window.Store.UserConstructor(chatid, { intentionallyUsePrivateConstructor: true }); // create new chat return Store.Chat.find(idUser).then((chat) => { var mediaBlob = window.WAPI.base64ImageToFile(imgBase64, filename); var mc = new Store.MediaCollection(chat); mc.processAttachments([{ file: mediaBlob }, 1], chat, 1).then(() => { var media = mc.models[0]; media.sendToChat(chat, { caption: caption }); if (done !== undefined) done(true); }); }); }
window.WAPI.base64ImageToFile = function (b64Data, filename) { var arr = b64Data.split(','); var mime = arr[0].match(/:(.*?);/)[1]; var bstr = atob(arr[1]); var n = bstr.length; var u8arr = new Uint8Array(n);
while (n--) {
u8arr[n] = bstr.charCodeAt(n);
}
return new File([u8arr], filename, { type: mime });
};
/**
@param {string|array} contact '111111111111@c.us' | ['222222222222@c.us', '333333333333@c.us, ... 'nnnnnnnnnnnn@c.us'] */ window.WAPI.sendContact = function (to, contact) { if (!Array.isArray(contact)) { contact = [contact]; } contact = contact.map((c) => { return WAPI.getChat(c).__x_contact; });
if (contact.length > 1) { window.WAPI.getChat(to).sendContactList(contact); } else if (contact.length === 1) { window.WAPI.getChat(to).sendContact(contact[0]); } };
/**
@param {string} chatId '000000000000@c.us' */ window.WAPI.getNewMessageId = function (chatId) { var newMsgId = Store.Msg.models[0].__x_id.clone();
newMsgId.fromMe = true; newMsgId.id = WAPI.getNewId().toUpperCase(); newMsgId.remote = chatId; newMsgId.serialized = `${newMsgId.fromMe}${newMsgId.remote}_${newMsgId.id}`
return newMsgId; };
/**
@param {object|array} vcard { displayName: 'Contact Name', vcard: 'BEGIN:VCARD\nVERSION:3.0\nN:;Contact Name;;;\nEND:VCARD' } | [{ displayName: 'Contact Name 1', vcard: 'BEGIN:VCARD\nVERSION:3.0\nN:;Contact Name 1;;;\nEND:VCARD' }, { displayName: 'Contact Name 2', vcard: 'BEGIN:VCARD\nVERSION:3.0\nN:;Contact Name 2;;;\nEND:VCARD' }] */ window.WAPI.sendVCard = function (chatId, vcard) { var chat = Store.Chat.get(chatId); var tempMsg = Object.create(Store.Msg.models.filter(msg => msg.__x_isSentByMe)[0]); var newId = window.WAPI.getNewMessageId(chatId);
var extend = { ack: 0, id: newId, local: !0, self: "out", t: parseInt(new Date().getTime() / 1000), to: chatId, isNewMsg: !0, };
if (Array.isArray(vcard)) { Object.assign(extend, { type: "multi_vcard", vcardList: vcard });
delete extend.body;
} else { Object.assign(extend, { type: "vcard", subtype: vcard.displayName, body: vcard.vcard });
delete extend.vcardList;
}
Object.assign(tempMsg, extend);
chat.addAndSendMsg(tempMsg); }; /**
/**
/**
/**
I have tried it but it doesn't work, can you help me to send the wapi file to make it easier for me to replace it. thanks
I have tried it but it doesn't work, can you help me to send the wapi file to make it easier for me to replace it. thanks
You have to replace the extension to js.
You have to replace the extension to js.
can't work, I'm using a firefox v61 :(
message not received to server ,has anyone experienced?