gab.ai follow script

Lets you follow all the accounts on someone's following list.

  1. // ==UserScript==
  2. // @name gab.ai follow script
  3. // @namespace http://tampermonkey.net/
  4. // @version 1.0
  5. // @description Lets you follow all the accounts on someone's following list.
  6. // @author @jorgequintt
  7. // @match https://gab.ai/*
  8. // @grant none
  9. // ==/UserScript==
  10.  
  11. (function() {
  12. 'use strict';
  13. var step;
  14. var to_follow = 0;
  15. var acc_followed = 0;
  16. var waiting = false;
  17. var msg = "";
  18. var last_qty = 0;
  19. function run_follow_all(){
  20. step = 4;
  21. }
  22. function run_follow_x(){
  23. step = 3;
  24. to_follow = document.querySelector('#j_custom_input').value;
  25. }
  26.  
  27. function step1(){
  28. step = 1;
  29. to_follow = 0;
  30. acc_followed = 0;
  31. last_qty = 0;
  32. waiting = false;
  33. }
  34. var css = "#loop_state{margin: 15px 15px 1px 15px;text-align: center;}#j_custom {padding-right: 0px;}.column1,.column2{width:50%;display:inline-block;text-align:center}#j_custom_input{width:67px}.j_custom_btn{position:initial!important}";
  35. function loop(){
  36. //check if we are in /following
  37. if( window.location.href.indexOf('/following') > 0 || window.location.href.indexOf('/followers') > 0 ){
  38.  
  39. //if element loaded, add button to layout
  40. var ul = document.querySelector('.user-list');
  41. var first_u = document.querySelectorAll('.user-list__item.clearfix')[0];
  42. var j_custom_elem = document.querySelector('#j_custom');
  43. if( !!ul && !!first_u && !j_custom_elem){
  44. console.log('step 0');
  45. var css_elem = document.createElement('style');
  46. css_elem.appendChild(document.createTextNode(css));
  47. var follow_all_box = document.createElement('div');
  48. follow_all_box.setAttribute('class', 'user-list__item clearfix j_custom_box');
  49. follow_all_box.setAttribute('id', 'j_custom');
  50. var wrapper = document.createElement('div');
  51. var column1 = document.createElement('div');
  52. column1.setAttribute('class', 'column1');
  53. var column2 = document.createElement('div');
  54. column2.setAttribute('class', 'column2');
  55. var follow_all_btn = document.createElement('a');
  56. follow_all_btn.innerHTML = 'Follow All';
  57. follow_all_btn.setAttribute('class', 'user-list__item__follow j_custom_btn');
  58. var follow_x_btn = document.createElement('a');
  59. follow_x_btn.setAttribute('class', 'user-list__item__follow j_custom_btn');
  60. follow_x_btn.innerHTML = 'Follow 0 accounts';
  61. var follow_input = document.createElement('input');
  62. follow_input.setAttribute('id', 'j_custom_input');
  63. follow_input.setAttribute('type', 'number');
  64. follow_input.setAttribute('placeholder', '0');
  65. var loop_state = document.createElement('p');
  66. loop_state.setAttribute('id', 'loop_state');
  67. ['change', 'keyup', 'click'].forEach(function(ev){
  68. follow_input.addEventListener(ev, function(){
  69. follow_x_btn.innerHTML = 'Follow '+this.value+' accounts';
  70. });
  71. });
  72. column1.appendChild(follow_all_btn);
  73. column2.appendChild(follow_x_btn);
  74. column2.appendChild(follow_input);
  75. wrapper.appendChild(css_elem);
  76. wrapper.appendChild(column1);
  77. wrapper.appendChild(column2);
  78. wrapper.appendChild(loop_state);
  79. follow_all_box.appendChild(wrapper);
  80. ul.insertBefore(follow_all_box, first_u);
  81. follow_all_btn.addEventListener('click', function(e){
  82. e.preventDefault();
  83. run_follow_all();
  84. });
  85. follow_x_btn.addEventListener('click', function(e){
  86. e.preventDefault();
  87. run_follow_x();
  88. });
  89. step1();
  90. }
  91. if(!!j_custom_elem && step > 1){
  92. console.log('step > 1');
  93. document.querySelector('#loop_state').innerHTML = "Followed accounts: "+acc_followed;
  94. var all_btns = document.querySelectorAll('a.user-list__item__follow').length;
  95. var all_follow_btns = document.querySelectorAll('a[class="user-list__item__follow pull-right"]');
  96. var load_more_btn = document.querySelector('.user-list__load');
  97. var loading_icon = document.querySelector('.user-list__load .ion-load-c.spinning');
  98. if(step == 3 && acc_followed == to_follow){
  99. step = 5;
  100. msg = "All accounts have been followed.";
  101. }else{
  102. if(all_follow_btns.length < 1){
  103. if(!loading_icon && !waiting){
  104. last_qty = all_btns;
  105. load_more_btn.click();
  106. waiting = true;
  107. }else if(!loading_icon && waiting){
  108. if(last_qty < all_btns){
  109. last_qty = all_btns;
  110. load_more_btn.click();
  111. }else if(last_qty == all_btns){
  112. step = 5;
  113. msg = "No more accounts to follow.";
  114. }
  115. }
  116. }else{
  117. waiting = false;
  118. all_follow_btns[0].click();
  119. acc_followed++;
  120. }
  121. }
  122. }
  123. if( step == 5 ){
  124. step1();
  125. alert('Task done: '+msg);
  126. }
  127. } //end if in following
  128. }
  129. setInterval(loop, 350);
  130. })();