A chat bot for WhatsApp Web, with some basic commands. Check console for log.
// ==UserScript==
// @name WhatsApp Web - Chat Bot
// @namespace WACB
// @version 0.1
// @description A chat bot for WhatsApp Web, with some basic commands. Check console for log.
// @author Royalgamer06
// @match https://web.whatsapp.com/
// @grant GM_xmlhttpRequest
// @grant unsafeWindow
// @run-at document-idle
// ==/UserScript==
var jq = document.createElement('script');
jq.onload = function() {
jQuery.noConflict();
console.log('jQuery loaded');
setTimeout(Main, 3500);
};
jq.src = "//ajax.googleapis.com/ajax/libs/jquery/2.2.2/jquery.min.js";
document.getElementsByTagName('head')[0].appendChild(jq);
function Main() {
console.log("[WACB] Waiting for chat to load");
jQuery("#pane-side").on("click", function() {
setTimeout(listenToChat, 350);
});
}
function listenToChat() {
console.log("[WACB] Listening to chat");
/*jQuery(".message-list").bind("DOMSubtreeModified", function() {
var new_msg = jQuery(".selectable-text").last().text();
console.log("[WACB] New chat message: \n" + new_msg);
if (new_msg.indexOf("!") === 0) {
var cmd_line = new_msg.substring(1);
var cmd = cmd_line.split(" ")[0];
var args = cmd_line.split(" ").shift();
if (cmd == "about") {
sendMsg("I am a chat bot, made by Roy van Dijk.");
}
}
});*/
unsafeWindow.sendMsg = function(msg) {
console.log("[WACB] Sending message: \n" + msg);
var target = document.getElementsByClassName("input")[1];
var eventType = "textInput";
var evt = document.createEvent("TextEvent");
evt.initTextEvent(eventType, true, true, unsafeWindow, msg, 0, "en-US");
target.focus();
target.dispatchEvent(evt);
jQuery(".send-container").click();
};
var last_msg = jQuery(".selectable-text").last().text();
setInterval(function() {
var new_msg = jQuery(".selectable-text").last().text();
if (new_msg !== last_msg) {
console.log("[WACB] New chat message: \n" + new_msg);
last_msg = new_msg;
if (new_msg.indexOf("!") === 0) {
var cmd_line = new_msg.substring(1);
var cmd = cmd_line.split(" ")[0];
var args = cmd_line.split(" ").slice(1);
if (cmd == "help") {
sendMsg("I can do the following commands:");
sendMsg("*!about*: Returns who I am.");
sendMsg("*!joke*: Returns a random joke (about Chuck Norris).");
sendMsg("*!weather*: Returns the current weather in Eindhoven.");
sendMsg("*!weather <LOCATION>*: Returns the current weather in <LOCATION>.");
sendMsg("*!gewis*: Returns the agenda of GEWIS.");
sendMsg("(Work in progress)");
}
if (cmd == "about") {
sendMsg("I am a chat bot.");
}
if (cmd == "joke") {
GM_xmlhttpRequest({
method: "GET",
url: "http://api.icndb.com/jokes/random?escape=javascript",
onload: function(response) {
var json = JSON.parse(response.responseText);
sendMsg(json.value.joke);
}
});
}
if (cmd == "weather") {
var url = "http://api.apixu.com/v1/current.json?key=d0c5d252848043d6af4210418162706&q=Eindhoven";
if (args.length > 0) {
url = "http://api.apixu.com/v1/current.json?key=d0c5d252848043d6af4210418162706&q=" + args[0];
}
GM_xmlhttpRequest({
method: "GET",
url: url,
onload: function(response) {
var json = JSON.parse(response.responseText);
if (args.length > 0) {
if (json.error) {
sendMsg("ERROR: Couldn't find location.");
} else {
sendMsg("It is currently " + json.current.temp_c + "°C in " + args[0]);
}
} else {
sendMsg("It is currently " + json.current.temp_c + "°C in Eindhoven.");
}
}
});
}
if (cmd == "gewis") {
GM_xmlhttpRequest({
method: "GET",
url: "https://www.gewis.nl/activity",
onload: function(response) {
var acts = jQuery(".agenda-item-body", response.responseText);
for (var i = 0; i < acts.length; i++) {
sendMsg(jQuery("h4 > a", acts[i]).text().trim() + " - " + jQuery("div.col-md-4 > dl > dd:nth-child(2)", acts[i]).text().trim() + " @ " + jQuery("div.col-md-4 > dl > dd:nth-child(6)", acts[i]).text().trim());
}
}
});
}
}
}
}, 100);
}