Cherepovets script for chief 2.0

for chief

目前為 2025-05-01 提交的版本,檢視 最新版本

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

You will need to install an extension such as Tampermonkey to install this script.

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 Tampermonkey,才能安裝此腳本

您需要先安裝使用者腳本管理器擴充功能後才能安裝該腳本。

(我已經安裝了使用者腳本管理器,讓我安裝!)

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

(我已經安裝了使用者樣式管理器,讓我安裝!)

// ==UserScript==
// @name         Cherepovets script for chief 2.0
// @namespace    https://forum.blackrussia.online/
// @version      3.10
// @description  for chief
// @author       rolex
// @match        https://forum.blackrussia.online/threads/*
// @include      https://forum.blackrussia.online/threads/
// @grant        none
// @license      MIT
// @icon https://freepngimg.com/thumb/eagle/20-eagle-black-siluet-png-image-download-thumb.png
// ==/UserScript==
 
(function () {
'use strict';
const UNACCEPT_PREFIX = 4; // Prefix that will be set when thread closes
const ACCEPT_PREFIX = 8; // Prefix that will be set when thread accepted
const PIN_PREFIX = 2; // Prefix that will be set when thread pins
const COMMAND_PREFIX = 10; // Prefix that will be set when thread send to project team
const WATCHED_PREFIX = 9;
const CLOSE_PREFIX = 7; // Prefix that will be set when thread closes.
const TEX_PREFIX = 13;
const GA_PREFIX = 12;
const V_PREFIX = 1;
const NARASSSMOTRENII_PREFIX = 3;
const SPECIAL_PREFIX = 11;
const buttons = [
        {
		title: 'ᅠ ᅠ ᅠ ᅠ ᅠ ᅠ                                ᅠ⠀             ⠀ ⠀⠀ᅠ   👨‍💻 Жалобы на администрацию 👨‍💻    ᅠᅠ ᅠᅠ          ⠀        ⠀    ⠀      ⠀ᅠ     ᅠ ᅠ     ᅠ ᅠ ᅠ ',
        dpstyle: 'oswald: 3px;     color: #fff; background: #212428; box-shadow: 0 0 2px 0 rgba(0,0,0,0.14),0 2px 2px 0 rgba(0,0,0,0.12),0 1px 3px 0 rgba(0,0,0,0.2); border: 1px solid #BF40BF; width: 96%',
	},
{
title: 'Запросить доква у адм',
content:
'[CENTER][COLOR=rgb(255, 0, 0)][SIZE=4][FONT=arial][COLOR=rgb(56, 133, 233)]Добрый день, уважаемый[/COLOR][/FONT][/SIZE] [/COLOR][SIZE=4][FONT=arial] {{ user.mention }}[HR][/HR]<br><br>'+
"запрошу доказательства у администратора.<br><br>" +
"[COLOR=rgb(247, 218, 100)][ICODE]на рассмотрении[/ICODE][/COLOR][/CENTER]",
prefix: PIN_PREFIX,
status: true,
},
{
title: 'Дублирование темы ',
content:
'[CENTER][COLOR=rgb(255, 0, 0)][SIZE=4][FONT=arial][COLOR=rgb(56, 133, 233)]Добрый день, уважаемый[/COLOR][/FONT][/SIZE] [/COLOR][SIZE=4][FONT=arial] {{ user.mention }}[/USER][/FONT][/SIZE][/CENTER][HR][/HR]<br><br>'+
"[CENTER][SIZE=4][COLOR=rgb(209, 213, 216)][FONT=arial]ваша предыдущая жалоба находится на рассмотрении либо уже рассмотрена, не стоит продолжать создавать однотипные жалобы, иначе ваш форумный аккаунт может быть заблокирован[/FONT][/COLOR][/SIZE]<br><br>" +
"[COLOR=rgb(226, 80, 65)][ICODE]закрыто[/ICODE][/COLOR][/CENTER]<br><br>" +
"[RIGHT][COLOR=rgb(209, 213, 216)]Приятной игры на[/COLOR] [COLOR=rgb(56, 133, 233)]Cherepovets[/COLOR][/RIGHT]",
prefix: UNACCEPT_PREFIX,
status: false,
},
{
title: 'Жалоба не по форме',
content:
'[CENTER][COLOR=rgb(255, 0, 0)][SIZE=4][FONT=arial][COLOR=rgb(56, 133, 233)]Добрый день, уважаемый[/COLOR][/FONT][/SIZE] [/COLOR][SIZE=4][FONT=arial] {{ user.mention }}[/FONT][/SIZE][/CENTER][HR][/HR]<br><br>'+
"[CENTER][SIZE=4][COLOR=rgb(209, 213, 216)][FONT=arial]ваша жалоба составлена не по форме, составьте новую жалобу по следующей форме:[/FONT][/COLOR][/SIZE] <br><br>" +
"[FONT=arial][SPOILER]<br><br>" +
"[COLOR=rgb(209, 213, 216)][B]1. Ваш Nick_Name:<br><br>" +
"2. Nick_Name администратора:<br><br>" +
"3. Дата выдачи/получения наказания:<br><br>" +
"4. Суть жалобы:<br><br>" +
"5. Доказательство:[/B][/COLOR][/SPOILER][/FONT]<br><br>" +
"[COLOR=rgb(226, 80, 65)][ICODE]закрыто[/ICODE][/COLOR][/CENTER]<br><br>" +
"[RIGHT][COLOR=rgb(209, 213, 216)]Приятной игры на[/COLOR] [COLOR=rgb(56, 133, 233)]Cherepovets[/COLOR][/RIGHT]",
prefix: CLOSE_PREFIX,
status: false,
},
{
title: 'Доква нужны в имгур япикс и т д',
content:
'[CENTER][COLOR=rgb(255, 0, 0)][SIZE=4][FONT=arial][COLOR=rgb(56, 133, 233)]Добрый день, уважаемый[/COLOR][/FONT][/SIZE] [/COLOR][SIZE=4][FONT=arial]{{ user.mention }}[/USER][/FONT][/SIZE][/CENTER][HR][/HR]<br><br>'+
"[CENTER][SIZE=4][COLOR=rgb(209, 213, 216)][FONT=arial]прикрепите доказательства через фотохостинги [/FONT][COLOR=rgb(255, 255, 255)][FONT=arial]Imgur/Япикс/R[B]adikal[/B][/FONT][/COLOR][FONT=arial][B] и тп.[/B][/FONT][/COLOR][/SIZE] <br><br>" +
"[COLOR=rgb(226, 80, 65)][ICODE]закрыто[/ICODE][/COLOR][/CENTER][CENTER][SIZE=4]<br><br>" +

"[RIGHT][COLOR=rgb(209, 213, 216)]Приятной игры на[/COLOR] [COLOR=rgb(56, 133, 233)]Cherepovets[/COLOR][/RIGHT]",
prefix: CLOSE_PREFIX,
status: false,
},
{
title: 'Более 48 часов',
content:
'[CENTER][COLOR=rgb(255, 0, 0)][SIZE=4][FONT=arial][COLOR=rgb(56, 133, 233)]Добрый день, уважаемый[/COLOR][/FONT][/SIZE] [/COLOR][SIZE=4][FONT=arial] {{ user.mention }}[/USER][/FONT][/SIZE][/CENTER][HR][/HR]<br><br>'+
"[CENTER][SIZE=4][COLOR=rgb(209, 213, 216)][FONT=arial]с момента выдачи наказания прошло более 48 часов, рассмотрению не подлежит[/FONT][/COLOR][/SIZE]<br><br>" +
"[COLOR=rgb(226, 80, 65)][ICODE]закрыто[/ICODE][/COLOR][/CENTER]<br><br>" +
"[RIGHT][COLOR=rgb(209, 213, 216)]Приятной игры на[/COLOR] [COLOR=rgb(56, 133, 233)]Cherepovets[/COLOR][/RIGHT]",
prefix: CLOSE_PREFIX,
status: false,
},
{
title: 'ᅠ ᅠ ᅠ ᅠ ᅠ ᅠ                                ᅠ⠀             ⠀ ⠀⠀ᅠ ᅠ😭 Обжалование наказаний 😭 ᅠᅠ ᅠᅠ          ⠀        ⠀    ⠀      ⠀ᅠ     ᅠ ᅠ     ᅠ ᅠ ᅠ ',
dpstyle: 'oswald: 3px;     color: #fff; background: #212428; box-shadow: 0 0 2px 0 rgba(0,0,0,0.14),0 2px 2px 0 rgba(0,0,0,0.12),0 1px 3px 0 rgba(0,0,0,0.2); border: 1px solid #BF40BF; width: 96%',
},
{
title: 'на рассмотрение ',
content:
"[CENTER][COLOR=rgb(255, 0, 0)][SIZE=4][FONT=arial][COLOR=rgb(56, 133, 233)]Добрый день, уважаемый[/COLOR][/FONT][/SIZE] [/COLOR][SIZE=4][FONT=arial]{{ user.mention }}[/USER][/FONT][/SIZE][/CENTER][HR][/HR]<br><br>" +
"[CENTER][SIZE=4][COLOR=rgb(209, 213, 216)][FONT=arial]Ваше обжалование взято на рассмотрение, ожидайте вердикта и не создавайте дублирующие темы.[/FONT][/COLOR][/SIZE]<br><br>" +
"[COLOR=rgb(247, 218, 100)][ICODE]на рассмотрении[/ICODE][/COLOR][/CENTER]<br><br>" +
"[RIGHT][COLOR=rgb(209, 213, 216)]Приятной игры на[/COLOR] [COLOR=rgb(56, 133, 233)]Cherepovets[/COLOR][/RIGHT]",
prefix: PIN_PREFIX,
status: true,
},
{
title: 'обж не по форме',
content:
'[CENTER][COLOR=rgb(255, 0, 0)][SIZE=4][FONT=arial][COLOR=rgb(56, 133, 233)]Добрый день, уважаемый[/COLOR][/FONT][/SIZE] [/COLOR][SIZE=4][FONT=arial] {{ user.mention }}[/FONT][/SIZE][/CENTER][HR][/HR]<br><br>'+
"[CENTER][SIZE=4][COLOR=rgb(209, 213, 216)][FONT=arial]ваша жалоба составлена не по форме, составьте новую жалобу по следующей форме:[/FONT][/COLOR][/SIZE] <br><br>" +
"[FONT=arial][SPOILER]<br><br>" +
"[COLOR=rgb(209, 213, 216)][B]1. Ваш Nick_Name:<br><br>" +
"2. Nick_Name администратора:<br><br>" +
"3. Дата выдачи/получения наказания:<br><br>" +
"4. Суть заявки:<br><br>" +
"5. Доказательство:[/B][/COLOR][/SPOILER][/FONT]<br><br>" +
"[COLOR=rgb(226, 80, 65)][ICODE]закрыто[/ICODE][/COLOR][/CENTER]<br><br>" +
"[RIGHT][COLOR=rgb(209, 213, 216)]Приятной игры на[/COLOR] [COLOR=rgb(56, 133, 233)]Cherepovets[/COLOR][/RIGHT]",
prefix: CLOSE_PREFIX,
status: false,
},
{
title: 'Дублирование темы ',
content:
'[CENTER][COLOR=rgb(255, 0, 0)][SIZE=4][FONT=arial][COLOR=rgb(56, 133, 233)]Добрый день, уважаемый[/COLOR][/FONT][/SIZE] [/COLOR][SIZE=4][FONT=arial] {{ user.mention }}[/USER][/FONT][/SIZE][/CENTER][HR][/HR]<br><br>'+
"[CENTER][SIZE=4][COLOR=rgb(209, 213, 216)][FONT=arial]ваше предыдущее обжалование находится на рассмотрении либо уже рассмотрено, не стоит продолжать создавать однотипные обжалования, иначе ваш форумный аккаунт может быть заблокирован[/FONT][/COLOR][/SIZE]<br><br>" +
"[COLOR=rgb(226, 80, 65)][ICODE]закрыто[/ICODE][/COLOR][/CENTER]<br><br>" +
"[RIGHT][COLOR=rgb(209, 213, 216)]Приятной игры на[/COLOR] [COLOR=rgb(56, 133, 233)]Cherepovets[/COLOR][/RIGHT]",
prefix: UNACCEPT_PREFIX,
status: false,
},
];
 
$(document).ready(() => {
// Загрузка скрипта для обработки шаблонов
$('body').append('<script src="https://cdn.jsdelivr.net/npm/handlebars@latest/dist/handlebars.js"></script>');
 
// Добавление кнопок при загрузке страницы
addButton('Тык', 'selectAnswer');
 
// Поиск информации о теме
const threadData = getThreadData();
 
$('button#pin').click(() => editThreadData(PIN_PREFIX, true));
$('button#accepted').click(() => editThreadData(ACCEPT_PREFIX, false));
$('button#teamProject').click(() => editThreadData(COMMAND_PREFIX, true));
$('button#close').click(() => editThreadData(CLOSE_PREFIX, false));
$('button#unaccept').click(() => editThreadData(UNACCEPT_PREFIX, false));
 
$(`button#selectAnswer`).click(() => {
XF.alert(buttonsMarkup(buttons), null, 'Выберите ответ:');
buttons.forEach((btn, id) => {
if(id > 0) {
$(`button#answers-${id}`).click(() => pasteContent(id, threadData, true));
} else {
$(`button#answers-${id}`).click(() => pasteContent(id, threadData, false));
}
});
});
});
 
function addButton(name, id) {
$('.button--icon--reply').before(
`<button type="button" class="button rippleButton" id="${id}" style="margin: 3px;">${name}</button>`,
);
}
 
function buttonsMarkup(buttons) {
return `<div class="select_answer">${buttons
.map(
(btn, i) =>
`<button id="answers-${i}" class="button--primary button ` +
`rippleButton" style="margin:5px"><span class="button-text">${btn.title}</span></button>`,
)
.join('')}</div>`;
}
 
function pasteContent(id, data = {}, send = false) {
const template = Handlebars.compile(buttons[id].content);
if ($('.fr-element.fr-view p').text() === '') $('.fr-element.fr-view p').empty();
 
$('span.fr-placeholder').empty();
$('div.fr-element.fr-view p').append(template(data));
$('a.overlay-titleCloser').trigger('click');
 
if(send == true){
editThreadData(buttons[id].prefix, buttons[id].status);
$('.button--icon.button--icon--reply.rippleButton').trigger('click');
}
}
 
function getThreadData() {
const authorID = $('a.username')[0].attributes['data-user-id'].nodeValue;
const authorName = $('a.username').html();
const hours = new Date().getHours();
return {
user: {
id: authorID,
name: authorName,
mention: `[USER=${authorID}]${authorName}[/USER]`,
},
greeting: () =>
4 < hours && hours <= 11
? 'Доброе утро'
: 11 < hours && hours <= 15
? 'Добрый день'
: 15 < hours && hours <= 21
? 'Добрый вечер'
: 'Доброй ночи',
};
}
 
function editThreadData(prefix, pin = false) {
// Получаем заголовок темы, так как он необходим при запросе
const threadTitle =
$('.p-title-value')[0].lastChild.textContent;
 
if(pin == false){
fetch(`${document.URL}edit`, {
method: 'POST',
body: getFormData({
prefix_id: prefix,
title: threadTitle,
_xfToken: XF.config.csrf,
_xfRequestUri: document.URL.split(XF.config.url.fullBase)[1],
_xfWithData: 1,
_xfResponseType: 'json',
}),
}).then(() => location.reload());
}
if(pin == true){
fetch(`${document.URL}edit`, {
method: 'POST',
body: getFormData({
prefix_id: prefix,
title: threadTitle,
sticky: 1,
_xfToken: XF.config.csrf,
_xfRequestUri: document.URL.split(XF.config.url.fullBase)[1],
_xfWithData: 1,
_xfResponseType: 'json',
}),
}).then(() => location.reload());
}
}
 
function getFormData(data) {
const formData = new FormData();
Object.entries(data).forEach(i => formData.append(i[0], i[1]));
return formData;
}
})();