Anda di halaman 1dari 26

/**

* Skrip ini berisi fungsi WAPI yang harus dijalankan dalam konteks halaman web
*/

/**
* Penemuan otomatis referensi objek webpack dari instance yang berisi semua fungsi
yang digunakan oleh WAPI
* berfungsi dan membuat objek Store.
*/
jika (!window.Store) {
(fungsi () {
fungsi getStore(modul) {
biarkan foundCount = 0;
biarkan Obyek yang dibutuhkan = [
{ id: "Store", kondisi: (modul) => (module.default &&
module.default.Chat && module.default.Msg) ? module.default : null },
{ id: "MediaCollection", kondisi: (modul) => (module.default &&
module.default.prototype && module.default.prototype.processAttachments) ?
module.default : null },
{ id: "Proses Media", kondisi: (modul) => (modul.BLOB) ? modul :
null },
{ id: "Wap", kondisi: (modul) => (module.createGroup) ? modul :
null },
{ id: "ServiceWorker", kondisi: (module) => (module.default &&
module.default.killServiceWorker) ? modul : null },
{ id: "State", kondisi: (modul) => (module.STATE &&
module.STREAM) ? modul : null },
{ id: "WapDelete", kondisi: (module) =>
(module.sendConversationDelete && module.sendConversationDelete.length == 2) ?
modul : null },
{ id: "Conn", kondisi: (modul) => (module.default &&
module.default.ref && module.default.refTTL) ? module.default : null },
{ id: "WapQuery", kondisi: (modul) => (module.queryExist) ? modul :
((module.default && module.default.queryExist) ? module.default : null) },
{ id: "CryptoLib", kondisi: (modul) => (module.decryptE2EMedia) ?
modul : null },
{ id: "OpenChat", kondisi: (modul) => (module.default &&
module.default.prototype && module.default.prototype.openChat) ? module.default :
null },
{ id: "UserConstructor", kondisi: (module) => (module.default &&
module.default.prototype && module.default.prototype.isServer &&
module.default.prototype.isUser) ? module.default : null },
{ id: "SendTextMsgToChat", kondisi: (module) =>
(module.sendTextMsgToChat) ? module.sendTextMsgToChat : null },
{ id: "SendSeen", kondisi: (module) => (module.sendSeen) ?
module.sendSeen : null },
{ id: "sendDelete", kondisi: (module) => (module.sendDelete) ?
module.sendDelete : null }
];
untuk (biarkan idx dalam modul) {
if ((typeof modules[idx] === "objek") && (modules[idx] !== null)) {
needObjects.forEach((needObj) => {
jika (!needObj.kondisi || needObj.foundedModule)
kembali;
biarkan needModule = needObj.conditions(modules[idx]);
if (neededModule !== null) {
ditemukan Hitung++;
needObj.foundedModule = needModule;
}
});

if (foundCount == neededObjects.length) {
merusak;
}
}
}

biarkan kebutuhanToko = needObjects.find((needObj) => needObj.id ===


"Store");
window.Store = needStore.foundedModule ? needStore.foundedModule : {};
needObjects.splice(neededObjects.indexOf(neededStore), 1);
needObjects.forEach((needObj) => {
if (needObj.foundedModule) {
window.Store[needObj.id] = needObj.foundedModule;
}
});

window.Store.Chat.modelClass.prototype.sendMessage = function (e) {


window.Store.SendTextMsgToChat(ini, ...argumen);
}

jendela kembali.Store;
}

if (typeof webpackJsonp === 'fungsi') {


webpackJsonp([], {'parasit': (x, y, z) => getStore(z)}, ['parasit']);
} kalau tidak {
biarkan tag = new Date().getTime();
webpackChunkbuild.push([
["parasit" + tag],
{

},
fungsi (o, e, t) {
biarkan modul = [];
untuk (biarkan idx di om) {
biarkan modul = o(idx);
modules.push(modul);
}
getStore(modul);
}
]);
}

})();
}

jendela.WAPI = {
lastRead: {}
};

jendela.WAPI._serializeRawObj = (obj) => {


jika (obj) {
return obj.toJSON();
}
kembali {}
};
/**
* Membuat serial objek obrolan
*
* Obyek Obrolan @param rawChat
* @returns {{}}
*/

jendela.WAPI._serializeChatObj = (obj) => {


if (obj == tidak terdefinisi) {
kembali nol;
}

kembalikan Object.assign(window.WAPI._serializeRawObj(obj), {
jenis : obj.jenis,
isGroup : obj.isGroup,
kontak : obj['kontak'] ? jendela.WAPI._serializeContactObj(obj['kontak']):
null,
groupMetadata: obj["groupMetadata"] ?
window.WAPI._serializeRawObj(obj["groupMetadata"]): null,
kehadiran : obj["kehadiran"] ?
window.WAPI._serializeRawObj(obj["kehadiran"]): null,
pesan: null
});
};

jendela.WAPI._serializeContactObj = (obj) => {


if (obj == tidak terdefinisi) {
kembali nol;
}

kembalikan 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,
pesan: null
});
};

jendela.WAPI._serializeMessageObj = (obj) => {


if (obj == tidak terdefinisi) {
kembali nol;
}

kembalikan Object.assign(window.WAPI._serializeRawObj(obj), {
id : obj.id._serialized,
pengirim : obj["senderObj"] ? WAPI._serializeContactObj(obj["senderObj"]):
nol,
cap waktu : obj["t"],
isi : obj["tubuh"],
isGroupMsg : obj.isGroupMsg,
isLink : obj.isLink,
isMMS : obj.isMMS,
isMedia : obj.isMedia,
isNotification: obj.isNotification,
isPSA : obj.isPSA,
ketik : obj.tipe,
obrolan : WAPI._serializeChatObj(obj['chat']),
chatId : obj.id.remote,
dikutipMsgObj : WAPI._serializeMessageObj(obj['_quotedMsgObj']),
mediaData : window.WAPI._serializeRawObj(obj['mediaData'])
});
};

window.WAPI._serializeNumberStatusObj = (obj) => {


if (obj == tidak terdefinisi) {
kembali nol;
}

mengembalikan Object.assign({}, {
id : obj.jid,
status : obj.status,
isBusiness : (obj.biz === benar),
canReceiveMessage: (obj.status === 200)
});
};

jendela.WAPI._serializeProfilePicThumb = (obj) => {


if (obj == tidak terdefinisi) {
kembali nol;
}

mengembalikan Object.assign({}, {
eurl : obj.eurl,
id : obj.id,
img : obj.img,
imgFull: obj.imgFull,
mentah : obj.raw,
tag : obj.tag
});
}

window.WAPI.createGroup = function (nama, contactId) {


if (!Array.isArray(contactsId)) {
contactId = [contactsId];
}

return window.Store.Wap.createGroup(name, contactsId);


};

window.WAPI.leaveGroup = function (groupId) {


groupId = typeof groupId == "string" ? groupId : groupId._serialized;
var grup = WAPI.getChat(groupId);
kembalikan grup.sendExit()
};

window.WAPI.getAllContacts = fungsi (selesai) {


kontak const = window.Store.Contact.map((kontak) =>
WAPI._serializeContactObj(kontak));
if (selesai !== undefined) selesai(kontak);
kontak kembali;
};

/**
* Mengambil semua objek kontak dari toko, memfilternya
*
* @param selesai Fungsi callback opsional untuk eksekusi async
* @returns {Array|*} Daftar kontak
*/
window.WAPI.getMyContacts = fungsi (selesai) {
const kontak = window.Store.Contact.filter((kontak) => contact.isMyContact ===
true).map((kontak) => WAPI._serializeContactObj(kontak));
if (selesai !== undefined) selesai(kontak);
kontak kembali;
};

/**
* Mengambil objek kontak dari toko dengan ID
*
* @param id ID kontak
* @param selesai Fungsi callback opsional untuk eksekusi async
* @returns {T|*} Objek kontak
*/
window.WAPI.getContact = function (id, selesai) {
const ditemukan = window.Store.Contact.get(id);

if (selesai !== undefined) selesai(window.WAPI._serializeContactObj(found))


kembali jendela.WAPI._serializeContactObj(ditemukan);
};

/**
* Mengambil semua objek obrolan dari toko
*
* @param selesai Fungsi callback opsional untuk eksekusi async
* @returns {Array|*} Daftar obrolan
*/
window.WAPI.getAllChats = fungsi (selesai) {
const obrolan = window.Store.Chat.map((obrolan) =>
WAPI._serializeChatObj(obrolan));

if (selesai !== undefined) selesai(obrolan);


kembali obrolan;
};

window.WAPI.haveNewMsg = fungsi (obrolan) {


kembali obrolan.unreadCount > 0;
};

window.WAPI.getAllChatsWithNewMsg = fungsi (selesai) {


const obrolan = window.Store.Chat.filter(window.WAPI.haveNewMsg).map((obrolan)
=> WAPI._serializeChatObj(obrolan));

if (selesai !== undefined) selesai(obrolan);


kembali obrolan;
};

/**
* Mengambil semua ID obrolan dari toko
*
* @param selesai Fungsi callback opsional untuk eksekusi async
* @returns {Array|*} Daftar id obrolan
*/
window.WAPI.getAllChatIds = fungsi (selesai) {
const chatIds = window.Store.Chat.map((chat) => chat.id._serialized ||
chat.id);

if (selesai !== undefined) selesai(chatIds);


kembali chatId;
};

/**
* Mengambil semua objek grup dari toko
*
* @param selesai Fungsi callback opsional untuk eksekusi async
* @returns {Array|*} Daftar obrolan
*/
window.WAPI.getAllGroups = fungsi (selesai) {
grup const = window.Store.Chat.filter((chat) => chat.isGroup);

if (selesai !== undefined) selesai(grup);


kelompok kembali;
};

/**
* Mengambil objek obrolan dari toko dengan ID
*
* @param id ID obrolan
* @param selesai Fungsi callback opsional untuk eksekusi async
* @returns {T|*} Objek obrolan
*/
window.WAPI.getChat = fungsi (id, selesai) {
id = typeof id == "string" ? id : id._serialized;
const ditemukan = window.Store.Chat.get(id);
ditemukan.sendMessage = (ditemukan.sendMessage) ? found.sendMessage : function
() { return window.Store.sendMessage.apply(ini, argumen); };
if (selesai !== undefined) selesai(ditemukan);
kembali ditemukan;
}

window.WAPI.getChatByName = fungsi (nama, selesai) {


const ditemukan = window.WAPI.getAllChats().find(val =>
val.name.includes(name))
if (selesai !== undefined) selesai(ditemukan);
kembali ditemukan;
};

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) {


kembali salah;
}
var chatSend = WAPI.getChat(chatId);
if (chatSend === undefined) {
kembali salah;
}
constKeterangan lama = msgDenganImg.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 = keterangan;
} kalau tidak {
msgDenganImg.caption = '';
}

msgWithImg.collection.send(msgWithImg).lalu(fungsi (e) {
msgWithImg.caption = Keterangan lama;
});

kembali benar;
};

window.WAPI.sendMessageWithThumb = function (thumb, url, title, description, text,


chatId, done) {
var chatSend = WAPI.getChat(chatId);
if (chatSend === undefined) {
if (selesai !== undefined) selesai(false);
kembali salah;
}
var tautanPratinjau = {
canonicalUrl: url,
deskripsi : deskripsi,
matchedText : url,
judul : judul,
thumbnail : ibu jari,
menulis: benar
};
chatSend.sendMessage(teks, { linkPreview: linkPreview,
disebutkanJidList: [],
dikutipMsg: nol,
dikutipMsgAdminGroupJid: null });
if (selesai !== undefined) selesai(benar);
kembali benar;
};

jendela.WAPI.getNewId = fungsi () {
var teks = "";
var mungkin = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";

untuk (var i = 0; i < 20; i++)


teks += mungkin.charAt(Math.floor(Math.random() * mungkin.panjang));
kembali teks;
};

window.WAPI.getChatById = fungsi (id, selesai) {


biarkan ditemukan = WAPI.getChat(id);
jika ketemu) {
ditemukan = WAPI._serializeChatObj(ditemukan);
} kalau tidak {
ditemukan = salah;
}
if (selesai !== undefined) selesai(ditemukan);
kembali ditemukan;
};

/**
* Saya mengembalikan semua pesan yang belum dibaca dari obrolan yang diminta dan
menandainya sebagai sudah dibaca.
*
* :param id: id obrolan
* :ketik id: string
*
* :param includeMe: menunjukkan apakah pesan pengguna harus disertakan
* :ketik includeMe: boolean
*
* :param includeNotifications: menunjukkan apakah notifikasi harus disertakan
* :type includeNotifications: boolean
*
* :param selesai: panggilan balik diteruskan oleh Selenium
* :ketik selesai: fungsi
*
* :returns: daftar pesan yang belum dibaca dari chat yang ditanyakan
* :rtype: objek
*/
window.WAPI.getUnreadMessagesInChat = function (id, includeMe,
includeNotifications, done) {
// dapatkan obrolan dan pesannya
biarkan obrolan = WAPI.getChat(id);
biarkan pesan = chat.msgs._models;

// menginisialisasi daftar hasil


biarkan keluaran = [];

// cari pesan yang belum dibaca, yang terbaru ada di akhir array
for (biarkan i = pesan.panjang - 1; i >= 0; i--) {
// pesan sistem: lewati saja
if (i === "hapus") {
melanjutkan;
}

// dapatkan pesan
biarkan pesanObj = pesan[i];

// menemukan pesan yang sudah dibaca: berhenti mencari orang lain


if (typeof (messageObj.isNewMsg) !== "boolean" || messageObj.isNewMsg ===
salah) {
melanjutkan;
} kalau tidak {
messageObj.isNewMsg = false;
// mengolahnya
biarkan pesan = WAPI.processMessageObj(messageObj,
termasuk saya,
sertakan Pemberitahuan);

// simpan pesan yang diproses pada daftar hasil


jika (pesan)
keluaran.push(pesan);
}
}
// callback diteruskan: jalankan
if (selesai !== undefined) selesai(output);
// mengembalikan daftar hasil
kembali keluaran;
}
;

/**
* Muat lebih banyak pesan di objek obrolan dari toko berdasarkan ID
*
* @param id ID obrolan
* @param selesai Fungsi callback opsional untuk eksekusi async
* @mengembalikan Tidak ada
*/
window.WAPI.loadEarlierMessages = fungsi (id, selesai) {
const ditemukan = WAPI.getChat(id);
if (selesai !== undefined) {
ditemukan.loadEarlierMsgs().then(fungsi () {
selesai()
});
} kalau tidak {
ditemukan.loadEarlierMsgs();
}
};

/**
* Muat lebih banyak pesan di objek obrolan dari toko berdasarkan ID
*
* @param id ID obrolan
* @param selesai Fungsi callback opsional untuk eksekusi async
* @mengembalikan Tidak ada
*/
window.WAPI.loadAllEarlierMessages = fungsi (id, selesai) {
const ditemukan = WAPI.getChat(id);
x = fungsi () {
if (!found.msgs.msgLoadState.noEarlierMsgs) {
found.loadEarlierMsgs().then(x);
} lain jika (selesai) {
selesai();
}
};
x();
};

window.WAPI.asyncLoadAllEarlierMessages = fungsi (id, selesai) {


selesai();
jendela.WAPI.loadAllEarlierMessages(id);
};

window.WAPI.areAllMessagesLoaded = fungsi (id, selesai) {


const ditemukan = WAPI.getChat(id);
if (!found.msgs.msgLoadState.noEarlierMsgs) {
jika (selesai) selesai (salah);
kembali salah
}
jika (selesai) selesai (benar);
kembali benar
};

/**
* Muat lebih banyak pesan di objek obrolan dari toko berdasarkan ID hingga tanggal
tertentu
*
* @param id ID obrolan
* @param lastMessage stempel waktu UTC dari pesan terakhir yang akan dimuat
* @param selesai Fungsi callback opsional untuk eksekusi async
* @mengembalikan Tidak ada
*/

window.WAPI.loadEarlierMessagesTillDate = function (id, lastMessage, selesai) {


const ditemukan = WAPI.getChat(id);
x = fungsi () {
if (found.msgs.models[0].t > lastMessage && !
found.msgs.msgLoadState.noEarlierMsgs) {
found.loadEarlierMsgs().then(x);
} kalau tidak {
selesai();
}
};
x();
};

/**
* Mengambil semua objek metadata grup dari toko
*
* @param selesai Fungsi callback opsional untuk eksekusi async
* @returns {Array|*} Daftar metadata grup
*/
window.WAPI.getAllGroupMetadata = fungsi (selesai) {
const groupData = window.Store.GroupMetadata.map((groupData) => groupData.all);

if (selesai !== undefined) selesai(groupData);


kembalikan groupData;
};

/**
* Mengambil objek metadata grup dari penyimpanan berdasarkan ID
*
* @param id ID grup
* @param selesai Fungsi callback opsional untuk eksekusi async
* @returns {T|*} Objek metadata grup
*/
window.WAPI.getGroupMetadata = fungsi async (id, selesai) {
biarkan output = window.Store.GroupMetadata.get(id);

if (keluaran !== tidak terdefinisi) {


if (keluaran.basi) {
menunggu window.Store.GroupMetadata.update(id);
}
}

if (selesai !== undefined) selesai(output);


kembali keluaran;

};
/**
* Mengambil peserta grup
*
* @param id ID grup
* @returns {Janji.<*>} Menghasilkan metadata grup
* @pribadi
*/
window.WAPI._getGroupParticipants = fungsi async (id) {
const metadata = menunggu WAPI.getGroupMetadata(id);
mengembalikan metadata.peserta;
};

/**
* Mengambil ID peserta grup
*
* @param id ID grup
* @param selesai Fungsi callback opsional untuk eksekusi async
* @returns {Janji.<Array|*>} Menghasilkan daftar ID
*/
window.WAPI.getGroupParticipantIDs = fungsi async (id, selesai) {
output const = (menunggu WAPI._getGroupParticipants(id))
.map((peserta) => peserta.id);

if (selesai !== undefined) selesai(output);


kembali keluaran;
};

window.WAPI.getGroupAdmins = fungsi async (id, selesai) {


output const = (menunggu WAPI._getGroupParticipants(id))
.filter((peserta) => peserta.isAdmin)
.map((admin) => admin.id);

if (selesai !== undefined) selesai(output);


kembali keluaran;
};

/**
* Mendapat objek yang mewakili pengguna yang masuk
*
* @returns {Array|*|$q.all}
*/
window.WAPI.getMe = fungsi (selesai) {
const rawMe = window.Store.Contact.get(window.Store.Conn.me);

if (selesai !== undefined) selesai(rawMe.all);


kembalikan rawMe.all;
};

window.WAPI.isLoggedIn = fungsi (selesai) {


// Kontak selalu ada saat login
const isLogged = window.Store.Contact && window.Store.Contact.checksum !==
undefined;

if (selesai !== undefined) selesai(isLogged);


return isLogged;
};
window.WAPI.isConnected = fungsi (selesai) {
// Ikon Telepon Terputus muncul saat telepon terputus dari tnternet
const isConnected = document.querySelector('*[data-icon="alert-phone"]') !==
null ? salah benar;

if (selesai !== undefined) selesai(terhubung);


kembali Terhubung;
};

window.WAPI.processMessageObj = fungsi (messageObj, includeMe,


includeNotifications) {
if (messageObj.isNotification) {
jika (termasuk Pemberitahuan)
kembalikan WAPI._serializeMessageObj(messageObj);
kalau tidak
kembali;
// Pesan sistem
// (yaitu "Pesan yang Anda kirim ke obrolan ini dan panggilan sekarang
diamankan dengan enkripsi ujung-ke-ujung...")
} else if (messageObj.id.fromMe === false || includeMe) {
kembalikan WAPI._serializeMessageObj(messageObj);
}
kembali;
};

window.WAPI.getAllMessagesInChat = function (id, includeMe, includeNotifications,


done) {
const obrolan = WAPI.getChat(id);
biarkan keluaran = [];
const pesan = chat.msgs._models;

untuk (const i dalam pesan) {


if (i === "hapus") {
melanjutkan;
}
const messageObj = pesan[i];

biarkan pesan = WAPI.processMessageObj(messageObj, includeMe,


includeNotifications)
jika (pesan)
keluaran.push(pesan);
}
if (selesai !== undefined) selesai(output);
kembali keluaran;
};

window.WAPI.getAllMessageIdsInChat = function (id, includeMe, includeNotifications,


done) {
const obrolan = WAPI.getChat(id);
biarkan keluaran = [];
const pesan = chat.msgs._models;

untuk (const i dalam pesan) {


jika ((i === "hapus")
|| (!includeMe && pesan[i].isMe)
|| (!includeNotifications && messages[i].isNotification)) {
melanjutkan;
}
output.push(messages[i].id._serialized);
}
if (selesai !== undefined) selesai(output);
kembali keluaran;
};

window.WAPI.getMessageById = function (id, selesai) {


biarkan hasil = salah;
mencoba {
biarkan msg = window.Store.Msg.get(id);
jika (pesan) {
hasil = WAPI.processMessageObj(pesan, benar, benar);
}
} tangkap (err) {}

if (selesai !== undefined) {


selesai(hasil);
} kalau tidak {
mengembalikan hasil;
}
};

window.WAPI.ReplyMessage = fungsi (idMessage, pesan, selesai) {


var messageObject = window.Store.Msg.get(idMessage);
if (messageObject === tidak terdefinisi) {
if (selesai !== undefined) selesai(false);
kembali salah;
}
messageObject = messageObject.nilai();

const obrolan = WAPI.getChat(messageObject.chat.id)


if (obrolan !== tidak terdefinisi) {
if (selesai !== undefined) {
obrolan.sendMessage(pesan, null, pesanObjek).lalu(fungsi () {
fungsi tidur(ms) {
kembalikan Janji baru(resolve => setTimeout(resolve, ms));
}

var percobaan = 0;

pemeriksaan fungsi() {
for (biarkan i = chat.msgs.models.length - 1; i >= 0; i--) {
biarkan msg = chat.msgs.models[i];

if (!msg.senderObj.isMe || msg.body != pesan) {


melanjutkan;
}
selesai(WAPI._serializeMessageObj(msg));
kembali Benar;
}
percobaan += 1;
console.log(percobaan);
if (percobaan > 30) {
selesai(benar);
kembali;
}
tidur(500).lalu(periksa);
}
memeriksa();
});
kembali benar;
} kalau tidak {
obrolan.kirimMessage(pesan, null, objekpesan);
kembali benar;
}
} kalau tidak {
if (selesai !== undefined) selesai(false);
kembali salah;
}
};

window.WAPI.sendMessageToID = fungsi (id, pesan, selesai) {


mencoba {
jendela.getContact = (id) => {
return Store.WapQuery.queryExist(id);
}
jendela.getContact(id).lalu(kontak => {
if (kontak.status === 404) {
selesai(benar);
} kalau tidak {
Store.Chat.find(contact.jid).then(chat => {
obrolan.kirim Pesan(pesan);
kembali benar;
}).catch(tolak => {
if (WAPI.sendMessage(id, pesan)) {
selesai(benar);
kembali benar;
}kalau tidak{
selesai (salah);
kembali salah;
}
});
}
});
} tangkap (e) {
jika (jendela.Store.Chat.panjang === 0)
kembali salah;

firstChat = Store.Chat.models[0];
var originalID = firstChat.id;
firstChat.id = typeof originalID === "string" ? id : jendela
baru.Store.UserConstructor(id, { sengajaUsePrivateConstructor: true });
if (selesai !== undefined) {
firstChat.sendMessage(pesan).lalu(fungsi () {
firstChat.id = ID asli;
selesai(benar);
});
kembali benar;
} kalau tidak {
firstChat.sendMessage(pesan);
firstChat.id = ID asli;
kembali benar;
}
}
if (selesai !== undefined) selesai(false);
kembali salah;
}

window.WAPI.sendMessage = fungsi (id, pesan, selesai) {


var obrolan = WAPI.getChat(id);
if (obrolan !== tidak terdefinisi) {
if (selesai !== undefined) {
obrolan.sendMessage(pesan).lalu(fungsi () {
fungsi tidur(ms) {
kembalikan Janji baru(resolve => setTimeout(resolve, ms));
}

var percobaan = 0;

pemeriksaan fungsi() {
for (biarkan i = chat.msgs.models.length - 1; i >= 0; i--) {
biarkan msg = chat.msgs.models[i];

if (!msg.senderObj.isMe || msg.body != pesan) {


melanjutkan;
}
selesai(WAPI._serializeMessageObj(msg));
kembali Benar;
}
percobaan += 1;
console.log(percobaan);
if (percobaan > 30) {
selesai(benar);
kembali;
}
tidur(500).lalu(periksa);
}
memeriksa();
});
kembali benar;
} kalau tidak {
obrolan.kirim Pesan(pesan);
kembali benar;
}
} kalau tidak {
if (selesai !== undefined) selesai(false);
kembali salah;
}
};

window.WAPI.sendMessage2 = fungsi (id, pesan, selesai) {


var obrolan = WAPI.getChat(id);
if (obrolan !== tidak terdefinisi) {
mencoba {
if (selesai !== undefined) {
obrolan.sendMessage(pesan).lalu(fungsi () {
selesai(benar);
});
} kalau tidak {
obrolan.kirim Pesan(pesan);
}
kembali benar;
} tangkap (kesalahan) {
jika (selesai !== tidak terdefinisi) selesai (salah)
kembali salah;
}
}
jika (selesai !== tidak terdefinisi) selesai (salah)
kembali salah;
};

window.WAPI.sendSeen = fungsi (id, selesai) {


var obrolan = window.WAPI.getChat(id);
if (obrolan !== tidak terdefinisi) {
if (selesai !== undefined) {
jika (chat.getLastMsgKeyForAction === tidak terdefinisi)
obrolan.getLastMsgKeyForAction = fungsi () { };
Store.SendSeen(obrolan, salah).lalu(fungsi () {
selesai(benar);
});
kembali benar;
} kalau tidak {
Store.SendSeen(chat, false);
kembali benar;
}
}
if (selesai !== undefined) selesai();
kembali salah;
};

function isChatMessage(pesan) {
jika (message.isSentByMe) {
kembali salah;
}
if (message.isNotification) {
kembali salah;
}
if (!message.isUserCreatedType) {
kembali salah;
}
kembali benar;
}

window.WAPI.getUnreadMessages = function (includeMe, includeNotifications,


use_unread_count, done) {
const obrolan = window.Store.Chat.models;
biarkan keluaran = [];

untuk (biarkan obrolan dalam obrolan) {


if (isNaN(obrolan)) {
melanjutkan;
}

biarkan messageGroupObj = obrolan[obrolan];


biarkan messageGroup = WAPI._serializeChatObj(messageGroupObj);

messageGroup.messages = [];

const pesan = messageGroupObj.msgs._models;


for (biarkan i = pesan.panjang - 1; i >= 0; i--) {
biarkan pesanObj = pesan[i];
if (typeof (messageObj.isNewMsg) != "boolean" || messageObj.isNewMsg
=== salah) {
melanjutkan;
} kalau tidak {
messageObj.isNewMsg = false;
biarkan pesan = WAPI.processMessageObj(messageObj, includeMe,
includeNotifications);
jika (pesan) {
messageGroup.messages.push(pesan);
}
}
}

if (messageGroup.messages.length > 0) {
keluaran.push(messageGroup);
} else { // tidak ada pesan dengan isNewMsg benar
jika (use_unread_count) {
biarkan n = messageGroupObj.unreadCount; // akan menggunakan
atribut unreadCount untuk mengambil n pesan terakhir dari pengirim
for (biarkan i = pesan.panjang - 1; i >= 0; i--) {
biarkan pesanObj = pesan[i];
jika (n > 0) {
if (!messageObj.isSentByMe) {
biarkan pesan = WAPI.processMessageObj(messageObj,
includeMe, includeNotifications);
messageGroup.messages.unshift(message);
n -= 1;
}
} else if (n === -1) { // obrolan ditandai sebagai belum dibaca
sehingga akan mengambil pesan terakhir sebagai belum dibaca
if (!messageObj.isSentByMe) {
biarkan pesan = WAPI.processMessageObj(messageObj,
includeMe, includeNotifications);
messageGroup.messages.unshift(message);
merusak;
}
} else { // unreadCount = 0
merusak;
}
}
if (messageGroup.messages.length > 0) {
messageGroupObj.unreadCount = 0; // setel ulang penghitung yang
belum dibaca
keluaran.push(messageGroup);
}
}
}
}
if (selesai !== undefined) {
selesai (keluaran);
}
kembali keluaran;
};

window.WAPI.getGroupOwnerID = fungsi async (id, selesai) {


output const = (menunggu WAPI.getGroupMetadata(id)).owner.id;
if (selesai !== undefined) {
selesai (keluaran);
}
kembali keluaran;

};

window.WAPI.getCommonGroups = fungsi async (id, selesai) {


biarkan keluaran = [];

grup = window.WAPI.getAllGroups();

untuk (biarkan idx dalam grup) {


mencoba {
peserta = menunggu window.WAPI.getGroupParticipantIDs(groups[idx].id);
if (peserta.filter((peserta) => peserta == id).panjang) {
keluaran.push(grup[idx]);
}
} tangkap (err) {
console.log("Kesalahan dalam grup:");
console.log(grup[idx]);
console.log(err);
}
}

if (selesai !== undefined) {


selesai (keluaran);
}
kembali keluaran;
};

window.WAPI.getProfilePicSmallFromId = fungsi (id, selesai) {


window.Store.ProfilePicThumb.find(id).kemudian(fungsi (d) {
if (d.img !== tidak terdefinisi) {
window.WAPI.downloadFileWithCredentials(d.img, selesai);
} kalau tidak {
selesai (salah);
}
}, fungsi (e) {
selesai (salah);
})
};

window.WAPI.getProfilePicFromId = fungsi (id, selesai) {


window.Store.ProfilePicThumb.find(id).kemudian(fungsi (d) {
if (d.imgFull !== undefined) {
window.WAPI.downloadFileWithCredentials(d.imgFull, selesai);
} kalau tidak {
selesai (salah);
}
}, fungsi (e) {
selesai (salah);
})
};

window.WAPI.downloadFileWithCredentials = fungsi (url, selesai) {


biarkan xhr = new XMLHttpRequest();

xhr.onload = fungsi () {
jika (xhr.readyState == 4) {
if (xhr.status == 200) {
biarkan pembaca = new FileReader();
reader.readAsDataURL(xhr.response);
pembaca.onload = fungsi (e) {
selesai(reader.result.substr(reader.result.indexOf(',') + 1))
};
} kalau tidak {
console.error(xhr.statusText);
}
} kalau tidak {
console.log(err);
selesai (salah);
}
};

xhr.open("DAPATKAN", url, benar);


xhr.withCredentials = true;
xhr.responseType = 'gumpalan';
xhr.kirim(null);
};

window.WAPI.downloadFile = fungsi (url, selesai) {


biarkan xhr = new XMLHttpRequest();

xhr.onload = fungsi () {
jika (xhr.readyState == 4) {
if (xhr.status == 200) {
biarkan pembaca = new FileReader();
reader.readAsDataURL(xhr.response);
pembaca.onload = fungsi (e) {
selesai(reader.result.substr(reader.result.indexOf(',') + 1))
};
} kalau tidak {
console.error(xhr.statusText);
}
} kalau tidak {
console.log(err);
selesai (salah);
}
};

xhr.open("DAPATKAN", url, benar);


xhr.responseType = 'gumpalan';
xhr.kirim(null);
};

window.WAPI.getBatteryLevel = fungsi (selesai) {


if (window.Store.Conn.plugged) {
if (selesai !== undefined) {
selesai(100);
}
mengembalikan 100;
}
output = window.Store.Conn.battery;
if (selesai !== undefined) {
selesai (keluaran);
}
kembali keluaran;
};

window.WAPI.deleteConversation = fungsi (chatId, selesai) {


biarkan userId = jendela baru.Store.UserConstructor(chatId,
{intentionallyUsePrivateConstructor: true});
biarkan percakapan = WAPI.getChat(userId);

if (! percakapan) {
if (selesai !== undefined) {
selesai (salah);
}
kembali salah;
}

window.Store.sendDelete(percakapan, false).then(() => {


if (selesai !== undefined) {
selesai(benar);
}
}).catch(() => {
if (selesai !== undefined) {
selesai (salah);
}
});

kembali benar;
};

window.WAPI.deleteMessage = function (chatId, messageArray, cabut=false, selesai) {


biarkan userId = jendela baru.Store.UserConstructor(chatId,
{intentionallyUsePrivateConstructor: true});
biarkan percakapan = WAPI.getChat(userId);

jika(!percakapan) {
if(selesai !== undefined) {
selesai (salah);
}
kembali salah;
}

if (!Array.isArray(messageArray)) {
PesanArray = [PesanArray];
}
biarkan pesanToDelete = messageArray.map(msgId => window.Store.Msg.get(msgId));

jika (cabut) {
percakapan.sendRevokeMsgs(messagesToDelete, percakapan);
} kalau tidak {
percakapan.sendDeleteMsgs(messagesToDelete, percakapan);
}

if (selesai !== undefined) {


selesai(benar);
}

kembali benar;
};

window.WAPI.checkNumberStatus = fungsi (id, selesai) {


jendela.Store.WapQuery.queryExist(id).kemudian((hasil) => {
jika( selesai !== tidak terdefinisi) {
if (result.jid === undefined) lempar 404;
selesai(window.WAPI._serializeNumberStatusObj(hasil));
}
}).catch((e) => {
if (selesai !== undefined) {
selesai(window.WAPI._serializeNumberStatusObj({
keadaan: e,
jid : id
}));
}
});

kembali benar;
};

/**
* Pesan baru fungsi yang dapat diamati.
*/
window.WAPI._newMessagesQueue = [];
window.WAPI._newMessagesBuffer = (sessionStorage.getItem('saved_msgs') != null) ?
JSON.parse(sessionStorage.getItem('saved_msgs')) : [];
window.WAPI._newMessagesDebouncer = null;
window.WAPI._newMessagesCallbacks = [];

jendela.Store.Msg.off('tambahkan');
sessionStorage.removeItem('saved_msgs');

jendela.WAPI._newMessagesListener = jendela.Store.Msg.on('tambahkan', (pesanbaru)


=> {
if (PesanBaru && PesanBaru.isPesanBaru && !MessageBaru.isSentByMe) {
biarkan pesan = window.WAPI.processMessageObj(newMessage, false, false);
jika (pesan) {
jendela.WAPI._newMessagesQueue.push(pesan);
window.WAPI._newMessagesBuffer.push(pesan);
}

// Memulai waktu debouncer untuk tidak memanggil panggilan balik untuk


setiap pesan jika lebih dari satu pesan masuk
// di detik yang sama
if (!window.WAPI._newMessagesDebouncer &&
window.WAPI._newMessagesQueue.length > 0) {
jendela.WAPI._newMessagesDebouncer = setTimeout(() => {
biarkan queuedMessages = window.WAPI._newMessagesQueue;

window.WAPI._newMessagesDebouncer = null;
window.WAPI._newMessagesQueue = [];

biarkan hapusCallbacks = [];

jendela.WAPI._newMessagesCallbacks.forEach(fungsi (callbackObj) {
if (callbackObj.callback !== undefined) {
callbackObj.callback(queuedMessages);
}
jika (callbackObj.rmAfterUse === benar) {
hapusCallbacks.push(callbackObj);
}
});

// Hapus panggilan balik yang dapat dilepas.


hapusCallbacks.forEach(fungsi (rmCallbackObj) {
biarkan callbackIndex =
window.WAPI._newMessagesCallbacks.indexOf(rmCallbackObj);
jendela.WAPI._newMessagesCallbacks.splice(callbackIndex, 1);
});
}, 1000);
}
}
});

window.WAPI._unloadInform = (acara) => {


// Simpan di buffer pesan yang belum dibaca
window.WAPI._newMessagesBuffer.forEach((pesan) => {
Object.keys(message).forEach(key => pesan[kunci] === undefined ? hapus
pesan[kunci] : '');
});
sessionStorage.setItem("saved_msgs",
JSON.stringify(window.WAPI._newMessagesBuffer));

// Beri tahu callback bahwa halaman akan dimuat ulang.


jendela.WAPI._newMessagesCallbacks.forEach(fungsi (callbackObj) {
if (callbackObj.callback !== undefined) {
callbackObj.callback({ status: -1, pesan: 'halaman akan dimuat ulang,
tunggu dan daftarkan panggilan balik lagi.' });
}
});
};

window.addEventListener("unload", window.WAPI._unloadInform, false);


window.addEventListener("beforeunload", window.WAPI._unloadInform, false);
window.addEventListener("pageunload", window.WAPI._unloadInform, false);

/**
* Mendaftarkan panggilan balik untuk dipanggil saat pesan baru tiba di WAPI.
* @param rmCallbackAfterUse - Boolean - Tentukan apakah callback hanya perlu
dijalankan sekali
* @param selesai - fungsi - Fungsi panggilan balik untuk dipanggil saat pesan baru
tiba.
* @returns {boolean}
*/
window.WAPI.waitNewMessages = fungsi (rmCallbackAfterUse = true, selesai) {
window.WAPI._newMessagesCallbacks.push({ callback: selesai, rmAfterUse:
rmCallbackAfterUse });
kembali benar;
};

/**
* Membaca pesan baru buffered.
* @param selesai - fungsi - Fungsi panggilan balik untuk dipanggil berisi pesan
buffer.
* @returns {Array}
*/
window.WAPI.getBufferedNewMessages = fungsi (selesai) {
biarkan bufferedMessages = window.WAPI._newMessagesBuffer;
window.WAPI._newMessagesBuffer = [];
if (selesai !== undefined) {
selesai(bufferedMessages);
}
kembali pesan buffered;
};
/** Mengakhiri pesan baru fungsi yang dapat diamati **/
window.WAPI.sendImage = function (imgBase64, chatid, nama file, caption, selesai) {
//var idUser = jendela baru.Store.UserConstructor(chatid);
var idUser = jendela baru.Store.UserConstructor(chatid,
{ sengajaUsePrivateConstructor: true });
// buat obrolan baru
return Store.Chat.find(idUser).then((chat) => {
var mediaBlob = window.WAPI.base64ImageToFile(imgBase64, namafile);
var mc = Store.MediaCollection(obrolan);
mc.processAttachments([{file: mediaBlob}, 1], obrolan, 1).then(() => {
var media = mc.model[0];
media.sendToChat(obrolan, { keterangan: keterangan });
if (selesai !== undefined) selesai(benar);
});
});
}

window.WAPI.base64ImageToFile = function (b64Data, nama file) {


var arr = b64Data.split(',');
var mime = arr[0].match(/:(.*?);/)[1];
var bstr = atob(arr[1]);
var n = bstr.panjang;
var u8arr = new Uint8Array(n);

sementara (n--) {
u8arr[n] = bstr.charCodeAt(n);
}

kembalikan File baru ([u8arr], nama file, {type: mime});


};

/**
* Kirim kartu kontak ke obrolan tertentu menggunakan id obrolan
*
* @param {string} ke '000000000000@c.us'
* @param {string|array} kontak '111111111111@c.us' | ['222222222222@c.us',
'333333333333@c.us, ... 'nnnnnnnnnnnn@c.us']
*/
window.WAPI.sendContact = fungsi (untuk, kontak) {
if (!Array.isArray(kontak)) {
kontak = [kontak];
}
kontak = kontak.peta((c) => {
return WAPI.getChat(c).__x_contact;
});

if (panjang kontak > 1) {


jendela.WAPI.getChat(ke).sendContactList(kontak);
} lain jika (kontak.panjang === 1) {
jendela.WAPI.getChat(ke).sendContact(kontak[0]);
}
};

/**
* Buat ID obrolan berdasarkan yang dikloning
*
* @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;
};

/**
* Kirim VCard Khusus tanpa perlu kontak menjadi Kontak Whatsapp
*
* @param {string} chatId '000000000000@c.us'
* @param {objek|array} vcard { displayName: 'Nama Kontak', vcard: 'BEGIN:VCARD\
nVERSION:3.0\nN:;Nama Kontak;;;\nEND:VCARD' } | [{ displayName: 'Nama Kontak 1',
vcard: 'BEGIN:VCARD\nVERSI:3.0\nN:;Nama Kontak 1;;;\nEND:VCARD' }, { displayName:
'Nama Kontak 2', vcard: 'BEGIN :VCARD\nVERSION:3.0\nN:;Nama Kontak 2;;;\nEND:VCARD'
}]
*/
window.WAPI.sendVCard = function (chatId, vcard) {
var obrolan = Store.Chat.get(chatId);
var tempMsg = Object.create(Store.Msg.models.filter(msg => msg.__x_isSentByMe)
[0]);
var newId = window.WAPI.getNewMessageId(chatId);

var memperpanjang = {
ack : 0,
id : id baru,
lokal : !0,
diri : "keluar",
t : parseInt(new Date().getTime() / 1000),
ke : chatId,
isNewMsg: !0,
};

if (Array.isArray(vcard)) {
Objek.menetapkan(memperpanjang, {
ketik : "multi_vcard",
vcardList: vcard
});

hapus perpanjangan.tubuh;
} kalau tidak {
Objek.menetapkan(memperpanjang, {
ketik : "vcard",
subtipe: vcard.displayName,
body : vcard.vcard
});

hapus extend.vcardList;
}

Object.assign(tempMsg, perpanjang);

obrolan.addAndSendMsg(tempMsg);
};
/**
* Blokir kontak
* @param {string} id '000000000000@c.us'
* @param {*} selesai - fungsi - Fungsi panggilan balik untuk dipanggil saat pesan
baru masuk.
*/
window.WAPI.contactBlock = fungsi (id, selesai) {
kontak const = window.Store.Contact.get(id);
if (kontak !== undefined) {
kontak.setBlock(!0);
selesai(benar);
kembali benar;
}
selesai (salah);
kembali salah;
}
/**
* buka Blokir kontak
* @param {string} id '000000000000@c.us'
* @param {*} selesai - fungsi - Fungsi panggilan balik untuk dipanggil saat pesan
baru masuk.
*/
window.WAPI.contactUnblock = fungsi (id, selesai) {
kontak const = window.Store.Contact.get(id);
if (kontak !== undefined) {
kontak.setBlock(!1);
selesai(benar);
kembali benar;
}
selesai (salah);
kembali salah;
}

/**
* Hapus peserta Grup
* @param {*} idGroup '0000000000-00000000@g.us'
* @param {*} idParticipant '000000000000@c.us'
* @param {*} selesai - fungsi - Fungsi panggilan balik untuk dipanggil saat pesan
baru masuk.
*/
window.WAPI.removeParticipantGroup = function (idGroup, idParticipant, selesai) {
window.Store.WapQuery.removeParticipants(idGroup, [idParticipant]).then(() => {
const metaDataGroup = window.Store.GroupMetadata.get(id)
checkParticipant = metaDataGroup.participants._index[idParticipant];
if (checkParticipant === undefined) {
selesai(benar); kembali benar;
}
})
}

/**
* Promosikan Peserta menjadi Admin di Grup
* @param {*} idGroup '0000000000-00000000@g.us'
* @param {*} idParticipant '000000000000@c.us'
* @param {*} selesai - fungsi - Fungsi panggilan balik untuk dipanggil saat pesan
baru masuk.
*/
window.WAPI.promoteParticipantAdminGroup = function (idGroup, idParticipant,
selesai) {
window.Store.WapQuery.promoteParticipants(idGroup, [idParticipant]).then(() =>
{
const metaDataGroup = window.Store.GroupMetadata.get(id)
checkParticipant = metaDataGroup.participants._index[idParticipant];
if (checkParticipant !== undefined && checkParticipant.isAdmin) {
selesai(benar); kembali benar;
}
selesai (salah); kembali salah;
})
}

/**
* Turunkan Admin Grup
* @param {*} idGroup '0000000000-00000000@g.us'
* @param {*} idParticipant '000000000000@c.us'
* @param {*} selesai - fungsi - Fungsi panggilan balik untuk dipanggil saat pesan
baru masuk.
*/
window.WAPI.demoteParticipantAdminGroup = function (idGroup, idParticipant,
selesai) {
window.Store.WapQuery.demoteParticipants(idGroup, [idParticipant]).then(() => {
const metaDataGroup = window.Store.GroupMetadata.get(id)
if (metaDataGroup === tidak terdefinisi) {
selesai (salah); kembali salah;
}
checkParticipant = metaDataGroup.participants._index[idParticipant];
if (checkParticipant !== undefined && checkParticipant.isAdmin) {
selesai (salah); kembali salah;
}
selesai(benar); kembali benar;
})
}

Anda mungkin juga menyukai