BLACK RUSSIA KURSK || Скрипт для Руководства.

Специально для BlackRussia ||

  1. // ==UserScript==
  2. // @name BLACK RUSSIA KURSK || Скрипт для Руководства.
  3. // @namespace https://forum.blackrussia.online
  4. // @version 1.2
  5. // @description Специально для BlackRussia ||
  6. // @author Artyom_Hayes
  7. // @match https://forum.blackrussia.online/threads/*
  8. // @include https://forum.blackrussia.online/threads/
  9. // @grant none
  10. // @license MIT
  11. // @collaborator QuenkM
  12. // @icon https://icons.iconarchive.com/icons/google/noto-emoji-people-bodyparts/256/11960-victory-hand-light-skin-tone-icon.png
  13. // ==/UserScript==
  14. (function () {
  15. 'use strict';
  16. const UNACCEPT_PREFIX = 4; // Префикс "Отказано"
  17. const ACCEPT_PREFIX = 8; // Префикс "Одобрено"
  18. const RESHENO_PREFIX = 6; // Префикс "Решено"
  19. const PIN_PREFIX = 2; // Префикс "На рассмотрении"
  20. const GA_PREFIX = 12; // Префикс "Главному Администратору"
  21. const COMMAND_PREFIX = 10; // Префикс "Команде Проекта"
  22. const WATCHED_PREFIX = 9; // Префикс "Рассмотрено"
  23. const CLOSE_PREFIX = 7; // Префикс "Закрыто"
  24. const SPECIAL_PREFIX = 11; // Префикс "Специальному Администратору"
  25. const buttons = [
  26. {
  27. title: '---------------------------------------------------------------> Раздел Жалоб <---------------------------------------------------------------',
  28. },
  29. {
  30. title:'gecn ',
  31. },
  32. {
  33. title: 'на рассмотрение ',
  34. content:
  35. "[CENTER][SIZE=4][FONT=times new roman]Доброго времени суток, уважаемый {{ user.mention }}.[/FONT][/CENTER]<br><br>"+
  36. "[CENTER][SIZE=4][FONT=times new roman]Ваша жалоба была взята на рассмотрение. Ожидайте ответа в данной теме. <br><br>"+
  37. "[CENTER][FONT=times new roman] [SIZE=4] [COLOR=YELLOW]На рассмотрение..[/color]<br> [color=purple] С Уважением Куратор администрации [/color] Vitaliy_Extreme. [/FONT][/CENTER]<br>",
  38. prefix: PIN_PREFIX,
  39. status: true,
  40. },
  41. {
  42. title: 'одобрено. ',
  43. content:
  44. "[CENTER][SIZE=4][FONT=times new roman]Доброго времени суток, уважаемый {{ user.mention }}.[/FONT][/CENTER]<br><br>"+
  45. "[CENTER][SIZE=4][FONT=times new roman]Ваша жалоба была взята на рассмотрение. Ожидайте ответа в данной теме. <br><br>"+
  46. "[CENTER][FONT=times new roman] [SIZE=4] [COLOR=GREEN]Одобрено.[/color]<br> [color=purple] С Уважением Куратор администрации [/color] Vitaliy_Extreme. [/FONT][/CENTER]<br>",
  47. prefix: ACCEPT_PREFIX,
  48. status: false,
  49. },
  50. {
  51. title: 'запросил доказательства',
  52. content:
  53. "[CENTER][SIZE=4][FONT=times new roman]Доброго времени суток, уважаемый {{ user.mention }}.[/FONT][/CENTER]<br><br>"+
  54. "[CENTER][SIZE=4][FONT=times new roman]Ваша жалоба была взята на рассмотрение. Ожидайте пока администратор предоставит мне доказательства. <br><br>"+
  55. "[CENTER][FONT=times new roman] [SIZE=4] [COLOR=ORANGE]На рассмотрение.[/color]<br> [color=purple] С Уважением Куратор администрации [/color] Vitaliy_Extreme. [/FONT][/CENTER]<br>",
  56. prefix: PIN_PREFIX,
  57. status: true,
  58. },
  59. {
  60. title: 'доказательства предоставлены. выдано верно ',
  61. content:
  62. "[CENTER][SIZE=4][FONT=times new roman]Доброго времени суток, уважаемый {{ user.mention }}.[/FONT][/CENTER]<br><br>"+
  63. "[CENTER][SIZE=4][FONT=times new roman]Администратор предоставил доказательства, наказание выдано верно. <br><br>"+
  64. "[CENTER][FONT=times new roman] [SIZE=4] [COLOR=RED]Закрыто.[/color]<br> [color=purple] С Уважением Куратор администрации [/color] Vitaliy_Extreme. [/FONT][/CENTER]<br>",
  65. prefix: CLOSE_PREFIX,
  66. status: false,
  67. },
  68. {
  69. title: 'будет проведена беседа',
  70. content:
  71. "[CENTER][SIZE=4][FONT=times new roman]Доброго времени суток, уважаемый {{ user.mention }}.[/FONT][/CENTER]<br><br>"+
  72. "[CENTER][SIZE=4][FONT=times new roman]Ваша жалоба была одобрена. С администратором будет проведена беседа на данную тему.<br><br>"+
  73. "[CENTER][FONT=times new roman] [SIZE=4] [COLOR=GREEN]Одобрено.[/color]<br> [color=purple] С Уважением Куратор администрации [/color] Vitaliy_Extreme. [/FONT][/CENTER]<br>",
  74. prefix: CLOSE_PREFIX,
  75. status: false,
  76. },
  77. {
  78. title: 'администратор не предоставил доказательства',
  79. content:
  80. "[CENTER][SIZE=4][FONT=times new roman]Доброго времени суток, уважаемый {{ user.mention }}.[/FONT][/CENTER]<br><br>"+
  81. "[CENTER][SIZE=4][FONT=times new roman]Администратор не предоставил доказательства.<br>"+
  82. "[CENTER][SIZE=4][FONT=times new roman]Наказание будет снято, если оно еще не снято.<br><br>"+
  83. "[CENTER][FONT=times new roman] [SIZE=4] [COLOR=GREEN]Одобрено.[/color]<br> [color=purple] С Уважением Куратор администрации [/color] Vitaliy_Extreme. [/FONT][/CENTER]<br>",
  84. prefix: CLOSE_PREFIX,
  85. status: false,
  86. },
  87. {
  88. title: 'передано зга',
  89. content:
  90. "[CENTER][SIZE=4][FONT=times new roman]Доброго времени суток, уважаемый {{ user.mention }}.[/FONT][/CENTER]<br><br>"+
  91. "[CENTER][SIZE=4][FONT=times new roman]Ваша жалоба была передана на рассмотрение [color=red]Заместителям Главного администратора[/color] @Pavel Moroznik ღ @Nayoko_Tamura<br>"+
  92. "[CENTER][FONT=times new roman] [SIZE=4] [COLOR=ORANGE]Ожидайте ответа.[/color]<br> [color=purple] С Уважением Куратор администрации [/color] Vitaliy_Extreme. [/FONT][/CENTER]<br>",
  93. prefix: PIN_PREFIX,
  94. status: true,
  95. },
  96. {
  97. title: 'передано га',
  98. content:
  99. "[CENTER][SIZE=4][FONT=times new roman]Доброго времени суток, уважаемый {{ user.mention }}.[/FONT][/CENTER]<br><br>"+
  100. "[CENTER][SIZE=4][FONT=times new roman]Ваша жалоба была передана на рассмотрение [color=red]Главному администратору[/color] @Nadezhda_Gray <br>"+
  101. "[CENTER][FONT=times new roman] [SIZE=4] [COLOR=ORANGE]Ожидайте ответа.[/color]<br> [color=purple] С Уважением Куратор администрации [/color] Vitaliy_Extreme. [/FONT][/CENTER]<br>",
  102. prefix: PIN_PREFIX,
  103. status: true,
  104. },
  105. {
  106. title: '72 часа',
  107. content:
  108. "[CENTER][SIZE=4][FONT=times new roman]Доброго времени суток, уважаемый {{ user.mention }}.[/FONT][/CENTER]<br><br>"+
  109. "[CENTER][SIZE=4][FONT=times new roman]С момента выдачи наказания прошло более 72-х часов, жалоба не подлежит рассмотрению.<br><br>"+
  110. "[CENTER][FONT=times new roman] [SIZE=4] [COLOR=RED]Закрыто.[/color]<br> [color=purple] С Уважением Куратор администрации [/color] Vitaliy_Extreme. [/FONT][/CENTER]<br>",
  111. prefix: CLOSE_PREFIX,
  112. status: false,
  113. },
  114. {
  115. title: 'не по форме',
  116. content:
  117. "[CENTER][SIZE=4][FONT=times new roman]Доброго времени суток, уважаемый {{ user.mention }}.[/FONT][/CENTER]<br><br>"+
  118. "[CENTER][SIZE=4][FONT=times new roman]Ваша жалоба составлена не по форме, просьба ознакомиться с формой подачей здесь - [URL='https://forum.blackrussia.online/threads/%D0%9F%D1%80%D0%B0%D0%B2%D0%B8%D0%BB%D0%B0-%D0%BF%D0%BE%D0%B4%D0%B0%D1%87%D0%B8-%D0%B6%D0%B0%D0%BB%D0%BE%D0%B1-%D0%BD%D0%B0-%D0%B0%D0%B4%D0%BC%D0%B8%D0%BD%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%86%D0%B8%D1%8E.3429349/']*Кликабельно*[/URL]<br><br>"+
  119. "[CENTER][FONT=times new roman] [SIZE=4] [COLOR=RED]Закрыто.[/color]<br> [color=purple] С Уважением Куратор администрации [/color] Vitaliy_Extreme. [/FONT][/CENTER]<br>",
  120. prefix: CLOSE_PREFIX,
  121. status: false,
  122. },
  123. {
  124. title: 'недостаточно доказательств',
  125. content:
  126. "[CENTER][SIZE=4][FONT=times new roman]Доброго времени суток, уважаемый {{ user.mention }}.[/FONT][/CENTER]<br><br>"+
  127. "[CENTER][SIZE=4][FONT=times new roman]Недостаточно доказательств для выдачи наказания администратору.<br>"+
  128. "[CENTER][FONT=times new roman] [SIZE=4] [COLOR=RED]Закрыто.[/color]<br> [color=purple] С Уважением Куратор администрации [/color] Vitaliy_Extreme. [/FONT][/CENTER]<br>",
  129. prefix: CLOSE_PREFIX,
  130. status: false,
  131. },
  132. {
  133. title: 'Нет доказательств',
  134. content:
  135. "[CENTER][SIZE=4][FONT=times new roman]Доброго времени суток, уважаемый {{ user.mention }}.[/FONT][/CENTER]<br><br>"+
  136. "[CENTER][SIZE=4][FONT=times new roman]В вашей жалоба отсутсвуют доказательства.<br>"+
  137. "[CENTER][FONT=times new roman] [SIZE=4] [COLOR=RED]Закрыто.[/color]<br> [color=purple] С Уважением Куратор администрации [/color] Vitaliy_Extreme. [/FONT][/CENTER]<br>",
  138. prefix: CLOSE_PREFIX,
  139. status: false,
  140. },
  141. ];
  142. $(document).ready(() => {
  143. // Загрузка скрипта для обработки шаблонов
  144. $('body').append('<script src="https://cdn.jsdelivr.net/npm/handlebars@latest/dist/handlebars.js"></script>');
  145. // Добавление кнопок при загрузке страницы
  146. addButton('Меню', 'selectAnswer');
  147. addButton('Одобрить', 'accepted');
  148. addButton('Отказать', 'unaccept');
  149. addButton('На рассмотрение', 'pin');
  150. addButton('Рассмотрено', 'watched');
  151. addButton('Закрыть', 'closed');
  152. addButton('КП', 'teamProject');
  153. addButton ('Спецу', 'specialAdmin');
  154. addButton ('ГА', 'mainAdmin');
  155. // Поиск информации о теме
  156. const threadData = getThreadData();
  157. $('button#pin').click(() => editThreadData(PIN_PREFIX, true));
  158. $('button#accepted').click(() => editThreadData(ACCEPT_PREFIX, false));
  159. $(`button#teamProject`).click(() => editThreadData(COMMAND_PREFIX, true));
  160. $(`button#watched`).click(() => editThreadData(WATCHED_PREFIX, false));
  161. $(`button#unaccept`).click(() => editThreadData(UNACCEPT_PREFIX, false));
  162. $(`button#mainAdmin`).click(() => editThreadData(GA_PREFIX, true));
  163. $(`button#specialAdmin`).click(() => editThreadData(SPECIAL_PREFIX, true));
  164. $('button#unaccept').click(() => editThreadData(UNACCEPT_PREFIX, false));
  165. $(`button#selectAnswer`).click(() => {
  166. XF.alert(buttonsMarkup(buttons), null, 'Выберите ответ:');
  167. buttons.forEach((btn, id) => {
  168. if(id > 1) {
  169. $(`button#answers-${id}`).click(() => pasteContent(id, threadData, true));
  170. } else {
  171. $(`button#answers-${id}`).click(() => pasteContent(id, threadData, false));
  172. }
  173. });
  174. });
  175. });
  176. function addButton(name, id) {
  177. $('.button--icon--reply').before(
  178. `<button type="button" class="button--primary button rippleButton" id="${id}" style="border-radius: 30px; margin-right: 7px;">${name}</button>`,
  179. );
  180. }
  181. function buttonsMarkup(buttons) {
  182. return `<div class="select_answer">${buttons
  183. .map(
  184. (btn, i) =>
  185. `<button id="answers-${i}" class="button--primary button ` +
  186. `rippleButton" style="margin:5px"><span class="button-text">${btn.title}</span></button>`,
  187. )
  188. .join('')}</div>`;
  189. }
  190. function pasteContent(id, data = {}, send = false) {
  191. const template = Handlebars.compile(buttons[id].content);
  192. if ($('.fr-element.fr-view p').text() === '') $('.fr-element.fr-view p').empty();
  193. $('span.fr-placeholder').empty();
  194. $('div.fr-element.fr-view p').append(template(data));
  195. $('a.overlay-titleCloser').trigger('click');
  196. if(send == true){
  197. editThreadData(buttons[id].prefix, buttons[id].status);
  198. $('.button--icon.button--icon--reply.rippleButton').trigger('click');
  199. }
  200. }
  201. function getThreadData() {
  202. const authorID = $('a.username')[0].attributes['data-user-id'].nodeValue;
  203. const authorName = $('a.username').html();
  204. const hours = new Date().getHours();
  205. return {
  206. user: {
  207. id: authorID,
  208. name: authorName,
  209. mention: `[USER=${authorID}]${authorName}[/USER]`,
  210. },
  211. greeting: () =>
  212. 4 < hours && hours <= 11
  213. ? 'Доброе утро'
  214. : 11 < hours && hours <= 18
  215. ? 'Добрый день'
  216. : 18 < hours && hours <= 21
  217. ? 'Добрый вечер'
  218. : 'Доброй ночи',
  219. };
  220. }
  221. function editThreadData(prefix, pin = false) {
  222. // Получаем заголовок темы, так как он необходим при запросе
  223. const threadTitle = $('.p-title-value')[0].lastChild.textContent;
  224. if(pin == false){
  225. fetch(`${document.URL}edit`, {
  226. method: 'POST',
  227. body: getFormData({
  228. prefix_id: prefix,
  229. title: threadTitle,
  230. _xfToken: XF.config.csrf,
  231. _xfRequestUri: document.URL.split(XF.config.url.fullBase)[1],
  232. _xfWithData: 1,
  233. _xfResponseType: 'json',
  234. }),
  235. }).then(() => location.reload());
  236. }
  237. if(pin == true){
  238. fetch(`${document.URL}edit`, {
  239. method: 'POST',
  240. body: getFormData({
  241. prefix_id: prefix,
  242. title: threadTitle,
  243. sticky: 1,
  244. _xfToken: XF.config.csrf,
  245. _xfRequestUri: document.URL.split(XF.config.url.fullBase)[1],
  246. _xfWithData: 1,
  247. _xfResponseType: 'json',
  248. }),
  249. }).then(() => location.reload());
  250. }
  251. }
  252. function getFormData(data) {
  253. const formData = new FormData();
  254. Object.entries(data).forEach(i => formData.append(i[0], i[1]));
  255. return formData;
  256. }
  257. })();