Загрузка...

Идеи для дополнений — общая тема

Тема в разделе Дополнения создана пользователем umikud 26 мар 2025. (поднята 11 апр 2025) 523 просмотра

Загрузка...
  1. umikud
    umikud Автор темы 26 мар 2025 3319 24 дек 2021


    1. Идея не должна нарушать правила форума, а также правила данного раздела.
    2. Предлагаемое дополнение не должно дублировать уже существующие решения в этом разделе — убедитесь, что аналогичной реализации ещё нет.
    3. Идея должна быть реализуема в рамках пользовательского дополнения, а не касаться внутреннего устройства форума. Для таких предложений существует отдельный раздел с предложениями.


    Шаблон для оформления:
    1. Название
    2. Суть идеи: Что должно делать дополнение?
    3. Зачем это нужно: Какую проблему решает или что упрощает?
    4. Как можно реализовать: userScripts, Расширение, Телеграм-Бот (если знаете)
    5. Куда применяется: На какие страницы форума или процессы влияет (профиль, темы, сообщения и т.д.).

    1. Поиск мультиаккаунтов по общим IP
    2. Создать дополнение, которое будет автоматически анализировать общие IP-адреса пользователей и визуально отмечать возможные мультиаккаунты прямо в профилях или на других страницах.
    3. Упрощает модерацию, экономит время
    4. Userscript
    5. Профили пользователей, мини-профили при наведении, список пользователей онлайн.​


    Для разработчиков:
    Если вы реализовали какую-то идею — прикрепите ссылку на дополнение в ответ на сообщение с идеей.

    Сообщение не по форме - удаление/баллы
     
    26 мар 2025 Изменено
    1. Посмотреть предыдущие комментарии (3)
    2. Filadelfi
      umikud, Можно дополнение про сигны на члене?
    3. MeloniuM
      umikud, раньше приходилось мониторить предложения для форума чтобы их реализовать в виде дополнений. Хорошая идея была выделить это в отдельную тему раздела :thumbsup:
  2. klopybrittan
    klopybrittan 26 мар 2025 :love2: TRX&ENERGY(FROM 100₽/66.000) - lzt.lol/tr2x :love2: 10 995 23 окт 2020
    1. Убийца накрутчиков
    2. Дополнение будет добавлять кнопку, которая будет сортировать участников в розыгрыше не как сейчас по дате реги участника, а по моменту когда он проучаствовал
    3. Это помогает отсеять всех кто проучастовал с ау в розыгрыше и помогает в поиске тех кто специально накрутил симпатии для участия в розыгрыше
    4. Расширение
    5. Розыгрыши
     
    26 мар 2025 Изменено
    1. Посмотреть предыдущие комментарии (8)
    2. Победилдо
      klopybrittan, держи костыльную Bерсию, каждую страницу Bручную смотреть надо, но уже удобнее
      Снизу отображаются ласт участия
      смотреть тут, например https://lolz.live/threads/8495486/contest-users

      Код
      // ==UserScript==
      // @name Lolz.live Contest Sorter (100% Working)
      // @namespace http://tampermonkey.net/
      // @version 1.2
      // @description Надежный сбор и сортировка участников конкурса
      // @author Your Name
      // @match https://lolz.live/threads/*/contest-users*
      // @grant none
      // ==/UserScript==

      (function() {
      'use strict';

      // Ждем полной загрузки страницы
      setTimeout(function() {
      createInterface();
      }, 1000);

      function createInterface() {
      // Проверяем, есть ли уже наша кнопка
      if (document.getElementById('contestSorterBtn')) return;

      // Создаем кнопку
      const btn = document.createElement('button');
      btn.id = 'contestSorterBtn';
      btn.textContent = 'Сортировать участников';
      btn.style = `
      background: #4CAF50;
      color: white;
      border: none;
      padding: 10px 15px;
      border-radius: 4px;
      font-weight: bold;
      cursor: pointer;
      margin: 10px;
      position: fixed;
      top: 20px;
      right: 20px;
      z-index: 9999;
      `;

      // Создаем статус
      const status = document.createElement('div');
      status.id = 'contestSorterStatus';
      status.style = `
      position: fixed;
      top: 60px;
      right: 20px;
      background: white;
      padding: 10px;
      border-radius: 4px;
      box-shadow: 0 0 10px rgba(0,0,0,0.2);
      z-index: 9998;
      max-width: 300px;
      `;

      document.body.appendChild(btn);
      document.body.appendChild(status);

      btn.addEventListener('click', startProcessing);
      }

      async function startProcessing() {
      const btn = document.getElementById('contestSorterBtn');
      const status = document.getElementById('contestSorterStatus');

      btn.disabled = true;
      status.innerHTML = 'Начинаем сбор участников...';

      try {
      // Собираем всех участников
      const allUsers = await getAllUsers();

      if (allUsers.length === 0) {
      status.innerHTML = 'Участники не найдены. Проверьте структуру страницы.';
      return;
      }

      // Сортируем по времени
      allUsers.sort((a, b) => a.timestamp - b.timestamp);

      // Показываем результаты
      showResults(allUsers);

      } catch (error) {
      console.error('Ошибка:', error);
      status.innerHTML = 'Ошибка: ' + error.message;
      } finally {
      btn.disabled = false;
      }
      }

      async function getAllUsers() {
      const status = document.getElementById('contestSorterStatus');
      const users = [];
      let page = 1;
      let hasMore = true;
      const baseUrl = window.location.href.split('?')[0];

      // Сначала собираем с текущей страницы
      users.push(...getUsersFromPage(document));

      // Затем проверяем другие страницы
      while (hasMore) {
      status.innerHTML = `Проверяем страницу ${page}...`;

      const nextPageUrl = `${baseUrl}/contest-users?page=${page + 1}`;
      const pageExists = await checkPageExists(nextPageUrl);

      if (!pageExists) break;

      const nextPageHtml = await fetchPage(nextPageUrl);
      const nextPageDoc = new DOMParser().parseFromString(nextPageHtml, 'text/html');
      users.push(...getUsersFromPage(nextPageDoc));

      page++;
      }

      return users;
      }

      function getUsersFromPage(doc) {
      return Array.from(doc.querySelectorAll('li.primaryContent.memberListItem')).map(item => {
      const timeElement = item.querySelector('.DateTime');
      const usernameElement = item.querySelector('.username span');

      return {
      html: item.outerHTML,
      timestamp: timeElement ? parseInt(timeElement.dataset.time) : 0,
      username: usernameElement ? usernameElement.textContent.trim() : 'Без имени'
      };
      });
      }

      async function checkPageExists(url) {
      try {
      const response = await fetch(url, { method: 'HEAD' });
      return response.ok;
      } catch {
      return false;
      }
      }

      async function fetchPage(url) {
      const response = await fetch(url);
      return await response.text();
      }

      function showResults(users) {
      const status = document.getElementById('contestSorterStatus');
      status.innerHTML = `Найдено участников: ${users.length}. Создаем список...`;

      // Создаем контейнер для результатов
      const resultsContainer = document.createElement('div');
      resultsContainer.id = 'contestSorterResults';
      resultsContainer.style = `
      position: fixed;
      top: 100px;
      right: 20px;
      bottom: 20px;
      width: 400px;
      background: white;
      overflow-y: auto;
      padding: 20px;
      box-shadow: 0 0 20px rgba(0,0,0,0.3);
      z-index: 9997;
      `;

      // Добавляем заголовок
      const title = document.createElement('h3');
      title.textContent = `Отсортированные участники (${users.length})`;
      resultsContainer.appendChild(title);

      // Добавляем список
      const list = document.createElement('div');
      list.style.marginTop = '10px';

      users.forEach((user, index) => {
      const userElement = document.createElement('div');
      userElement.style.marginBottom = '15px';
      userElement.style.padding = '10px';
      userElement.style.border = '1px solid #eee';
      userElement.style.borderRadius = '4px';

      // Обновляем номер в HTML
      const updatedHtml = user.html.replace(/Номер: \d+/, `Номер: ${index + 1}`);
      userElement.innerHTML = updatedHtml;

      list.appendChild(userElement);
      });

      resultsContainer.appendChild(list);
      document.body.appendChild(resultsContainer);

      // Добавляем кнопку закрытия
      const closeBtn = document.createElement('button');
      closeBtn.textContent = 'Закрыть';
      closeBtn.style = `
      position: fixed;
      top: 120px;
      right: 30px;
      background: #f44336;
      color: white;
      border: none;
      padding: 5px 10px;
      border-radius: 4px;
      cursor: pointer;
      z-index: 9999;
      `;
      closeBtn.onclick = () => {
      document.body.removeChild(resultsContainer);
      document.body.removeChild(closeBtn);
      };
      document.body.appendChild(closeBtn);

      status.innerHTML = `Сортировка завершена. Найдено ${users.length} участников.`;
      }
      })();
      26 мар 2025 Изменено
  3. Ягода
    Ягода 5 апр 2025 Twitch party - новости twitch 24 430 29 июн 2019
    1. Отображение переводов на маркет на стриме
    2. Суть идеи: должно выводить на стрим сумму ник и комментарий отправившего деньги
    3. Зачем это нужно: Удобно читать донаты не заходя на форум
    4. Как можно реализовать: без понятия
    5. Куда применяется:маркет
     
    1. Посмотреть предыдущие комментарии (5)
  4. kusyaka
    kusyaka 12 апр 2025 гость визитор visitor v1s1t0r в4з4т0р [] v1s170r Bu3uTOP 12 971 25 апр 2022
    1. Название: ???
    2. Суть идеи: дополнение позволяет редактировать профиль так, как только это возможно. то есть, будет возможность замены аватарки, статуса, уника (полностью), описания профиля и закрепа. также, ко всему этому, будет сохранение пресетов того, что вы сделали. также, должна быть полная поддержка мини профиля (если вы вставили фон, то можно будет настроить его видимость в мини профиле)

    если что, уник будет виден только тогда, когда вы используете это расширение в случае редактирования профиля. в темах он виден не будет, при обычном нахождении в своём профиле также. поэтому это никакой не халявный уник
    3. Зачем это нужно: будет полезно для тех, кто хочет попробовать использовать разные варианты оформления профиля без покупки нескольких уников и т.п. (мне как раз и надо)
    4. Как можно реализовать: как вам удобно, я в этом не сильно разбираюсь
    5. Куда применяется: профиль и возможно сообщения
     
    12 апр 2025 Изменено
  5. Ягода
    Ягода 5 июн 2025 в 09:29 Twitch party - новости twitch 24 430 29 июн 2019
    1 антиоффтопик

    2. Удалять все сообщения в оффтопике, в т.ч вновь написанные
    3 не надо сидеть и часами удалять старый бред руками
    4. Без разницы
    5. Оффтопик
     
    1. Посмотреть предыдущие комментарии (4)
    2. Ягода
      umikud, это темы, а мне нужны сообщения
Top