Advertisement
Guest User

Untitled

a guest
Oct 18th, 2017
1,070
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 43.96 KB | None | 0 0
  1. // ==UserScript==
  2. // @name Скрипт админка
  3. // @namespace http://tampermonkey.net/
  4. // @version 0.6
  5. // @description try to take over the world!
  6. // @author You
  7. // @include *://vk.com/*
  8. // @exclude *://vk.com/notifier.php*
  9. // @exclude *://vk.com/*widget*.php*
  10. // @require http://code.jquery.com/jquery-1.12.4.min.js
  11. // @resource groups_edit_css https://vk.com/css/al/groups_edit.css
  12. // @resource groups_css https://vk.com/css/al/groups.css
  13. // @resource ui_controls_css https://vk.com/css/ui_controls.css
  14. // @resource payments https://vk.com/css/al/payments.css
  15. // @resource exchange_css https://vk.com/css/al/exchange.css
  16. // @grant GM_addStyle
  17. // @grant GM_getResourceText
  18. // @grant GM_xmlhttpRequest
  19. // @connect vk.com
  20. // ==/UserScript==
  21. (function() {
  22.  
  23.  
  24. if (!localStorage.getItem("deletedPosts")) {//если в кэше не найдена переменная deletedPosts, то создается
  25. localStorage.setItem("deletedPosts", JSON.stringify({}));
  26. }
  27. var line_wrap_menu = "<div class=\"page_actions_separator\"></div>";
  28.  
  29. setInterval(function() {
  30. var menu;
  31. if (pageType() == "profile") {
  32. menu = document.getElementsByClassName("page_actions_inner")[0];
  33. if (menu && !hasClass(menu, "admin_panel_on")) panelToProfile(menu);
  34. } else if (pageType() == "public") {
  35. menu = document.getElementsByClassName("page_actions_inner")[0];
  36. if (menu && !hasClass(menu, "admin_panel_on")) panelToGroup(menu, true);
  37. } else if (pageType() == "group") {
  38. if (!document.getElementById("join_button")) menu = document.getElementsByClassName("page_actions_inner")[1];
  39. else menu = document.getElementsByClassName("page_actions_inner")[0];
  40. if (menu && !hasClass(menu, "admin_panel_on")) panelToGroup(menu);
  41. } else if (pageType() == "app") {
  42. var app_panel_info = document.getElementsByClassName("apps_options_bar_left")[0];
  43. if (app_panel_info && !hasClass(app_panel_info, "admin_panel_on")) panelToApp(app_panel_info);
  44. }
  45.  
  46. }, 500);
  47.  
  48. function panelToApp(pinfo) {
  49. var id = document.getElementsByClassName("app_container")[0].id.split("app_")[1].split("_container")[0];
  50. addStyle(".apps_options_bar{height: 68px;}");
  51. pinfo.className +=" admin_panel_on";
  52. pinfo.innerHTML +='<div style=\"line-height: 0;top: 45px;\"><br><div style=\"color: #929196;\">надежное, баланс: 11756, <a href=\"/editapp?id='+id+'\" style=\"color: #42648b;\">Управление игрой</a>, <a id=\"admin_app_info\" style=\"color: #42648b;\">Информация</a></div></div>';
  53. $("#admin_app_info")
  54. .click(function() {
  55. Admin.appInfo(id);
  56. });
  57.  
  58. }
  59.  
  60.  
  61. function panelToGroup(mainMenu, isPublic) {
  62. var group_name = document.getElementsByClassName("page_name")[0];
  63. var id;
  64. //id----------------------------------------↓
  65. if (isPublic) {
  66. if (document.getElementById("submit_post_box")) id = parseInt(document.getElementById("submit_post_box")
  67. .dataset.oid);
  68. } else if (!document.getElementById("join_button")) {
  69. if (!document.getElementsByClassName("group_closed page_block")[0]) id = parseInt(document.getElementsByClassName("page_actions_inner")[0].children[0].getAttribute("onclick")
  70. .split('\'page_actions_btn\', ')[1].split(',')[0]) * -1;
  71. else id = parseInt(document.getElementsByClassName("page_actions_inner")[0].children[0].getAttribute("onclick")
  72. .split('this, ')[1].split(', ')[0]) * -1;
  73.  
  74. }
  75. //id----------------------------------------↑
  76. //post menu----------------------------------------↓
  77. $('._post').each(function() {
  78. var dposts = JSON.parse(localStorage.getItem("deletedPosts"));
  79. if (typeof dposts[$(this).attr('id')] === "undefined" && !$(this).hasClass("admin_deleted_post")) {
  80. var post_id = $(this).attr('id');
  81. var post_content = $(this).find("._post_content").html();
  82. var menu = $(this).find('.ui_actions_menu');
  83. var admin = $(this).find('#admin_post_delete');
  84. if (!admin.exists()) {
  85. menu.append('<a id="admin_post_delete" class=\"ui_actions_menu_item\" tabindex=\"0\" role=\"link\">Удалить запись</a>');
  86. $(this).find('#admin_post_delete').click(function() {
  87. Admin.deleteGroupPost(post_id, post_content);
  88. $(this).addClass("admin_deleted_post");
  89. });
  90. }
  91. } else {
  92. $(this).hide();
  93. $(this).addClass("admin_deleted_post");
  94. }
  95. });
  96. //post menu----------------------------------------↑
  97.  
  98. //faster links (on name)----------------------------------------↓
  99.  
  100. GM_addStyle (GM_getResourceText ("exchange_css"));
  101. group_name.setAttribute("onmouseover","showTooltip(this, {text: '<div class=\\'tail_wrap\\'>\
  102. <div class=\\'tail\\'></div></div>\
  103. <div class=\\'hint_wrap\\'>\
  104. <div class=\"label fl_l\" style=\"color: #828282;\">ID группы</div>\
  105. <br>" + id*-1 + "\
  106. <br><div class=\"label fl_l\" style=\"color: #828282;\">Быстрые ссылки</div>\
  107. <div class=\"fans_fan_lnk\">\
  108. <br><a href=\"/wall"+id+"?own=1\">Записи со стены</a>\
  109. , <a href=\"/albums" + id + "\"class=\"fans_fan_lnk\">Фотографии</a>\
  110. , <a href=\"/album" + id + "_00\"class=\"fans_fan_lnk\">Фотографии стены</a>\
  111. , <a href=\"/wall"+id+"?owners_only=1&q=1\"class=\"fans_fan_lnk\">Поиск по записям(by group)</a>\
  112. , <a href=\"/stats?gid="+id*-1+"\"class=\"fans_fan_lnk\">Статистика</a>\
  113. </div>\
  114. </div>', showdt: 0, hidedt: 100, shift: [14, 5, 10], slide: 15, className: 'exchange_hint_tt', hasover: 1});");
  115. //faster links (on name)----------------------------------------↑
  116.  
  117. //menu----------------------------------------↓
  118. var m1 = '<a id="edit" class="page_actions_item" tabindex="0" role="link">Управление сообществом</a>';
  119. var m2 = '<a href="https://vk.com/adscreate?page_id=' + id * -1 + '" target="_blank" class="page_actions_item" tabindex="0" role="link">Реклама сообщества</a>';
  120. var m3 = '<a href="https://vk.com/stats?gid=' + id * -1 + '" target="_blank" class="page_actions_item" tabindex="0" role="link">Биржа рекламы</a>';
  121. var m4 = '<a href="https://vk.com/stats?gid=' + id * -1 + '" target="_blank" class="page_actions_item" tabindex="0" role="link">Статистика сообщества</a>';
  122. var m5 = line_wrap_menu;
  123. var m6 = '<a class="page_actions_item" tabindex="0" role="link">Карточка сообщества</a>';
  124. var m7 = '<a onclick="showDoneBox(\'<center>Контакты сообщетсва успешно скопированы в буфер обмена!\', { w: 400 });" class="page_actions_item" tabindex="0" role="link">Копировать контакты</a>';
  125. var m8 = '<a onclick="showDoneBox(\'<center>Загрузка скриншота начнется с минуты на минуту!\', { w: 400 });" class="page_actions_item" tabindex="0" role="link">Скриншот статистики</a>';
  126. var m9 = line_wrap_menu;
  127. var m10 = '<a class="page_actions_item" id="admin-ban" tabindex="0" role="link">Заблокировать сообщество</a>';
  128. var m11 = '<a href="https://vk.com/stats?gid=' + id * -1 + '" target="_blank" class="page_actions_item" tabindex="0" role="link">Пометить 18+</a>';
  129. var m12 = '<a href="https://vk.com/stats?gid=' + id * -1 + '" target="_blank" class="page_actions_item" tabindex="0" role="link">Мошенничество</a>';
  130. var m13 = '<a href="https://vk.com/stats?gid=' + id * -1 + '" target="_blank" class="page_actions_item" tabindex="0" role="link">Предупредить о сборах</a>';
  131. var m14 = '<a id="admin-delete" class="page_actions_item" tabindex="0" role="link">Удалить</a>';
  132. var m15 = '<a href="https://vk.com/stats?gid=' + id * -1 + '" target="_blank" class="page_actions_item" tabindex="0" role="link">Убрать из поиска</a>';
  133. var m16 = '<a href="https://vk.com/stats?gid=' + id * -1 + '" target="_blank" class="page_actions_item" tabindex="0" role="link">Запретить гиперссылки</a>';
  134. var m17 = '<a id="admin-logo-delete" class="page_actions_item" tabindex="0" role="link">Удалить логотип</a>';
  135. var m18 = '<a href="https://vk.com/stats?gid=' + id * -1 + '" target="_blank" class="page_actions_item" tabindex="0" role="link">Удалить обложку</a>';
  136. var m19 = '<a id="to-group" class="page_actions_item" tabindex="0" role="link">Перевести в группу</a>';
  137. var m20 = '<a href="https://vk.com/stats?gid=' + id * -1 + '" target="_blank" class="page_actions_item" tabindex="0" role="link">Внести в список надёжных</a>';
  138. var m21 = '<a href="https://vk.com/stats?gid=' + id * -1 + '" target="_blank" class="page_actions_item" tabindex="0" role="link">Добавить в официальные</a>';
  139. var m22 = '<a href="https://vk.com/stats?gid=' + id * -1 + '" target="_blank" class="page_actions_item" tabindex="0" role="link">Включить RSS</a>';
  140. var m23 = '<a href="https://vk.com/stats?gid=' + id * -1 + '" target="_blank" class="page_actions_item" tabindex="0" role="link">Сообщество не в каталоге</a>';
  141. var m24 = '<a href="https://vk.com/stats?gid=' + id * -1 + '" target="_blank" class="page_actions_item" tabindex="0" role="link">Настройки поисковых слов</a>';
  142. mainMenu.className += " admin_panel_on";
  143. mainMenu.innerHTML = m1 + m2 + m3 + m4 + m5 + m6 + m7 + m8 + m9 + m10 + m11 + m12 + m13 + m14 + m15 + m16 + m17 + m18 + m19 + m20 + m21 + m22 + m23 + m24 + line_wrap_menu + mainMenu.innerHTML;
  144. //menu----------------------------------------↑
  145.  
  146. $("#admin-ban")
  147. .click(function() {
  148. Admin.ban();
  149. });
  150. $("#admin-delete")
  151. .click(function() {
  152. Admin.delete();
  153. });
  154. $("#admin-logo-delete")
  155. .click(function() {
  156. Admin.delete_icon();
  157. });
  158. $("#to-group")
  159. .click(function() {
  160. Admin.to_group();
  161. });
  162. }
  163.  
  164.  
  165.  
  166.  
  167. var sidebar = document.getElementById("side_bar_inner")
  168. .children[0].children[0];
  169.  
  170. if (sidebar.children[sidebar.children.length - 1].id == "l_bt") {
  171. sidebar.children[sidebar.children.length - 1].parentNode.removeChild(sidebar.children[sidebar.children.length - 1]);
  172. sidebar.children[sidebar.children.length - 1].parentNode.removeChild(sidebar.children[sidebar.children.length - 1]);
  173. }
  174. sidebar.innerHTML += '<div class="more_div"></div>';
  175. sidebar.innerHTML += '<li id="l_gd" class=""><a onclick="history.pushState(null, null, \'/geodb?act=requests\');" class="left_row">\ <span class="left_fixer">\ <span class=\"left_count_wrap fl_r\"><span class=\"inl_bl left_count\">2</span></span> <span class="left_count_wrap fl_r left_void"><span class="inl_bl left_count_sign">0</span></span>\ <span class="left_icon fl_l"></span>\ <span class="left_label inl_bl">Заявки Геодб</span>\ </span>\ </a>\ <div class="left_settings" onclick="menuSettings(3)">\ <div class="left_settings_inner"></div>\ </div>\ </li>';
  176. sidebar.innerHTML += '<li id="l_ct" class=""><a onclick="history.pushState(null, null, \'/geodb\');" class="left_row">\ <span class="left_fixer">\ <span class="left_count_wrap fl_r left_void"><span class="inl_bl left_count_sign">0</span></span>\ <span class="left_icon fl_l"></span>\ <span class="left_label inl_bl">Страны</span>\ </span>\ </a>\ <div class="left_settings" onclick="menuSettings(3)">\ <div class="left_settings_inner"></div>\ </div>\ </li>';
  177. sidebar.innerHTML += '<li id="l_bt" class=""><a href="/bugtracker" class="left_row">\ <span class="left_fixer">\ <span class=\"left_count_wrap fl_r\"><span class=\"inl_bl left_count\">1</span></span><span class="left_count_wrap fl_r left_void"><span class="inl_bl left_count_sign">0</span></span>\ <span class="left_icon fl_l"></span>\ <span class="left_label inl_bl">Баг-трекер</span>\ </span>\ </a>\ <div class="left_settings" onclick="menuSettings(3)">\ <div class="left_settings_inner"></div>\ </div>\ </li>';
  178. sidebar.innerHTML += '<li id="l_nm" class=""><a onclick="history.pushState(null, null, \'/names_admin.php\');" class="left_row">\ <span class="left_fixer">\ <span class="left_count_wrap fl_r left_void"><span class="inl_bl left_count_sign">0</span></span>\ <span class="left_icon fl_l"></span>\ <span class="left_label inl_bl">Имена</span>\ </span>\ </a>\ <div class="left_settings" onclick="menuSettings(3)">\ <div class="left_settings_inner"></div>\ </div>\ </li>';
  179. sidebar.innerHTML += '<li id="l_tr" class=""><a onclick="history.pushState(null, null, \'/translation.php\');" class="left_row">\ <span class="left_fixer">\ <span class="left_count_wrap fl_r left_void"><span class="inl_bl left_count_sign">0</span></span>\ <span class="left_icon fl_l"></span>\ <span class="left_label inl_bl">Переводы</span>\ </span>\ </a>\ <div class="left_settings" onclick="menuSettings(3)">\ <div class="left_settings_inner"></div>\ </div>\ </li>';
  180. jQuery.fn.exists = function() {
  181. return $(this).length;
  182. };
  183. var Admin = {
  184. deleteGroupPost: function(post, content) {
  185. var deletedPosts = JSON.parse(localStorage.getItem("deletedPosts"));
  186. deletedPosts[post] = content;
  187.  
  188. localStorage.setItem("deletedPosts", JSON.stringify(deletedPosts));
  189.  
  190. },
  191. ban: function() {
  192. var group_name = document.getElementsByClassName('page_name')[0].innerHTML;
  193. var box = new MessageBox({});
  194. box.setOptions({
  195. title: 'Блокировка сообщества'
  196. });
  197. box.addButton('Да', box.hide);
  198. box.addButton('Нет', box.hide, 'no');
  199. box.content('Вы действительно хотите заблокировать сообщество "' + debili + '"?');
  200. box.show();
  201.  
  202. },
  203. delete_icon: function() {
  204. var group_name = document.getElementsByClassName('page_name')[0].innerHTML;
  205. var box = new MessageBox({});
  206. box.setOptions({
  207. title: 'Удаление логотипа у сообщества'
  208. });
  209. box.addButton('Да', function() {
  210. showDoneBox('<center>Логотип у сообщества "' + debili + '" был успешно удален!</center>', {
  211. w: 350
  212. });
  213. box.hide();
  214. });
  215. box.addButton('Нет', box.hide, 'no');
  216. box.content('Вы действительно хотите удалить логотип у сообщества "' + debili + '"?');
  217. box.show();
  218. },
  219. delete: function() {
  220. var group_name = document.getElementsByClassName('page_name')[0].innerHTML;
  221. var box = new MessageBox({});
  222. box.setOptions({
  223. title: 'Удаление сообщества'
  224. });
  225. box.addButton('Да', function() {
  226. showDoneBox('<center>Сообщество "' + debili + '" было успешно удалено!</center>', {
  227. w: 350
  228. });
  229. box.hide();
  230. });
  231. box.addButton('Нет', box.hide, 'no');
  232. box.content('Вы действительно хотите удалить сообщество "' + debili + '"?');
  233. box.show();
  234. },
  235. to_group: function() {
  236. var box = new MessageBox({});
  237. box.setOptions({
  238. title: 'Перевод страницы в группу'
  239. });
  240. box.addButton('Перевести в группу', location.reload());
  241. box.addButton('Отмена', box.hide, 'no');
  242. box.content(' <b>Обратите внимание!</b>&ensp;После перевода страницы в группу:<br><ul class="listing"><li><span> У подписчиков пропадёт возможность <b>предлагать новости</b>;</span></li><li><span> Предложенные новости станут <b>записями</b> на стене сообщества;</span></li><li><span> <b>Встречи</b>, созданные от имени сообщества, будут отображаться в блоке «Мероприятия», скрыть этот блок в группе нельзя.</span></li></ul><br>Вы cможете перевести страницу, для которой являетесь владельцем, не чаще <b>раза в 30 дней</b>.');
  243. box.show();
  244. },
  245. user_del: function() {
  246. var user_name = document.getElementsByClassName('page_name')[0].innerHTML;
  247. var box = new MessageBox({});
  248. box.setOptions({
  249. title: 'Удаление пользователя'
  250. });
  251. box.addButton('Да', function() {
  252. showDoneBox('<center>Пользователь "' + user_name + '" был успешно удален!</center>', {
  253. w: 350
  254. });
  255. box.hide();
  256. });
  257. box.addButton('Нет', box.hide, 'no');
  258. box.content('Вы действительно хотите удалить пользователя "' + user_name + '"?');
  259. box.show();
  260. },
  261. user_ban: function() {
  262. var user_name = document.getElementsByClassName('page_name')[0].innerHTML;
  263. var box = new MessageBox({});
  264. box.setOptions({
  265. title: 'Блокировка пользователя'
  266. });
  267. box.addButton('Да', function() {
  268. showDoneBox('<center>Пользователь "' + user_name + '" был успешно заблокирован!</center>', {
  269. w: 350
  270. });
  271. box.hide();
  272. });
  273. box.addButton('Нет', box.hide, 'no');
  274. box.content('Вы действительно хотите заблокировать пользователя "' + user_name + '"?<br>Комментарий модератора о причине блокировки: <div class="pedit_labeled"><textarea id="pedit_interests_quotes" class="dark" autocomplete="off" style="overflow: hidden; resize: none;"></textarea></div>');
  275. box.show();
  276. },
  277. user_info: function() {
  278. var user_name = document.getElementsByClassName('page_name')[0].innerHTML;
  279. var info_content = document.getElementById('page_info_wrap').innerHTML;
  280. var box = new MessageBox({});
  281. box.setOptions({
  282. title: 'Информация о пользователе ' + user_name + ''
  283. });
  284. box.addButton('Продолжить', box.hide);
  285. box.content('' + info_content + '');
  286. box.show();
  287. },
  288. balance_edit: function() {
  289. var box = new MessageBox({});
  290. box.setOptions({
  291. title: '<center>Редактирование баланса [BETA]</center>'
  292. });
  293. box.addButton('Продолжить', box.hide);
  294. box.content(' <div class="payments_box_summary clear_fix"> <div class="payments_summary_cont">Вы собираетесь редактировать Ваш счёт голосов ВКонтакте.<div class="payments_summary_notice"></div></div> </div> <div id="payments_box_error"></div> <div id="payments_getvotes_other" style="display: none;"></div> <div id="payments_getvotes_wrap"> <div id="payments_getvotes_method"> <a class="payments_getvotes_method_opt " onclick="cur.paymetsGetVotesAmounts(false, \'card\', this);"> <div class="pr " id=""><div class="pr_bt"></div><div class="pr_bt"></div><div class="pr_bt"></div></div> <div class="payments_getvotes_method_img payments_method_card">&nbsp;</div> <div class="payments_getvotes_method_text"> <div class="payments_getvotes_method_title">Банковская карта</div> <span id="payments_method_card_descr">Mastercard, Maestro, Visa, Мир</span> </div></a><a class="payments_getvotes_method_opt " onclick="cur.paymetsGetVotesAmounts(false, \'sms\', this);"> <div class="pr " id=""><div class="pr_bt"></div><div class="pr_bt"></div><div class="pr_bt"></div></div> <div class="payments_getvotes_method_img payments_method_sms">&nbsp;</div> <div class="payments_getvotes_method_text"> <div class="payments_getvotes_method_title">Мобильный телефон</div> <span id="payments_method_sms_descr">Fake оплата со счёта мобильного телефона</span> </div></a><a class="payments_getvotes_method_opt " onclick="cur.paymetsGetVotesAmounts(false, \'ps\', this);"> <div class="pr " id=""><div class="pr_bt"></div><div class="pr_bt"></div><div class="pr_bt"></div></div> <div class="payments_getvotes_method_img payments_method_ps">&nbsp;</div> <div class="payments_getvotes_method_text"> <div class="payments_getvotes_method_title">Электронные деньги</div> <span id="payments_method_ps_descr">WebMoney, Яндекс.Деньги, QIWI Кошелёк, PayPal (Акция!) </span> </div></a><a class="payments_getvotes_method_opt " onclick="cur.paymetsGetVotesAmounts(false, \'offers\', this);"> <div class="pr " id=""><div class="pr_bt"></div><div class="pr_bt"></div><div class="pr_bt"></div></div> <div class="payments_getvotes_method_img payments_method_offers">&nbsp;</div> <div class="payments_getvotes_method_text"> <div class="payments_getvotes_method_title">Специальные предложения</div> <span id="payments_method_offers_descr">Редактирование бесплатных получений голосов</span> </div></a><p class="payments_about_votes">Голоса – универсальная условная единица для приобретения платных возможностей приложений ВКонтакте, а также подарков и стикеров.</p> </div> <div id="payments_getvotes_cont"></div> <div id="payments_getvotes_phone" class="payments_getvotes_phone"> <p class="payments_getvotes_phone_msg _msg">Пожалуйста, укажите <b>номер телефона</b> для оплаты через SMS:</p> <div class="payments_form_row"> <div id="container1" class="selector_container big limited_height" style="width: 200px;"><table cellspacing="0" cellpadding="0" class="selector_table"> <tbody><tr> <td class="selector"> <div class="placeholder_wrap1" style="display: none;"> <div class="placeholder_wrap2"> <div class="placeholder_content" style="color: rgb(124, 127, 130);"></div> <div class="placeholder_cover"></div> </div> </div> <div class="selected_items_wrap"><div class="scroll_fader_top"></div> <span class="selected_items"></span> <div class="scroll_fader_bottom"></div></div> <input type="text" class="selector_input selected" style="color: rgb(34, 34, 34); width: 163px;"> <input type="hidden" name="phone_country" id="phone_country" value="65" class="resultField"> <input type="hidden" name="phone_country_custom" id="phone_country_custom" value="" class="customField"> </td><td id="dropdown1" class="selector_dropdown" style="width: 26px;">&nbsp;</td> </tr> </tbody></table> <div class="results_container"> <div class="result_list dividing_line" style="display: none; opacity: 1; width: 200px;"><ul id="list_options_container_1"></ul></div> </div></div> </div> <div class="payments_form_row"> <div class="prefix_input_wrap"> <div id="payments_phone_prefix" class="prefix_input_prefix" onclick="elfocus(geByTag1(\'input\', this.parentNode), 0, 0);">+49</div> <div class="prefix_input_field"> <input id="phone" type="text" class="prefix_input" onkeydown="if (event.keyCode==13) { cur.paymentsSaveSmsPhone(); }" autocomplete="off"> <div class="prefix_input_border"></div> </div> </div> </div> </div> <div id="payments_getvotes_confirm"> <p id="payments_getvotes_confirm_msg" class="msg"></p> <div class="payments_tform"> <div id="payments_box_confcode_wrap" class="tform_row clear_fix"> <div class="label">Код подтверждения:</div> <div class="labeled"> <input id="confcode" class="dark" type="text" onkeydown="if (event.keyCode==13) { cur.paymentsSmsSendCode(); }"> </div> </div> <div class="tform_row clear_fix"> <div class="label">Количество голосов:</div> <div class="labeled_l" id="payments_box_votes_num"></div> </div> <div class="tform_row clear_fix"> <div class="label" style="padding-bottom: 0;">Сумма оплаты:</div> <div class="labeled_l" id="payments_box_amount"></div> </div> <div id="payments_getvotes_confirm_comm_wrap" class="unshown tform_row clear_fix"> <div class="label">&nbsp;</div> <div id="payments_getvotes_confirm_comm" class="payments_getvotes_op_msg"></div> </div> </div> </div> <div id="payments_getvotes_waiting"> <div id="payments_getvotes_waiting_msg" class="msg"></div> <div id="payments_getvotes_waiting_comm" class="payments_getvotes_op_msg"></div> <div class="payments_getvotes_footer">Если в течение <b>24 часов</b> голоса не поступят на Ваш счёт, Вы можете обратиться в <a href="/support?act=new_pay">поддержку</a>.</div> </div> <div id="payments_getvotes_terminals"> <h2 class="payments_getvotes_title">Оплата наличными через платёжный терминал</h2><p>Для того чтобы пополнить Ваш счёт через терминал оплаты, найдите логотип <b>ВКонтакте</b> в меню терминала (как правило, он расположен в разделах «Социальные сети» или «Другое») и введите Ваш ID: <b>436240084</b></p><div class="payments_getvotes_term_list clear_fix" style="width:0px;"> </div> </div> <div id="payments_getvotes_ps"> <h2 class="payments_getvotes_title">Оплата через электронную платёжную систему</h2><p>Вы можете быстро приобрести голоса с помощью электронных платёжных систем.</p><div class="payments_getvotes_ps_list clear_fix" style=""> <a class="payments_getvotes_ps_row payments_getvotes_ps_row_s" href="#" onclick="cur.paymetsGetVotesAmounts(false, \'kiwipurse\', this); return false;"> <img class="payments_getvotes_ps_logo" src="/images/ps/kiwipurse_logo.png"> <div class="payments_getvotes_ps_text"> <div class="pr " id=""><div class="pr_bt"></div><div class="pr_bt"></div><div class="pr_bt"></div></div> <div class="payments_getvotes_ps_title">Visa QIWI Wallet</div> </div> </a> <a class="payments_getvotes_ps_row payments_getvotes_ps_row_s" href="#" onclick="cur.paymetsGetVotesAmounts(false, \'yandexmoney\', this); return false;"> <img class="payments_getvotes_ps_logo" src="/images/ps/yandexmoney_logo.png"> <div class="payments_getvotes_ps_text"> <div class="pr " id=""><div class="pr_bt"></div><div class="pr_bt"></div><div class="pr_bt"></div></div> <div class="payments_getvotes_ps_title">Яндекс.Деньги</div> </div> </a> <a class="payments_getvotes_ps_row payments_getvotes_ps_row_s" href="#" onclick="cur.paymetsGetVotesAmounts(false, \'webmoney\', this); return false;"> <img class="payments_getvotes_ps_logo" src="/images/ps/webmoney_logo.png"> <div class="payments_getvotes_ps_text"> <div class="pr " id=""><div class="pr_bt"></div><div class="pr_bt"></div><div class="pr_bt"></div></div> <div class="payments_getvotes_ps_title">WebMoney</div> </div> </a> <a class="payments_getvotes_ps_row payments_getvotes_ps_row_s" href="#" onclick="cur.paymetsGetVotesAmounts(false, \'paypal_ipn\', this); return false;"> <img class="payments_getvotes_ps_logo" src="/images/ps/paypal_ipn_logo.png"> <div class="payments_getvotes_ps_text"> <div class="pr " id=""><div class="pr_bt"></div><div class="pr_bt"></div><div class="pr_bt"></div></div> <div class="payments_getvotes_ps_title">PayPal<span class="payments_getvotes_title_offer">Акция</span></div> </div> </a></div></div> </div> <div id="payments_box_progress" style="display: none;"> <div class="payments_box_spinner"></div> <div id="payments_box_progress_msg_wrap"><span id="payments_box_progress_msg">Ожидаем завершения оплаты..</span> <a id="payments_box_progress_link" href="#" onclick="cur.paymentsShowTypes(); return false;">Отмена</a></div> </div> <div id="payments_getvotes_buttons" class="payments_getvotes_buttons"> <button id="payments_getvotes_submit" class="flat_button" onclick="cur.paymetsShowConfirm();">Получить голоса</button> <div id="payments_getvotes_back" class="button_cancel inl_bl"></div> </div> <div id="payments_iframe_container" class="payments_iframe_container"></div> <form id="paymentSystemsForm" method="post" accept-charset="windows-1251"></form></div>');
  295. box.show();
  296. },
  297. appInfo: function(id) {
  298. var box = new MessageBox({});
  299. box.setOptions({
  300. title: '<center>Редактирование баланса [BETA]</center>'
  301. });
  302. box.addButton('Продолжить', box.hide);
  303. GM_xmlhttpRequest({
  304. method: "GET",
  305. url: "https://api.vk.com/method/apps.get?app_id=" + id,
  306. onload: function(data) {
  307. if (data.status == 200) {
  308. var response = JSON.parse(data.responseText);
  309. var content = "<div style=\"width:100%;\">";
  310. content +="<div style=\"color: #828282;\" class=\"adm_app_info_id\">ID приложения: <div style=\"color:black; display: inline-block;\">"+response.response.id+"</div></div>";
  311. content +="<div style=\"color: #828282;\" class=\"adm_app_info_id\">Название: <div style=\"color:black; display: inline-block;\">"+response.response.title+"</div></div>";
  312.  
  313. box.content("<div style=\"word-wrap: break-word;\">"+content+"</div>");
  314. content+="</div>";
  315. box.show();
  316. }
  317. }
  318. });
  319.  
  320.  
  321. }
  322. };
  323.  
  324. var fake_votes = document.getElementsByClassName('settings_row_button_wrap')[0];
  325. //fake_votes.innerHTML += '<br><br><button class="flat_button" id="balance-edit"> Редактор баланса ­</button>';
  326.  
  327. $("#balance-edit")
  328. .click(function() {
  329. Admin.balance_edit();
  330. });
  331. function insertToVkProfile() {//функция с помощью foaf.php + вк апи получает данные о дате регистрации, дате последнего ред. страницы и дате последнего визита пользователя
  332. var vkUserProfile = document.body.querySelector("#profile_short:not(.display_additional_information_in_vk_profile)");
  333. if (!vkUserProfile) return;
  334. var id;
  335. var el = document.getElementsByClassName("page_block_h2")[0];
  336. if (el) id = el.children[0].children[0].children[0].href.split("wall")[1];
  337. if (!id) return;
  338. vkUserProfile.className += " display_additional_information_in_vk_profile";
  339. var vkPageLang = document.body.querySelector("a.ui_actions_menu_item[onclick*=\"lang_dialog\"]");
  340. var vkCurrentLang;
  341. if (vkPageLang) {
  342. vkCurrentLang = vkPageLang.textContent;
  343. } else {
  344. vkCurrentLang = navigator.language.substring(0,2);
  345. }
  346. var vkRegMonthName, vkLastSeenPlatformName;
  347.  
  348. vkRegMonthName = ["января", "февраля", "марта", "апреля", "мая", "июня", "июля", "августа", "сентября", "октября", "ноября", "декабря"];
  349. vkLastSeenPlatformName = ["мобильная версия сайта или неофициальное мобильное приложение", "оф. приложение для iPhone", "оф. приложение для iPad", "оф. приложение для Android", "оф. приложение для Windows Phone", "оф. приложение для Windows 10", "полная версия сайта или неофициальное приложение"];
  350.  
  351. var i = 0;
  352. while (i < 3) {
  353. var vkUserProfileElement = document.createElement("div");
  354. vkUserProfileElement.style.display = "none";
  355. vkUserProfile.insertBefore(vkUserProfileElement, vkUserProfile.firstChild);
  356. i++;
  357. }
  358. GM_xmlhttpRequest({
  359. method: "GET",
  360. url: "/foaf.php?id=" + id,
  361. onload: function(vkFoafResponse) {
  362. if (vkFoafResponse.status == 200) {
  363. var vkFoafRegDate = (vkFoafResponse.responseText.match(/ya:created dc:date="(.+)"/i) || [])[1];
  364. var vkFoafLastProfileEditDate = (vkFoafResponse.responseText.match(/ya:modified dc:date="(.+)"/i) || [])[1];
  365. if (vkFoafRegDate) {
  366. var vkRegDate = new Date(vkFoafRegDate);
  367. var vkRegDateElement = document.createElement("div");
  368. vkRegDateElement.className = "clear_fix profile_info_row";
  369. vkRegDateElement.innerHTML = "<div class=\"label fl_l\">Дата регистрации:</div><div class=\"labeled\">" + vkRegDate.getDate() + " " + vkRegMonthName[vkRegDate.getMonth()] + " " + vkRegDate.getFullYear() + " г. " + vkRegDate.getHours() + ":" + addLeadingZeroToDate(vkRegDate.getMinutes()) + ":" + addLeadingZeroToDate(vkRegDate.getSeconds()) + "</div>";
  370. vkUserProfile.replaceChild(vkRegDateElement, vkUserProfile.childNodes[0]);
  371. } else {
  372. console.info("Registration date on VK FOAF profile is empty or unavailable");
  373. }
  374. if (vkFoafLastProfileEditDate) {
  375. var vkLastProfileEditDate = new Date(vkFoafLastProfileEditDate);
  376. var vkLastProfileEditDateElement = document.createElement("div");
  377. vkLastProfileEditDateElement.className = "clear_fix profile_info_row";
  378. vkLastProfileEditDateElement.innerHTML = "<div class=\"label fl_l\">Дата посл. ред. стр.:</div><div class=\"labeled\">" + vkLastProfileEditDate.getDate() + " " + vkRegMonthName[vkLastProfileEditDate.getMonth()] + " " + vkLastProfileEditDate.getFullYear() + " г. " + vkLastProfileEditDate.getHours() + ":" + addLeadingZeroToDate(vkLastProfileEditDate.getMinutes()) + ":" + addLeadingZeroToDate(vkLastProfileEditDate.getSeconds()) + "</div>";
  379. vkUserProfile.replaceChild(vkLastProfileEditDateElement, vkUserProfile.childNodes[1]);
  380. } else {
  381. console.info("Last profile editing date on VK FOAF profile is empty or unavailable");
  382. }
  383. } else {
  384. console.error("Failed to get VK FOAF profile (registration date and last profile edit date): " + vkFoafResponse.status + " " + vkFoafResponse.statusText);
  385. }
  386. },
  387. onerror: function() {
  388. console.error("Failed to get VK FOAF profile (registration date and last profile edit date)");
  389. }
  390. });
  391. GM_xmlhttpRequest({
  392. method: "GET",
  393. url: "https://api.vk.com/method/users.get?user_ids=" + id + "&fields=last_seen&v=5.68",
  394. onload: function(vkApiUsersGetResponse) {
  395. if (vkApiUsersGetResponse.status == 200) {
  396. var vkApiUsersGetObject = JSON.parse(vkApiUsersGetResponse.responseText);
  397. var vkLastSeenUnixtime = vkApiUsersGetObject.response[0].last_seen.time;
  398. if (vkLastSeenUnixtime) {
  399. var vkLastSeenDate = new Date(vkLastSeenUnixtime*1000);
  400. var vkLastSeenDateElement = document.createElement("div");
  401. vkLastSeenDateElement.className = "clear_fix profile_info_row";
  402. var vkLastSeenPlatform = vkApiUsersGetObject.response[0].last_seen.platform;
  403. vkLastSeenDateElement.innerHTML = "<div class=\"label fl_l\">Дата последнего визита:</div><div class=\"labeled\">" + vkLastSeenDate.getDate() + " " + vkRegMonthName[vkLastSeenDate.getMonth()] + " " + vkLastSeenDate.getFullYear() + " г. " + vkLastSeenDate.getHours() + ":" + addLeadingZeroToDate(vkLastSeenDate.getMinutes()) + ":" + addLeadingZeroToDate(vkLastSeenDate.getSeconds()) + " (" + vkLastSeenPlatformName[vkLastSeenPlatform-1] + ")</div>";
  404. vkUserProfile.replaceChild(vkLastSeenDateElement, vkUserProfile.childNodes[2]);
  405. } else {
  406. console.info("Last seen date and platform on VK API profile is empty or unavailable");
  407. }
  408. } else {
  409. console.error("Failed to get VK API profile (last seen date and platform): " + vkApiUsersGetResponse.status + " " + vkApiUsersGetResponse.statusText);
  410. }
  411. },
  412. onerror: function() {
  413. console.error("Failed to get VK API profile (last seen date and platform)");
  414. }
  415. });
  416. }
  417. function panelToProfile(mainMenu) {
  418.  
  419. //id----------------------------------------↓
  420.  
  421. var id;
  422. var el = document.getElementsByClassName("page_block_h2")[0];
  423. if (el) id = el.children[0].children[0].children[0].href.split("wall")[1];
  424. //id----------------------------------------↑
  425. insertToVkProfile();
  426. new MutationObserver(insertToVkProfile).observe(document.body, {childList: true, subtree: true});
  427. var m1 = '<a href="https://vk.com/bugtracker?act=reporter&id=' + id + '" target="_blank" class="page_actions_item" tabindex="0" role="link">Личная карточка</a>';
  428. var m2 = '<a href="https://vk.com/bugtracker?mid=' + id + '&status=100" target="_blank" class="page_actions_item" tabindex="0" role="link">Отчеты о багах</a>';
  429. var m3 = '<a id="user-info" class="page_actions_item" tabindex="0" role="link">Информация</a>';
  430. var m4 = '<a href="https://vk.com/bugtracker?mid=' + id + '&status=100" target="_blank" class="page_actions_item" tabindex="0" role="link">Блокировки</a>';
  431. var m5 = '<a href="javascript:alert()" target="_blank" class="page_actions_item" tabindex="0" role="link">Вектор интересов</a>';
  432. var m6 = '<a onclick="nav.change({z: \'albums' + id + '\'}, event)" class="page_actions_item" tabindex="0" role="link">Открыть приватные фото</a>';
  433. var m7 = '<a href="https://vk.com/stats?mid=' + id + '" target="_blank" class="page_actions_item" tabindex="0" role="link">Статистика страницы</a>';
  434. var m8 = '<a onclick="showDoneBox(\'<center>Контакты сообщетсва успешно скопированы в буфер обмена!\', { w: 400 });" class="page_actions_item" tabindex="0" role="link">Копировать контакты</a>';
  435. var m9 = '<a onclick="showDoneBox(\'<center>Загрузка скриншота начнется с минуты на минуту!\', { w: 400 });" class="page_actions_item" tabindex="0" role="link">Скриншот статистики</a>';
  436. var m10 = '<div class="page_actions_separator"></div>';
  437. var m11 = '<a id="user-del" class="page_actions_item" tabindex="0" role="link">Удалить</a>';
  438. var m12 = '<a id="user-ban" class="page_actions_item" tabindex="0" role="link">Заблокировать</a>';
  439. var m13 = '<a onclick="showDoneBox(\'<center>Security ERROR\', { w: 100 });" class="page_actions_item" tabindex="0" role="link">Пометить 18+</a>';
  440. var m14 = line_wrap_menu;
  441. mainMenu.className += " admin_panel_on";
  442. mainMenu.innerHTML = m1 + m2 + m3 + m4 + m5 + m6 + m7 + m8 + m9 + m10 + m11 + m12 + m13 + m14 + mainMenu.innerHTML;
  443. $("#user-del")
  444. .click(function() {
  445. Admin.user_del();
  446. });
  447. $("#user-ban")
  448. .click(function() {
  449. Admin.user_ban();
  450. });
  451. $("#user-info")
  452. .click(function() {
  453. Admin.user_info();
  454. });
  455. }
  456.  
  457. //////////////////////////////////// CORE ////////////////////////////
  458.  
  459. function pageType() { //определяет тип текущей страницы
  460. if (document.getElementsByClassName("group_actions_wrap")[0]) {
  461. if (document.getElementById("public_actions_wrap")) return "public";
  462. else return "group";
  463. } else if (document.getElementsByClassName("profile_content")[0]) {
  464. return "profile";
  465. } else if (document.getElementsByClassName("apps_options_bar")[0]) {
  466. return "app";
  467. }
  468. }
  469.  
  470. function hasClass(element, cls) { //проверяет наличие класса (cls - название) в элементе (element - сам элемент)
  471. return (' ' + element.className + ' ').indexOf(' ' + cls + ' ') > -1;
  472. }
  473.  
  474. function include(url) { // подключение скриптов по ссылке (url - ссылка)
  475. var script = document.createElement('script');
  476. script.src = url;
  477. document.getElementsByTagName('head')[0].appendChild(script);
  478. }
  479.  
  480. function addStyle(css) { // внедрение css кода (css - сам код)
  481. var head, style;
  482. head = document.getElementsByTagName('head')[0];
  483. if (!head) {
  484. return;
  485. }
  486. style = document.createElement('style');
  487. style.type = 'text/css';
  488. style.innerHTML = css;
  489. head.appendChild(style);
  490. }
  491. function convert24HoursTo12Hours(hours) { //преобразовует 24-часовой формат времени в 12-часовой
  492. hours = hours % 12;
  493. return hours ? hours : 12;
  494. }
  495. function convert24HoursToAmPmLc(hours) { //преобразовует 24-часовой формат времени в am/pm формат
  496. return hours >= 12 ? "pm" : "am";
  497. }
  498. function addLeadingZeroToDate(date) {
  499. return ("0" + date).slice(-2);
  500. }
  501. //////////////////////////////////// CORE ////////////////////////////
  502. })();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement