Marmennz / Auto Token Pool Address

// ==UserScript==
// @name         Auto Token Pool Address
// @namespace    http://tampermonkey.net/
// @version      2.4
// @description  кирюха пидр
// @author       You
// @match        *://*/*
// @grant        GM_setClipboard
// @run-at       document-idle
// @license      MIT
// ==/UserScript==

(function () {
    'use strict';

    // Создаем канал для взаимодействия между вкладками
    const channel = new BroadcastChannel('clipboard_notification_channel');
    let lastProcessedURL = '';
    const notificationQueue = []; // Очередь уведомлений

    // Функция для обработки URL
    function processURL() {
        const url = window.location.href;

        // Проверяем, обрабатывался ли уже этот URL
        if (url === lastProcessedURL) return;
        lastProcessedURL = url;

        const regex = /\/lp\/([A-Za-z0-9_-]+)/;
        const match = url.match(regex);

        if (match && match[1]) {
            const extractedPart = match[1];
            const pageTitle = document.title || 'No Title'; // Заголовок страницы

            // Копируем часть URL в буфер обмена
            GM_setClipboard(extractedPart);

            // Генерируем случайный цвет
            const randomColor = getRandomColor();

            // Отправляем уведомление с текстом и цветом другим вкладкам
            channel.postMessage({
                message: `Copied to clipboard: ${extractedPart}\nPage Title: ${pageTitle}`,
                color: randomColor
            });

            // Также отображаем уведомление локально
            showNotification(`Copied to clipboard: ${extractedPart}\nPage Title: ${pageTitle}`, randomColor);

            // Подсвечиваем текущую вкладку
            highlightTab(randomColor);
        }
    }

    // Слушаем уведомления от других вкладок
    channel.onmessage = (event) => {
        if (event.data && event.data.message && event.data.color) {
            showNotification(event.data.message, event.data.color);
        }
    };

    // Функция для генерации случайного RGB-цвета
    function getRandomColor() {
        const r = Math.floor(Math.random() * 256);
        const g = Math.floor(Math.random() * 256);
        const b = Math.floor(Math.random() * 256);
        return `rgb(${r}, ${g}, ${b})`;
    }

    // Функция для отображения уведомления
    function showNotification(message, color) {
        const notification = document.createElement('div');
        notification.textContent = message;
        notification.style.position = 'fixed';
        notification.style.left = '50%';
        notification.style.transform = 'translateX(-50%)';
        notification.style.padding = '10px 20px';
        notification.style.backgroundColor = color;
        notification.style.color = '#fff';
        notification.style.textShadow = '0 0 3px #000, 1px 1px 2px #000'; // Обводка текста
        notification.style.borderRadius = '5px';
        notification.style.boxShadow = '0 2px 4px rgba(0, 0, 0, 0.2)';
        notification.style.zIndex = '9999';
        notification.style.fontSize = '14px';
        notification.style.fontFamily = 'Arial, sans-serif';
        notification.style.textAlign = 'center';
        notification.style.whiteSpace = 'pre-line'; // Поддержка переноса строк

        // Добавляем уведомление в очередь
        notificationQueue.push(notification);

        // Обновляем положение всех уведомлений
        updateNotificationPositions();

        // Добавляем уведомление на страницу
        document.body.appendChild(notification);

        // Удаляем уведомление через 3 секунды
        setTimeout(() => {
            notification.remove();
            notificationQueue.shift();
            updateNotificationPositions();
        }, 10000);
    }

    // Обновляет положения всех уведомлений в очереди
    function updateNotificationPositions() {
        notificationQueue.forEach((notification, index) => {
            notification.style.top = `${20 + index * 50}px`; // 20px сверху + 50px на каждое уведомление
        });
    }

    // Ждем полной загрузки страницы
    window.addEventListener('load', () => {
        processURL();
    });

    // Отслеживаем изменения URL (если страница изменяется динамически)
    let currentURL = window.location.href;
    setInterval(() => {
        if (currentURL !== window.location.href) {
            currentURL = window.location.href;
            processURL();
        }
    }, 500);
})();