var msg_m_prompt = 'Insert the message for males. I\'ll replace %name with the recipient name.'; var msg_f_prompt = 'Insert the message for females. I\'ll replace %name with the recipient name.'; var throttle_prompt = 'Insert the pause in milliseconds between a friend and the next.'; var exclude_prompt = 'Insert the list of friends to ignore, comma separated.'; var exerror_alert = '%s is not in your friends, you might have made a mistake. Do you want to continue?'; var time_alert = 'The script will take %s seconds!'; var done = 'Done!'; if(!Array.prototype.indexOf){Array.prototype.indexOf=function(d){if(void 0===this||null===this)throw new TypeError;var c=Object(this),b=c.length>>>0;if(0===b)return-1;var a=0;0=b)return-1;for(a=0<=a?a:Math.max(b-Math.abs(a),0);a milliseconds){ break; } } } function send(msg, to) { function serialize(obj) { var str = []; for(var p in obj) str.push(p + "=" + encodeURIComponent(obj[p])); return str.join("&"); } function random(len) { var min = Math.pow(10, len-1); var max = Math.pow(10, len); return Math.floor(Math.random() * (max - min + 1)) + min; } function generatePhstamp(qs, dtsg) { var input_len = qs.length; numeric_csrf_value=''; for(var ii=0;ii", "message_batch[0][specific_to_list][0]": "fbid:" + to, "__user": fbid, "message_batch[0][timestamp_absolute]": "Oggi", "message_batch[0][spoof_warning]": "false", "message_batch[0][client_thread_id]": "user:" + to, "message_batch[0][source]": "source:chat:web", "message_batch[0][has_attachment]": "false", "message_batch[0][source_tags][0]": "source:chat", "message_batch[0][body]": msg, "message_batch[0][is_filtered_content]": "false", "message_batch[0][timestamp]": "" + Math.round(new Date().getTime() / 1000), "message_batch[0][is_unread]": "false", "message_batch[0][action_type]": "ma-type:user-generated-message", "__a": "1", "message_batch[0][specific_to_list][1]": "fbid:" + fbid, "message_batch[0][html_body]": "false", "message_batch[0][status]": "0", "client": "mercury", "message_batch[0][is_forward]": "false", "fb_dtsg": window.require('Env').fb_dtsg }; var req = serialize(data); // Thanks http://pastebin.com/VJAhUw30 req += "&phstamp=" + generatePhstamp(req, data.fb_dtsg); xmlhttp = new XMLHttpRequest(); xmlhttp.open('POST', '/ajax/mercury/send_messages.php'); xmlhttp.send(req); } function buddy(callback) { var xhr = new XMLHttpRequest(); xhr.open("GET", "https://www.facebook.com/ajax/chat/user_info_all.php?__user=" + window.require('Env').user + "&__a=1&viewer=" + window.require('Env').user, true); xhr.onreadystatechange = function() { if (xhr.readyState == 4) { var resp = JSON.parse(xhr.responseText.slice(9)); callback(resp.payload); } }; xhr.send(); } function spam() { var msg_m, msg_f, buddy_num, msg, pos = 1, throttle, exclude, present; buddy(function(buddy_list) { buddy_num = size(buddy_list); msg_m = prompt(msg_m_prompt); msg_f = prompt(msg_f_prompt); exclude = prompt(exclude_prompt).split(","); if (exclude.length == 1 && exclude[0].trim() == '') exclude = Array(); for (var i = 0; i < exclude.length; i++) { present = false; for (var id in buddy_list) if (buddy_list[id].name == exclude[i].trim()) present = true; if (!present) if (!confirm(exerror_alert.replace('%s', exclude[i].trim()))) return; } throttle = +prompt(throttle_prompt); if (!confirm(time_alert.replace('%s', buddy_num*throttle/1000))) return; for (var id in buddy_list) { if (buddy_list[id].gender === 1) msg = msg_f; else msg = msg_m; msg = msg.replace('%name', buddy_list[id].firstName); // if (buddy_list[id].name == '') send(msg, id); if (exclude.indexOf(buddy_list[id].name) == -1) send(msg, id); if (pos % Math.floor(buddy_num/100) == 0) console.log(Math.floor(pos/(buddy_num/100)) + ' %'); pos++; sleep(throttle); } alert(done); }); } spam();