我希望whatsapp web bot回复从url中提取的图像如何添加该功能?

时间:2018-04-08 18:19:04

标签: javascript chatbot

当发送命令时,机器人会很好地回复。

如何让WhatsApp网络机器人回复从网址中提取的图片?我希望它能够使用从URL中提取的图像进行回复,例如www.school.com/pic.jpg。在代码上如果用户文本@time它回复时间和日期但我希望它用图像回复。

//
// 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];
    for (var x in elementArr){
        var pos = elementArr[x];
        if (isNaN(pos*1)){ //dont know why, but for some reason after the last position it loops once again and "pos" is loaded with a function WTF. I got tired finding why and did this
            continue;
        }
        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-out'))){
        pos--;
        if (pos <= -1){
            return false;
        }
    }
    if (messages[pos] && messages[pos].querySelector('.selectable-text')){
        return messages[pos].querySelector('.selectable-text').innerText;
    } 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']")[0];

    //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: '' }).innerText; //.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

    if (lastMsg.toUpperCase().indexOf('@HELP') > -1){
        sendText = `
            Cool ${title}! Some commands that you can send me:

            1. *@TIME*
            2. *@JOKE*`
    }

    if (lastMsg.toUpperCase().indexOf('@About') > -1){
        sendText = `
            Cool ${title}! Some commands that you can send me:

            *${new Date()}*`
    }

    if (lastMsg.toUpperCase().indexOf('@TIME') > -1){
        sendText = `
            Don't you have a clock, dude?

            *${new Date()}*`
    }

    if (lastMsg.toUpperCase().indexOf('@JOKE') > -1){
        sendText = jokeList[rand(jokeList.length - 1)];
    }

    // that's sad, there's not to send back...
    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) }, 0.1);
            });
        })
    } else {
        sendMessage(null, sendText.trim(), () => {
            goAgain(() => { start(chats, cnt + 1) }, 0.1);
        });
    }
}
start();

0 个答案:

没有答案