Intinya bikin web.whatsapp.com di browser (khusus chrome/firefox, opera ga bisa), auto respon, respon jawab keyword2 yang sudah kita tentukan.
Untuk bisa membuat hal ini, harus ada komputer yang jalan terus dan terhubung internet dan terbuka browser chrome/firefox untuk akses web.whatsapp.com
Langkah-langkahnya cuma 2
1. Ambil isi file script di : ScriptAutoResponWA atau copas isi dibawah :
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(() => { | |
// | |
// GLOBAL VARS AND CONFIGS | |
// | |
var lastMessageOnChat = false; | |
var ignoreLastMsg = {}; | |
var elementConfig = { | |
"chats": [0, 0, 5, 2, 0, 3, 0, 0, 0], | |
"chat_icons": [0, 0, 1, 1, 1, 0], | |
"chat_title": [0, 0, 1, 0, 0, 0, 0], | |
"chat_lastmsg": [0, 0, 1, 1, 0, 0], | |
"chat_active": [0, 0], | |
"selected_title": [0, 0, 5, 3, 0, 1, 1, 0, 0, 0, 0] | |
}; | |
const jokeList = [ | |
` | |
Suami dan istri. | |
`, | |
` | |
Makan dan Minum. | |
` | |
] | |
// | |
// FUNCTIONS | |
// | |
// Get random value between a range | |
function rand(high, low = 0) { | |
return Math.floor(Math.random() * (high - low + 1) + low); | |
} | |
function getElement(id, parent){ | |
if (!elementConfig[id]){ | |
return false; | |
} | |
var elem = !parent ? document.body : parent; | |
var elementArr = elementConfig[id]; | |
elementArr.forEach(function(pos) { | |
if (!elem.childNodes[pos]){ | |
return false; | |
} | |
elem = elem.childNodes[pos]; | |
}); | |
return elem; | |
} | |
function getLastMsg(){ | |
var messages = document.querySelectorAll('.msg'); | |
var pos = messages.length-1; | |
while (messages[pos] && (messages[pos].classList.contains('msg-system') || messages[pos].querySelector('.message-in'))){ | |
pos--; | |
if (pos <= -1){ | |
return false; | |
} | |
} | |
if (messages[pos] && messages[pos].querySelector('.selectable-text')){ | |
return messages[pos].querySelector('.selectable-text').innerText.trim(); | |
} else { | |
return false; | |
} | |
} | |
function getUnreadChats(){ | |
var unreadchats = []; | |
var chats = getElement("chats"); | |
if (chats){ | |
chats = chats.childNodes; | |
for (var i in chats){ | |
if (!(chats[i] instanceof Element)){ | |
continue; | |
} | |
var icons = getElement("chat_icons", chats[i]).childNodes; | |
if (!icons){ | |
continue; | |
} | |
for (var j in icons){ | |
if (icons[j] instanceof Element){ | |
if (!(icons[j].childNodes[0].getAttribute('data-icon') == 'muted' || icons[j].childNodes[0].getAttribute('data-icon') == 'pinned')){ | |
unreadchats.push(chats[i]); | |
break; | |
} | |
} | |
} | |
} | |
} | |
return unreadchats; | |
} | |
function didYouSendLastMsg(){ | |
var messages = document.querySelectorAll('.msg'); | |
if (messages.length <= 0){ | |
return false; | |
} | |
var pos = messages.length-1; | |
while (messages[pos] && messages[pos].classList.contains('msg-system')){ | |
pos--; | |
if (pos <= -1){ | |
return -1; | |
} | |
} | |
if (messages[pos].querySelector('.message-out')){ | |
return true; | |
} | |
return false; | |
} | |
// Call the main function again | |
const goAgain = (fn, sec) => { | |
// const chat = document.querySelector('div.chat:not(.unread)') | |
// selectChat(chat) | |
setTimeout(fn, sec * 1000) | |
} | |
// Dispath an event (of click, por instance) | |
const eventFire = (el, etype) => { | |
var evt = document.createEvent("MouseEvents"); | |
evt.initMouseEvent(etype, true, true, window,0, 0, 0, 0, 0, false, false, false, false, 0, null); | |
el.dispatchEvent(evt); | |
} | |
// Select a chat to show the main box | |
const selectChat = (chat, cb) => { | |
const title = getElement("chat_title",chat).title; | |
eventFire(chat.firstChild.firstChild, 'mousedown'); | |
if (!cb) return; | |
const loopFewTimes = () => { | |
setTimeout(() => { | |
const titleMain = getElement("selected_title").title; | |
if (titleMain !== undefined && titleMain != title){ | |
console.log('not yet'); | |
return loopFewTimes(); | |
} | |
return cb(); | |
}, 300); | |
} | |
loopFewTimes(); | |
} | |
// Send a message | |
const sendMessage = (chat, message, cb) => { | |
//avoid duplicate sending | |
var title; | |
if (chat){ | |
title = getElement("chat_title",chat).title; | |
} else { | |
title = getElement("selected_title").title; | |
} | |
ignoreLastMsg[title] = message; | |
messageBox = document.querySelectorAll("[contenteditable='true']")[1]; | |
//add text into input field | |
messageBox.innerHTML = message.replace(/ /gm,''); | |
//Force refresh | |
event = document.createEvent("UIEvents"); | |
event.initUIEvent("input", true, true, window, 1); | |
messageBox.dispatchEvent(event); | |
//Click at Send Button | |
eventFire(document.querySelector('span[data-icon="send"]'), 'click'); | |
cb(); | |
} | |
// | |
// MAIN LOGIC | |
// | |
const start = (_chats, cnt = 0) => { | |
// get next unread chat | |
const chats = _chats || getUnreadChats(); | |
const chat = chats[cnt]; | |
var processLastMsgOnChat = false; | |
var lastMsg; | |
if (!lastMessageOnChat){ | |
if (false === (lastMessageOnChat = getLastMsg())){ | |
lastMessageOnChat = true; //to prevent the first "if" to go true everytime | |
} else { | |
lastMsg = lastMessageOnChat; | |
} | |
} else if (lastMessageOnChat != getLastMsg() && getLastMsg() !== false && !didYouSendLastMsg()){ | |
lastMessageOnChat = lastMsg = getLastMsg(); | |
processLastMsgOnChat = true; | |
} | |
if (!processLastMsgOnChat && (chats.length == 0 || !chat)) { | |
//console.log(new Date(), 'nothing to do now... (1)', chats.length, chat); | |
return goAgain(start, 3); | |
} | |
// get infos | |
var title; | |
if (!processLastMsgOnChat){ | |
title = getElement("chat_title",chat).title + ''; | |
lastMsg = (getElement("chat_lastmsg", chat) || { innerText: '' }).title.replace(/[\u2000-\u206F]/g, ""); | |
//.last-msg returns null when some user is typing a message to me | |
} else { | |
title = getElement("selected_title").title; | |
} | |
// avoid sending duplicate messaegs | |
if (ignoreLastMsg[title] && (ignoreLastMsg[title]) == lastMsg) { | |
//console.log(new Date(), 'nothing to do now... (2)', title, lastMsg); | |
return goAgain(() => { start(chats, cnt + 1) }, 0.1); | |
} | |
// what to answer back? | |
let sendText | |
//MENU | |
if (lastMsg.toUpperCase().indexOf('@HELP') > -1){ | |
sendText = ` | |
Cool ${title}! Ketik: | |
1. *@TIME* | |
2. *@JOKE*` | |
} | |
if (lastMsg.toUpperCase().indexOf('@TIME') > -1){ | |
sendText = ` | |
Waktu menunjukan: | |
*${new Date()}*` | |
} | |
if (lastMsg.toUpperCase().indexOf('NGAPAIN') > -1){ | |
sendText = ` | |
Ada apa ?` | |
} | |
if (lastMsg.toUpperCase().indexOf('@JOKE') > -1){ | |
sendText = jokeList[rand(jokeList.length - 1)]; | |
} | |
//END MENU | |
if (!sendText) { | |
ignoreLastMsg[title] = lastMsg; | |
console.log(new Date(), 'new message ignored -> ', title, lastMsg); | |
return goAgain(() => { start(chats, cnt + 1) }, 0.1); | |
} | |
//console.log(new Date(), 'new message to process, uhull -> ', title, lastMsg); | |
// select chat and send message | |
if (!processLastMsgOnChat){ | |
selectChat(chat, () => { | |
sendMessage(chat, sendText.trim(), () => { | |
goAgain(() => { start(chats, cnt + 1) }, 1); | |
}); | |
}) | |
} else { | |
sendMessage(null, sendText.trim(), () => { | |
goAgain(() => { start(chats, cnt + 1) }, 1); | |
}); | |
} | |
} | |
start(); | |
})() |
Perhatikan, baris ke 232, keyword yang kita hendak amati dan handle saat datang ke whatsapp kita ada lah NGAPAIN, dan akan dibalas otomatis = "Ada apa ?"

Select All, semua isi file tersebut, kemudian buka developer tools

Paste isi text tersebut dan enter

Maka kalau semua lancar, saat orang kirim pesan mengandung "ngapain", web.whatsapp.com kita akan reply spt ini

Ulangi langkah2 diatas tiap reopen whatsapp web.
Duplikasi baris 232-235 untuk keyword2 lain yang sering kita terima, misal tanya alamat, informasi rekening, info jualan lain, dsb
Update 20 April 2020
Menilik source code sepertinya ini bersumber dari github disini
No comments:
Post a Comment