AutoHideLZT1

Автоматически добавляет хайд при отправке сообщений на сайтах зеленка и лолз, отправляет сообщение по Enter.

// ==UserScript==
// @name         AutoHideLZT1
// @namespace    http://tampermonkey.net/
// @version      1.11
// @description  Автоматически добавляет хайд при отправке сообщений на сайтах зеленка и лолз, отправляет сообщение по Enter.
// @author       naithy & eretly & Timka241
// @match        https://zelenka.guru/*
// @match        https://lolz.guru/*
// @match        https://lolz.live/*
// @icon         https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQ6P-us9TBOHABul4NCBuCWU6_W-b1DA_8YmA&s
// @grant        none
// @license      MIT
// ==/UserScript==

(function () {
  "use strict";

  // Флаг для отслеживания отправки сообщения
  let isSending = false;

  // Статичные ID по умолчанию
  const exceptIds = "7202560, 7749892, 84800, 3812139";

  function xfAlert(text) {
    return XenForo.alert(text, "", timeout);
  }

  // Функция для добавления [exceptids=ID] и [/exceptids] к тексту
  function modifyMessageInput(inputElement) {
    if (!inputElement) {
      return;
    }

    const currentText = inputElement.innerHTML.trim();
    if (!currentText.startsWith(`[exceptids=${exceptIds}]`)) {
      inputElement.innerHTML =
        `[exceptids=${exceptIds}]` + currentText + `[/exceptids]`;
    }
  }

  // Функция для обработки нажатия клавиши Enter
  function handleEnterKey(event) {
    if (!(event.key === "Enter" || event.keyCode === 13) || event.shiftKey) {
      return;
    }
    event.preventDefault(); // Предотвращаем стандартное поведение
    event.stopPropagation(); // Останавливаем дальнейшую обработку события

    const inputElement = document.querySelector(
      '.fr-element.fr-view[contenteditable="true"]:focus'
    );
    if (!inputElement) {
      return;
    }

    const messageText = inputElement.innerHTML.trim();
    console.log("Текст сообщения:", messageText); // Логируем текст сообщения

    // Проверка на пустое сообщение
    if (messageText === "") {
      xfAlert("Введите корректное сообщение"); // Предупреждение, если сообщение пустое
      return; // Не отправляем пустое сообщение
    }

    // Проверка на допустимые символы
    const invalidChars = /<script|<\/script>/i; // Пример проверки на недопустимые теги
    if (invalidChars.test(messageText)) {
      xfAlert("Сообщение содержит недопустимые символы или теги.");
      return; // Не отправляем сообщение с недопустимыми символами
    }

    // Проверка, отправляется ли уже сообщение
    if (isSending) {
      return;
    }

    isSending = true; // Установить флаг в true

    modifyMessageInput(inputElement); // Добавляем хайд перед отправкой

    const editorBoxElement = inputElement.closest(".defEditor");
    if (!editorBoxElement) {
      xfAlert("Не найден элемент редактора");
      return;
    }

    const sendButton = editorBoxElement.querySelector(
      ".lzt-fe-se-sendMessageButton, .button.primary.mbottom"
    );
    console.log(sendButton);
    if (sendButton) {
      console.log("Отправка сообщения..."); // Логируем отправку
      sendButton.click(); // Симулируем клик по кнопке отправки
    }

    // Сброс флага после небольшой задержки
    setTimeout(() => {
      isSending = false;
    }, 100); // Задержка
  }

  // Добавляем обработчик нажатия клавиши Enter
  document.addEventListener("keydown", handleEnterKey, true);

  // Блокируем Enter в текстовых полях и текстовых областях
  const inputs = document.querySelectorAll(
    'input[type="text"], input[type="submit"], textarea'
  );
  inputs.forEach((input) => {
    input.addEventListener("keydown", handleEnterKey, true);
  });

  // Обработчик для кнопок отправки
  document.addEventListener("click", function (event) {
    const button = event.target;
    if (
      button.classList.contains("lzt-fe-se-sendMessageButton") ||
      (button.classList.contains("button") &&
        button.classList.contains("primary") &&
        button.classList.contains("mbottom"))
    ) {
      const editorBoxElement = button.closest(".defEditor");
      if (!editorBoxElement) {
        xfAlert("Не найден элемент редактора");
        return;
      }

      const inputElement = editorBoxElement.querySelector(
        '.fr-element.fr-view[contenteditable="true"]'
      );

      modifyMessageInput(inputElement); // Добавляем хайд перед отправкой
    }
  });
})();