kayosha / CatWar Chat Enhancer (Kiwi Browser)

// ==UserScript==
// @name         CatWar Chat Enhancer (Kiwi Browser)
// @namespace    https://catwar.net/
// @version      1.2
// @description  Улучшение чата CatWar: добавление таймера и счетчика сообщений до спама (адаптация для мобильных браузеров)
// @author       kayosha
// @match        https://catwar.net/chat
// @license      MIT
// @grant        none
// ==/UserScript==

(function() {
    'use strict';

    // Добавление элементов интерфейса
    const chatForm = document.getElementById('mess_form');
    if (chatForm) {
        const uiContainer = document.createElement('div');
        uiContainer.style.marginTop = '10px';
        uiContainer.innerHTML = `
            <div style="font-size: 14px;">
                <b>Время до обновления чата:</b> <span id="refreshed">0</span> сек<br>
                <b>Сообщений до спама:</b> <span id="messenger">11</span><br>
                <form id="nummState" style="margin-top: 5px;">
                    <button id="numm" type="button" style="padding: 8px; font-size: 14px;">Обновить числа</button>
                    <input type="text" id="numm_input" placeholder="Введите число" 
                           style="width: 90%; margin-top: 5px; font-size: 14px; padding: 5px;">
                </form>
            </div>
        `;
        chatForm.appendChild(uiContainer);
    }

    // Переменные
    const command = `/number `;
    let number = '';
    let numberInput = '';
    const messenger = document.getElementById("messenger");
    const refreshed = document.getElementById("refreshed");
    let timer = 60;
    let pressed = false;
    let allowedMessages = 11;

    // Функции
    function TextInputation() {
        const input = document.getElementById('numm_input');
        if (input) {
            number = input.value.trim();
            if (number) {
                numberInput = command + number;
                const messField = document.getElementById('mess');
                if (messField) {
                    messField.value = numberInput; // Используем value для работы с текстовыми полями
                }
                unMessage();
                if (!pressed) {
                    setTimeout(updateTimer, 1000);
                    pressed = true;
                    refreshed.innerText = timer;
                }
            } else {
                alert('Введите корректное число!');
            }
        }
    }

    function updateTimer() {
        timer -= 1;
        refreshed.innerText = timer;
        if (timer > 0) {
            setTimeout(updateTimer, 1000);
        } else {
            pressed = false;
            allowedMessages = 10;
            timer = 60;
            messenger.innerText = allowedMessages;
        }
    }

    function unMessage() {
        if (allowedMessages > 0) {
            allowedMessages -= 1;
            messenger.innerText = allowedMessages;
        } else {
            alert('Достигнут лимит сообщений. Подождите, пока таймер сбросится.');
        }
    }

    // Привязка событий
    const nummButton = document.getElementById('numm');
    if (nummButton) {
        nummButton.addEventListener('click', TextInputation);
    }

    // Обработка нажатия Enter
    document.addEventListener("keydown", (e) => {
        if (e.key === "Enter") {
            const focusedElement = document.activeElement;
            if (focusedElement && focusedElement.id === 'numm_input') {
                e.preventDefault(); // Предотвращаем стандартное поведение
                TextInputation();
            }
        }
    });

    // Исправление для фокусировки полей на мобильных устройствах
    const inputs = document.querySelectorAll('input[type="text"]');
    inputs.forEach(input => {
        input.addEventListener('focus', () => {
            input.scrollIntoView({ behavior: "smooth", block: "center" });
        });
    });
})();