NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript== // @name Dharma Inviter // @namespace https://vk.com/ // @version 10 // @description By His grace // @author Vishvashanti // @match http://smm.sattva-shop.ru/* // @match http://vk.com/* // @match https://vk.com/* // @grant none // @require http://code.jquery.com/jquery-latest.js // ==/UserScript== /* jshint -W097 */ "use strict"; // Your code here... $('#page_layout').append('<canvas id="myCanvas" width="130" height="50" style="border:1px solid #d3d3d3; display:none;"></canvas>'+ '<div style="padding: 5px; background: rgb(78, 114, 154) none repeat scroll 0% 0%; color: rgb(255, 255, 255); width: 127px; position: absolute; z-index: 10000; left: 0px; top: 0px;" id="">'+ '<div id="inviter"><a style = "color:#fff;" href = "#" onclick = "window.start_invite()">Начать инвайтинг</a></div><div id="start_invitation"></div></div>'); window.current_offset = 0; window.check_timeoutid = []; window.isset = function() { // + original by: Kevin van Zonneveld // + improved by: FremyCompany // + improved by: Onno Marsman // * example 1: isset( undefined, true); // * returns 1: false // * example 2: isset( 'Kevin van Zonneveld' ); // * returns 2: true var a=arguments, l=a.length, i=0; if (l===0) { throw new Error('Empty isset'); } while (i!==l) { if (typeof(a[i])=='undefined' || a[i]===null) { return false; } else { i++; } } return true; } window.getRandomInt = function(min, max) { return Math.floor(Math.random() * (max - min)) + min; } window.log = function(text){ $('#inviter').html(text); } String.prototype.replaceAll = function(search, replacement) { var target = this; return target.replace(new RegExp(search, 'g'), replacement); }; window.get_section_friends_prepare_data = function(data){ var text = data; text = text.replace(/^<!--/, '').replace(/-<>-(!?)>/g, '--$1>'); var answer = text.split('<!>'); window.get_section_friends_answer = answer; if (answer[5]=="{}") { return 1; } else { var members = answer[5]; members = members.replace('{"members": ',''); members = members.replaceAll('}',''); // members = members.replace('}',''); var a = eval(members); window.inviter_answer = answer; return a; } } window.invite_friend = function(gid,hash,mid){ jQuery.post('al_page.php','act=a_invite&al=1&gid='+gid+'&hash='+hash+'&mid='+mid, function(data){ var text = data; text = text.replace(/^<!--/, '').replace(/-<>-(!?)>/g, '--$1>'); var answer = text.split('<!>'); window.inviter_answer = answer; } ); } window.get_sattva_uid = function(gid,uid){ jQuery.post('https://sattva-shop.ru/inviter_group.php','t=get&gid='+gid+'&uid='+uid+'&start_offset='+window.start_offset+'&finish_offset='+window.finish_offset, function(data){ ; }); } window.put_sattva_uid = function(gid,uid,result){ jQuery.post('https://sattva-shop.ru/inviter_group.php','t=put&gid='+gid+'&uid='+uid+'&result='+result+'&start_offset='+window.start_offset+'&finish_offset='+window.finish_offset, function(data){ ; }); } window.get_captcha_key = function(gid,members,captcha_sid){ window.log('Получаем капчу...'); var c = document.getElementById('myCanvas'); var ctx = myCanvas.getContext('2d'); var img = new Image; img.onload = function(){ ctx.drawImage(img,0,0); // Or at whatever offset you like var dataURL = c.toDataURL(); window.log('Распознаем капчу...'); jQuery.post('https://sattva-shop.ru/r.php', {data:dataURL,owner:gid}, function(data){ window.log('Отправили капчу'); window.start_invite_array(gid,members,captcha_sid,data); }); }; img.src = "/captcha.php?sid="+captcha_sid+"&s=1"; } window.start_invite_array = function(gid,members,captcha_sid,captcha_key){ "use strict"; var offset = window.current_members_offset; window.log('Отправляем инвайт участнику №:' + (window.current_offset+offset)); if(!window.isset(members[offset])) { window.current_offset = 0 + window.current_offset + 40; window.start_invite_work(); } else { var hash = members[offset][11]; var mid = members[offset][0]; if (window.allowed_uids.indexOf(parseInt(mid))==-1){ window.current_members_offset = 0 + window.current_members_offset + 1; window.start_invite_array(gid,members,false,false); return; } let promise = new Promise((resolve, reject) => { var query = 'act=a_invite&al=1&gid='+gid+'&hash='+hash+'&mid='+mid; if (captcha_sid){ query = query + "&captcha_sid="+captcha_sid+"&captcha_key="+captcha_key; } jQuery.post('al_page.php',query, function(data){ var text = data; text = text.replace(/^<!--/, '').replace(/-<>-(!?)>/g, '--$1>'); var answer = text.split('<!>'); window.inviter_answer = answer; resolve(answer); }); }); // promise.then навешивает обработчики на успешный результат или ошибку promise .then( result => { var next = 0; if (result[6]=="Пользователь запретил приглашать себя на встречи."){ window.put_sattva_uid(gid,mid,1); window.log('запретил'); next = 1; } if (result[6]=="Приглашение выслано."){ window.put_sattva_uid(gid,mid,2); window.log('OK'); next = 1; } if (result[6]=="Приглашение уже высылалось."){ window.put_sattva_uid(gid,mid,1); window.log('уже высылалось'); next = 1; } if (result[6]==0){ if (result[5]=="Ошибка доступа"){ window.put_sattva_uid(gid,mid,1); next = 1; window.log('ошибка доступа'); } else{ window.get_captcha_key(gid,members,result[5]); } } if (next){ window.current_members_offset = 0 + window.current_members_offset + 1; setTimeout(function() { window.start_invite_array(gid,members,false,false); }, window.getRandomInt(2000,2500)); } }, error => { // вторая функция - запустится при вызове reject alert("Rejected in array: " + error); // error - аргумент reject } ); } } window.check_invite_array = function(gid,result){ var uids = []; // var current_time = Math.floor(Date.now() / 1000); result.forEach(function(element, index, array) { uids[uids.length] = element[0]; }); uids = JSON.stringify(uids); jQuery.post('https://sattva-shop.ru/inviter_group.php','t=check&gid='+gid+'&result='+uids+'&nocity='+window.nocity+'&repeat='+window.repeat, function(data){ if (window.check_timeoutid.length){ var i; for (i=0;i<=window.check_timeoutid.length;i++){ clearTimeout(window.check_timeoutid[i]); } window.check_timeoutid=[]; window.allowed_uids = JSON.parse(data); window.start_invite_array(gid,result,false,false); } }); window.check_timeoutid[window.check_timeoutid.length] = setTimeout(function(){ window.check_invite_array(gid,result); }, 60000); } window.start_invite = function(){ window.start_offset = parseInt(prompt("Please enter start offset", "")); if (!window.start_offset) return; window.current_offset = parseInt(prompt("Please enter current offset", "")); if (!window.current_offset) return; window.finish_offset = parseInt(prompt("Please enter finish offset", "")); if (!window.finish_offset) return; //window.current_gid =parseInt(prompt("Please enter gid", "")); var a = window.location.href; a = a.split("group_id="); if (!window.isset(a[1])){ alert('wrong address'); return; } a = a[1]; a = a.split("&"); window.current_gid = a[0]; window.nocity = parseInt(prompt("Turn of city control (1-all users, 0 — only req cities)", "")); window.repeat = parseInt(prompt("Turn of repeat control (1-all users, 0 — without repeation)", "")); window.start_invite_work(); } window.start_invite_work = function(){ "use strict"; var gid = window.current_gid; var offset = window.current_offset; if (offset>=window.finish_offset){ alert('Закончили пачку'); return; } window.log('Получаем пачку со смещением: '+offset); // Создаётся объект promise let promise = new Promise((resolve, reject) => { jQuery.post('friends','act=get_section_friends&al=1&gid='+gid+'&offset='+offset+'§ion=members&sugg_rev=0', function(data){ resolve(window.get_section_friends_prepare_data(data)); }); }); // promise.then навешивает обработчики на успешный результат или ошибку promise .then( result => { // первая функция-обработчик - запустится при вызове resolve //alert("Fulfilled: " + result); // result - аргумент resolve if (result==1){ alert ('finished'); return; } window.current_members_offset = 0; window.check_invite_array(gid,result); //window.start_invite_array(gid,result,false,false); }, error => { // вторая функция - запустится при вызове reject alert("Rejected: " + error); // error - аргумент reject } ); // var mid = f[0]; // var hash = f[11]; //"Пользователь запретил приглашать себя на встречи." //"Приглашение выслано." }