KiberInfinity

Dump deleted messages

Mar 27th, 2018
166
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. function save_deleted_messages(as_json){
  2.    if (as_json){
  3.       vkopt.save_file(JSON.stringify(vk_deleted_messages,'', '   '), 'deleted_messages'+vk.id+' '+(new Date())+'.json');
  4.    } else {
  5.       vkopt.messages.export_data(vk_deleted_messages);
  6.    }
  7. }
  8. function search_deleted_messages(){
  9.    var get_last_msg_id = function(cb){
  10.       dApi.call('messages.getDialogs', {count:1, v:'5.73'}, function(r){
  11.          cb(((((r.response || {}).items || [])[0] || {}).message || {}).id)
  12.       })
  13.    }
  14.    window.vk_deleted_messages = [];
  15.    var msg = window.vk_deleted_messages;
  16.    var del_ids = [];
  17.    var restored = 0;
  18.    var restoring = false;
  19.    var last_msg = 0;
  20.    var offset = 0;
  21.  
  22.    var collect = function(cb){
  23.       var ids = [];
  24.       var PER_REQ = 50;
  25.       var PER_EXEC = 10;
  26.       for (var i = 0; (i < PER_REQ * PER_EXEC) && (offset > 0); i++)
  27.          ids.push(offset--);
  28.  
  29.       var code = [];
  30.       while(ids.length)
  31.          code.push('API.messages.getById({"message_ids":"'+ids.splice(0,PER_REQ).join(',')+'"}).items');
  32.       code = 'return ' + code.join('+') + ';'
  33.  
  34.       dApi.call('execute', {code: code, v:'5.73'}, function(r){
  35.          if (r && r.response){
  36.             r.response.forEach(function(item, idx){
  37.                if (item.deleted){
  38.                   msg.push(item);
  39.                   del_ids.push(item.id);
  40.                }
  41.             })
  42.  
  43.             ge('vk_scan_msg').innerHTML =
  44.                                     (offset > 0 ?  vkProgressBar(last_msg - offset, last_msg, 310, IDL('msgreq') + ' %')+'<br><br>' : '')+
  45.                                     'deleted found: <b>' + msg.length + '</b><br>'+
  46.                                     (msg.length > 0 ?
  47.                                     '<div class="button_blue"><button onclick="save_deleted_messages()">save '+msg.length+' messages (.html)</button></div><br>'+
  48.                                     '<div class="button_gray"><button onclick="save_deleted_messages(true)">save '+msg.length+' raw messages (.json)</button></div><br/>' : '')+
  49.                                     (offset > 0 ? 'cur msg id:' + offset : '');
  50.  
  51.             if (!restoring){
  52.                ge('vk_restore_msg').innerHTML = restored > 0 ? 'Restored: <b>' + restored + '</b>' : '';
  53.                var r_btn = se('<div class="button_blue"><button>try restore '+del_ids.length+' messages</button></div>');
  54.                ge('vk_restore_msg').appendChild(r_btn);
  55.                addEvent(r_btn, 'click', function(ev){
  56.                   restore();
  57.                });
  58.             }
  59.  
  60.             if (offset > 0){
  61.                //console.log('ESTIMATED IDs: ', offset);
  62.                setTimeout(function(){collect(cb)},300);
  63.             } else {
  64.                cb();
  65.             }
  66.          } else {
  67.             console.log('API EXEC FAILED: ', code);
  68.          }
  69.  
  70.       })
  71.    }
  72.    var restore = function(){
  73.       if (!del_ids.length){
  74.          alert('Nothing to restore');
  75.          return;
  76.       }
  77.       ge('vk_restore_msg').innerHTML = 'Preparing to restore...';
  78.       restoring = true;
  79.       var total = del_ids.length;
  80.       var code = [];
  81.       for (var i = 0; i < 15 && del_ids.length; i++)
  82.          code.push('API.messages.restore({message_id:'+del_ids.shift()+'})');
  83.       code = 'return [ ' + code.join(',') + ' ];'
  84.  
  85.       dApi.call('execute', {code: code, v:'5.73'}, function(r){
  86.           if (r && r.response){
  87.              restored += r.response.filter(function(item){return item}).length;
  88.              ge('vk_restore_msg').innerHTML = vkProgressBar(total - del_ids.length, total, 310, 'Restoring... %') + '<br><br>' +
  89.                                                'Restored: <b>' + restored + '</b>';
  90.           } else {
  91.              console.log('API EXEC RESTORE FAILED: ', code);
  92.           }
  93.           if (del_ids.length){
  94.              restore();
  95.           } else {
  96.              restoring = false;
  97.              ge('vk_restore_msg').innerHTML = 'Restored: <b>' + restored + '</b>';
  98.           }
  99.  
  100.       })
  101.    }
  102.  
  103.  
  104.    var box = new MessageBox({
  105.          title : IDL('ScanMessages'),
  106.          closeButton : true,
  107.          width : "350px"
  108.       });
  109.    box.removeButtons();
  110.    box.addButton(IDL('Cancel'), function (r) {
  111.       abort = true;
  112.       box.hide();
  113.    }, 'no');
  114.    var html = '<div id="vk_scan_msg">Starting process...</div><div id="vk_restore_msg"></div>';
  115.    box.content(html).show();
  116.  
  117.    get_last_msg_id(function(id){
  118.       if (!id){
  119.          alert('Nothing...');
  120.          return;
  121.       }
  122.       last_msg = id;
  123.       offset = id;
  124.       collect(function(){
  125.          alert('done');
  126.       })
  127.    });
  128. }
  129. search_deleted_messages();
RAW Paste Data Copied