Skip to content

Instantly share code, notes, and snippets.

@Elyx0
Created March 11, 2017 09:19
Show Gist options
  • Save Elyx0/34adcfdf048e4b35adbdd8caa35ffe54 to your computer and use it in GitHub Desktop.
Save Elyx0/34adcfdf048e4b35adbdd8caa35ffe54 to your computer and use it in GitHub Desktop.
Nodejs Jabberwacky chatbot
#!/usr/bin/env node
// usage: ./jabberwacky.js "Hello sir"
var fs = require('fs');
var cheerio = require('cheerio');
var arg = process.argv;
var fetch = require('node-fetch');
var search = arg.slice(2,arg.length).join(' ').replace(/Curvebot1?/,'');
var previous = fs.readFileSync('./conv.txt');
var def = {
asbotname: 'jabberwacky',
reaction: '',
vText8: '',
vText7: '',
vText6: '',
vText5: '',
vtext4: '',
vText3: '',
vText2: '',
vText1: '',
adcolor:0,
sortorder:1,
function: '',
prevref: '',
lineref: '!01',
vText1uni: '',
vText1: '',
islearning:1,
emotion: '',
sub: ' Say it!',
speechtest: 1,
headers: null,
}
var context = previous.length ? JSON.parse(previous) : def;
context.vText1 = context.vText1uni = search;
var header = context.headers ? {
Host: "www.jabberwacky.com",
Origin: "http://jabberwacky.com",
Connection: 'keep-alive',
AcceptLanguage: 'en-US',
Accept: 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
Referer: "http://www.jabberwacky.com/",
Cookie:context.headers}
: {};
header["Content-Type"] = "application/x-www-form-urlencoded";
delete context.headers;
//console.log('Using Cookie:', header);
var form = Object.keys(context).map(k => { return `${encodeURIComponent(k)}=${encodeURIComponent(context[k])}`}).join('&');
fetch('http://jabberwacky.com/',{ headers:header, method: 'POST', body:form}).then(res => {
//console.log(res);
res.text().then(r => {
//console.log(res.headers);
var headers = res.headers.get('set-cookie'); ///Is array :( get return only first
var moreHeaders = res.headers._headers['set-cookie'];
headers = moreHeaders.map(e => e.split(';')[0]).join('; ');
//console.log(headers,'<<<<<<<<<');
var $ = cheerio.load(r);
var formInputs = $('form').first().find('input');
var extracted = {};
formInputs.each((i,el)=>{
extracted[$(el).attr('name')] = $(el).attr('value');
});
extracted.headers = headers;
//console.log(extracted);
fs.writeFileSync('./conv.txt',JSON.stringify(extracted));
//debugger;
process.stdout.write(extracted.vText2);
process.exit(0);
});
},err => console.log(err));
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment