您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Automatically assigns tickets on Jira with enhanced features
- // ==UserScript==
- // @name Atlassian Jira Auto Ticket Assigner
- // @namespace http://tampermonkey.net/
- // @version 1.2
- // @description Automatically assigns tickets on Jira with enhanced features
- // @author Oleg V'yunov
- // @match https://jira.brdo.com.ua/*
- // @exclude https://jira.brdo.com.ua/secure/Dashboard.jspa
- // @grant none
- // @require https://cdn.jsdelivr.net/npm/sweetalert2@11
- // @license GNU GPLv3
- // ==/UserScript==
- (function() {
- 'use strict';
- // Функція для динамічного завантаження бібліотеки
- function loadScript(url, callback) {
- const script = document.createElement('script');
- script.type = 'text/javascript';
- script.src = url;
- script.onload = callback;
- document.head.appendChild(script);
- }
- // Виклик функції для завантаження SweetAlert
- loadScript('https://cdn.jsdelivr.net/npm/sweetalert2@11', () => {
- function showAlert(message) {
- Swal.fire({
- title: message,
- timer: 2000,
- showConfirmButton: false,
- position: 'top-start'
- });
- }
- const maxMessages = 24;
- let clickCount = localStorage.getItem('clickCount') ? parseInt(localStorage.getItem('clickCount')) : 0;
- let messages = localStorage.getItem('messages') ? localStorage.getItem('messages').split('<br>') : [];
- let modal;
- const selector = '#assign-to-me.issueaction-assign-to-me';
- const targetUrl = 'https://jira.brdo.com.ua/issues/?jql=project%20%3D%20EES%20AND%20status%20in%20(%22%D0%92%20%D1%80%D0%BE%D0%B1%D0%BE%D1%82%D1%96%22%2C%20%D0%9F%D0%B5%D1%80%D0%B5%D0%B2%D1%96%D0%B4%D1%87%D0%B8%D0%BD%D0%B5%D0%BD%D0%BE%2C%20%22%D0%9D%D0%BE%D0%B2%D0%B5%20%D0%B7%D0%B2%D0%B5%D1%80%D0%BD%D0%B5%D0%BD%D0%BD%D1%8F%22)%20AND%20assignee%20%3D%20EMPTY%20AND%20status%20%3D%20%22%D0%9D%D0%BE%D0%B2%D0%B5%20%D0%B7%D0%B2%D0%B5%D1%80%D0%BD%D0%B5%D0%BD%D0%BD%D1%8F%22';
- function showModal() {
- if (!modal) {
- modal = document.createElement('div');
- modal.style.position = 'fixed';
- modal.style.bottom = '5px';
- modal.style.left = '10px';
- modal.style.width = '250px';
- modal.style.height = '505px';
- modal.style.overflowY = 'auto';
- modal.style.backgroundColor = 'white';
- modal.style.padding = '20px';
- modal.style.boxShadow = '0 0 10px rgba(0, 0, 0, 0.5)';
- modal.style.zIndex = '1000';
- const copyButton = document.createElement('button');
- copyButton.textContent = 'Копіювати';
- copyButton.onclick = () => {
- const tempTextArea = document.createElement('textarea');
- const displayedMessages = modal.querySelector('div').innerText;
- tempTextArea.value = displayedMessages;
- document.body.appendChild(tempTextArea);
- tempTextArea.select();
- document.execCommand('copy');
- document.body.removeChild(tempTextArea);
- showAlert('Вміст вікна скопійовано в буфер обміну.');
- };
- modal.appendChild(copyButton);
- const resetButton = document.createElement('button');
- resetButton.textContent = 'Обнулити';
- resetButton.onclick = () => {
- clickCount = 0;
- localStorage.setItem('clickCount', clickCount);
- showAlert('Значення тікетів скинуто до 0.');
- };
- modal.appendChild(resetButton);
- const clearButton = document.createElement('button');
- clearButton.textContent = 'Очистити';
- clearButton.onclick = () => {
- messages = [];
- localStorage.removeItem('messages');
- modal.querySelector('div').innerHTML = '';
- showAlert('Вміст вікна очищено.');
- };
- modal.appendChild(clearButton);
- document.body.appendChild(modal);
- }
- const text = modal.querySelector('div') || document.createElement('div');
- text.innerHTML = messages.join('<br>').replace(/(\w+)\s(\w+)/g, '$1');
- if (!text.parentElement) {
- modal.appendChild(text);
- } else {
- text.innerHTML = messages.join('<br>').replace(/(\w+)\s(\w+)/g, '$1'); // Очистка попереднього вмісту
- }
- }
- function addMessage(message) {
- const now = new Date();
- const timeString = now.toLocaleTimeString();
- const formattedMessage = `[${timeString}] ${message}`;
- messages.push(formattedMessage);
- if (messages.length > maxMessages) {
- messages.shift();
- }
- localStorage.setItem('messages', messages.join('<br>'));
- showModal();
- }
- function checkForLink() {
- const link = document.querySelector(selector);
- const assigneeElement = document.querySelector('#assignee-val');
- const assignee = assigneeElement ? assigneeElement.innerText.trim().split(' ')[0] : 'відсутній';
- const reporterElement = document.querySelector('#reporter-val');
- const reporter = reporterElement ? reporterElement.innerText.trim().split(' ')[0] : 'відсутній';
- if (link) {
- addMessage('Посилання знайдено');
- if (reporter === 'Відділ' && assignee === 'Не') {
- let attempts = 0;
- const maxAttempts = 20; // максимальна кількість спроб
- clickCount++;
- localStorage.setItem('clickCount', clickCount);
- // зміна виконавця
- const clickInterval = setInterval(() => {
- const assigneeName = assigneeElement.innerText.trim().split(' ')[0];
- if (assigneeName !== 'Vyunova') {
- link.click();
- addMessage('Клікаєм');
- } else {
- clearInterval(clickInterval);
- }
- attempts++;
- if (attempts >= maxAttempts) {
- clearInterval(clickInterval);
- addMessage('Максимальна кількість спроб досягнута');
- }
- }, 500);
- // розгортання меню та натискання на елемент "В роботі"
- var dropdown = document.querySelector('#opsbar-transitions_more');
- if (dropdown) {
- dropdown.click();
- setTimeout(function() {
- var element = document.querySelector('.jira-issue-status-lozenge-inprogress');
- if (element) {
- element.click();
- setTimeout(function() { }, 2000); //затримка після кліку на елемент "В роботі"
- }
- }, 5000); //затримка на рогортання меню
- }
- }
- } else {
- addMessage('Посилання не знайдено');
- }
- }
- function reloadPage() {
- const assigneeElement = document.querySelector('#assignee-val');
- const assignee = assigneeElement ? assigneeElement.innerText.trim().split(' ')[0] : 'відсутній';
- const reporterElement = document.querySelector('#reporter-val');
- const reporter = reporterElement ? reporterElement.innerText.trim().split(' ')[0] : 'відсутній';
- const intervalId = setInterval(() => {
- if (window.location.href !== targetUrl) {
- window.location.replace(targetUrl);
- addMessage('Повертаємося');
- }
- }, 500);
- if (clickCount < 9) {
- try {
- addMessage('Автор: ' + reporter);
- addMessage('Виконавець: ' + assignee);
- setTimeout(() => {
- location.reload();
- addMessage('<<ПЕРЕЗАВАНТАЖЕННЯ>>');
- }, 1000); // Затримка в 1 секунду перед перезавантаженням
- } catch (error) {
- addMessage('Помилка при перезавантаженні сторінки: ' + error);
- }
- }
- }
- const intervalId = setInterval(() => {
- checkForLink();
- setTimeout(reloadPage, 7000);
- }, 2000);
- addMessage('Кількість тікетів: ' + clickCount);
- showModal();
- });
- })();