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];
//"Пользователь запретил приглашать себя на встречи."
//"Приглашение выслано."
}