Загрузка...

UI Автоматизация Утилита Расширение для удобных, быстрых и выгодных обменов в P2P разделе

Тема в разделе Дополнения создана пользователем APT29388 Пятница в 19:34. (поднята Воскресенье в 21:37) 431 просмотр

Загрузка...
  1. APT29388
    APT29388 Автор темы Пятница в 19:34 Лучшие аккаунты тг - lolz.live/threads/8322738/ :admin:
    Вид в сообщениях:
    [IMG]


    Вид в разделе p2p:
    [IMG]

    ----------------​
    [IMG]

    Вид быстрой отправки сообщений с предложением обмена и вид самих отфильтрованных тем:
    [IMG]

    Как поставить?
    1) Качаете Tampermonkey
    2) Включаете режим разработчика в браузере
    3) Нажимаете на него
    4) Нажимаете Создать новый скрипт
    5) Копируете туда скрипт из ссылки (PasteBin)
    6) Файл -> Сохранить
    7) Заходите в раздел P2P
    8) Обновляете страницу


    На данный момент (24.03.25) это самая актуальная версия скрипта, всё под темой - устаревшие версии, но тоже рабочие, правда с урезанным функционалом:


    ЭТО НЕ ОКОНЧАТЕЛЬНАЯ ВЕРСИЯ СКРИПТА, СОВЕТУЮ СЛЕДИТЬ ЗА ЕГО ОБНОВЛЕНИЯМИ, ЧТОБЫ ПОПОЛНИТЬ ДЕП НА 10К, ЗАПУСТИТЬ СКРИПТ И ПОЛУЧАТЬ ПРОФИТ


    Если у вам есть какие то вопросы по его работе, то не стесняйтесь и пишите мне в ТГ - Telegram: APT29388
     
    Пятница в 19:34 Изменено
    1. APT29388 Автор темы
      3645383, момент иметтся
    2. 3645383
      APT29388, написал 700 строчек на жс = говнокодер по твоему, зря ты так :despair: :obdance:
  2. vrodefrik
    ебать спасибо
     
  3. Весть
    uncpfiae пора бы это со стороны форума реализовывать...
     
    1. Посмотреть предыдущие комментарии (2)
    2. Toil
      Весть,
      РайсМорган на нг отвечал, что планируют полностью переделать раздел p2p, но это процесс не быстрый. Мб вместе с этим и сделают все по красоте
    3. Весть
      Toil, я от надёжного источника слышал, что п2п вовсе закроют
  4. APT29388
    APT29388 Автор темы Суббота в 11:08 Лучшие аккаунты тг - lolz.live/threads/8322738/ :admin:
    ОБНОВЛЕНИЕ:
    Добавлены фильтры "от/до" для каждого из направлений обменов и кнопка быстрой отправки предложения обмена

    [IMG]

    JS
    // ==UserScript== // @name P2P Фильтр обменов // @namespace http://tampermonkey.net/ // @version 1.0 // @description P2P // @author APT29388 // @match https://lolz.live/forums/1001/* // @grant none // ==/UserScript== (function() { 'use strict'; const styles = ` .p2p-filter-container { background-color: #1c1c1c; border: 1px solid #242424; border-radius: 10px; padding: 15px; margin-bottom: 15px; color: #d6d6d6; } .p2p-filter-title { font-size: 16px; font-weight: bold; margin-bottom: 10px; color: #00ba78; } .p2p-filter-section { margin-bottom: 15px; } .p2p-filter-section:not(:last-child) { border-bottom: 1px solid #333; padding-bottom: 15px; margin-bottom: 20px; } .p2p-filter-section-title { font-size: 14px; font-weight: bold; margin-bottom: 5px; display: flex; align-items: center; } .p2p-filter-section-title .direction-icon { margin: 0 5px; color: #00ba78; } .p2p-filter-options { display: flex; flex-wrap: wrap; gap: 10px; margin-bottom: 10px; } .p2p-filter-checkbox { display: flex; align-items: center; margin-right: 10px; } .p2p-filter-checkbox input { margin-right: 5px; } .p2p-filter-percent { display: flex; align-items: center; margin-top: 5px; } .p2p-filter-percent input { width: 60px; margin: 0 5px; padding: 5px; background-color: #242424; border: 1px solid #333; color: #d6d6d6; border-radius: 5px; } .p2p-filter-button { background-color: #00ba78; color: #fff; border: none; padding: 8px 15px; border-radius: 5px; cursor: pointer; font-weight: bold; margin-right: 10px; } .p2p-filter-button:hover { background-color: #008c5a; } .p2p-filter-reset { background-color: #444; color: #fff; border: none; padding: 8px 15px; border-radius: 5px; cursor: pointer; font-weight: bold; } .p2p-filter-reset:hover { background-color: #555; } .p2p-highlight { border-left: 3px solid #00ba78 !important; } .p2p-filter-info { font-size: 12px; color: #888; margin-top: 5px; } .p2p-filter-example { background-color: #242424; padding: 5px 10px; border-radius: 5px; margin-top: 5px; font-size: 12px; } .p2p-filter-example-good { color: #00ba78; } .p2p-filter-example-bad { color: #ff5555; text-decoration: line-through; } .p2p-filter-actions { margin-top: 15px; } .p2p-filter-auto-refresh { display: flex; align-items: center; gap: 15px; margin-bottom: 5px; } .p2p-filter-interval { display: flex; align-items: center; } .p2p-filter-interval input { width: 60px; margin: 0 5px; padding: 5px; background-color: #242424; border: 1px solid #333; color: #d6d6d6; border-radius: 5px; } .p2p-filter-button-small { padding: 5px 10px; font-size: 12px; margin-left: 10px; } .p2p-filter-amount { display: flex; align-items: center; margin-top: 10px; gap: 10px; } .p2p-filter-amount input { width: 80px; padding: 5px; background-color: #242424; border: 1px solid #333; color: #d6d6d6; border-radius: 5px; } .quick-offer-button { background-color: #00ba78; color: #fff; border: none; padding: 3px 6px; border-radius: 3px; cursor: pointer; font-size: 11px; margin-right: 5px; display: inline-flex; align-items: center; opacity: 1 !important; transition: background-color 0.2s; } .quick-offer-button:hover { background-color: #008c5a; } .quick-offer-button i { margin-right: 3px; font-size: 10px; } .discussionListItem .controls { opacity: 1 !important; } `; const styleElement = document.createElement('style'); styleElement.textContent = styles; document.head.appendChild(styleElement); const banks = ['Тинькофф', 'СБП', 'Сбербанк', 'Юмани', 'Альфа-Банк']; function getDefaultSettings() { return { marketToBank: true, bankToMarket: true, tinkoff: true, sbp: true, sber: true, yoomoney: true, alpha: true, marketToBankPercent: 5, bankToMarketPercent: 3, autoRefresh: false, refreshInterval: 30, marketToBankMinAmount: 0, marketToBankMaxAmount: 0, bankToMarketMinAmount: 0, bankToMarketMaxAmount: 0 }; } let settings = loadFilterSettings() || getDefaultSettings(); function createFilterHTML() { return ` <div class="p2p-filter-container"> <div class="p2p-filter-title">Фильтр P2P обменов</div> <div class="p2p-filter-section"> <div class="p2p-filter-section-title"> <span>Банк</span> <span class="direction-icon"></span> <span>Маркет (пополнение маркета)</span> </div> <div class="p2p-filter-options" id="bank-to-market"> ${banks.map(bank => ` <div class="p2p-filter-checkbox"> <input type="checkbox" id="bank-to-${bank.toLowerCase().replace(/\s+/g, '-')}" value="${bank}"> <label for="bank-to-${bank.toLowerCase().replace(/\s+/g, '-')}">${bank}</label> </div> `).join('')} </div> <div class="p2p-filter-percent"> <label for="bank-to-market-percent">Максимальный процент:</label> <input type="number" id="bank-to-market-percent" value="3" min="-10" max="20" step="0.5"> <span>%</span> </div> <div class="p2p-filter-amount"> <label for="bank-to-market-min-amount">Сумма от:</label> <input type="number" id="bank-to-market-min-amount" value="0" min="0"> <label for="bank-to-market-max-amount">до:</label> <input type="number" id="bank-to-market-max-amount" value="0" min="0"> <span class="p2p-filter-info">(0 = без ограничений)</span> </div> </div> <div class="p2p-filter-section"> <div class="p2p-filter-section-title"> <span>Маркет</span> <span class="direction-icon"></span> <span>Банк (вывод с маркета)</span> </div> <div class="p2p-filter-options" id="market-to-bank"> ${banks.map(bank => ` <div class="p2p-filter-checkbox"> <input type="checkbox" id="market-to-${bank.toLowerCase().replace(/\s+/g, '-')}" value="${bank}"> <label for="market-to-${bank.toLowerCase().replace(/\s+/g, '-')}">${bank}</label> </div> `).join('')} </div> <div class="p2p-filter-percent"> <label for="market-to-bank-percent">Минимальный процент:</label> <input type="number" id="market-to-bank-percent" value="5" min="0" max="20" step="0.5"> <span>%</span> </div> <div class="p2p-filter-amount"> <label for="market-to-bank-min-amount">Сумма от:</label> <input type="number" id="market-to-bank-min-amount" value="0" min="0"> <label for="market-to-bank-max-amount">до:</label> <input type="number" id="market-to-bank-max-amount" value="0" min="0"> <span class="p2p-filter-info">(0 = без ограничений)</span> </div> </div> <div class="p2p-filter-section"> <div class="p2p-filter-section-title"> <span>Автообновление ленты</span> </div> <div class="p2p-filter-auto-refresh"> <div class="p2p-filter-checkbox"> <input type="checkbox" id="auto-refresh-enabled"> <label for="auto-refresh-enabled">Включить автообновление</label> </div> <div class="p2p-filter-interval"> <label for="auto-refresh-interval">Интервал (сек):</label> <input type="number" id="auto-refresh-interval" value="30" min="5" max="300" step="1"> </div> <button id="save-auto-refresh" class="p2p-filter-button p2p-filter-button-small">Сохранить</button> </div> <div class="p2p-filter-info"> Автоматически нажимает кнопку "Обновить ленту" с указанным интервалом </div> </div> <div class="p2p-filter-actions"> <button id="apply-filter" class="p2p-filter-button">Применить фильтр</button> <button id="reset-filter" class="p2p-filter-reset">Сбросить</button> </div> </div> `; } function checkThreadMatchesFilter( threadTitle, selectedBanksMarketToBank, selectedBanksBankToMarket, marketToBankPercent, bankToMarketPercent, marketToBankMinAmount, marketToBankMaxAmount, bankToMarketMinAmount, bankToMarketMaxAmount ) { let marketAmount = null; let bankAmount = null; let direction = null; const bracketMatch = threadTitle.match(/\[(\d+(?:[.,]\d+)?)\s*(?:RUB|р|₽)\s*>\s*(\d+(?:[.,]\d+)?)\s*(?:RUB|р|₽)\]/i); const marketToBankMatch = threadTitle.match(/(?:Маркет|Market|LZT|Lolz)\s*(?:>|→|-)\s*(Тинькофф|СБП|Сбербанк|Юмани|Альфа-Банк|Tinkoff|Sberbank|Yoomoney|Alfa)/i); const bankToMarketMatch = threadTitle.match(/(Тинькофф|СБП|Сбербанк|Юмани|Альфа-Банк|Tinkoff|Sberbank|Yoomoney|Alfa)\s*(?:>|→|-)\s*(?:Маркет|Market|LZT|Lolz)/i); if (marketToBankMatch) { direction = 'market-to-bank'; const bank = marketToBankMatch[1]; const bankMatches = selectedBanksMarketToBank.some(selectedBank => bank.toLowerCase().includes(selectedBank.toLowerCase()) || selectedBank.toLowerCase().includes(bank.toLowerCase()) ); if (!bankMatches || selectedBanksMarketToBank.length === 0) { return false; } if (bracketMatch) { const firstAmount = parseFloat(bracketMatch[1].replace(',', '.')); const secondAmount = parseFloat(bracketMatch[2].replace(',', '.')); marketAmount = firstAmount; bankAmount = secondAmount; const percent = (marketAmount - bankAmount) / (marketAmount / 100); if ((marketToBankMinAmount > 0 || marketToBankMaxAmount > 0) && marketAmount) { if (marketToBankMinAmount > 0 && marketAmount < marketToBankMinAmount) { return false; } if (marketToBankMaxAmount > 0 && marketAmount > marketToBankMaxAmount) { return false; } } return percent >= marketToBankPercent; } return true; } else if (bankToMarketMatch) { direction = 'bank-to-market'; const bank = bankToMarketMatch[1]; const bankMatches = selectedBanksBankToMarket.some(selectedBank => bank.toLowerCase().includes(selectedBank.toLowerCase()) || selectedBank.toLowerCase().includes(bank.toLowerCase()) ); if (!bankMatches || selectedBanksBankToMarket.length === 0) { return false; } if (bracketMatch) { const firstAmount = parseFloat(bracketMatch[1].replace(',', '.')); const secondAmount = parseFloat(bracketMatch[2].replace(',', '.')); bankAmount = firstAmount; marketAmount = secondAmount; const percent = (marketAmount - bankAmount) / (bankAmount / 100); if ((bankToMarketMinAmount > 0 || bankToMarketMaxAmount > 0) && bankAmount) { if (bankToMarketMinAmount > 0 && bankAmount < bankToMarketMinAmount) { return false; } if (bankToMarketMaxAmount > 0 && bankAmount > bankToMarketMaxAmount) { return false; } } return percent <= bankToMarketPercent; } return true; } return false; } function applyFilterToThreads( selectedBanksMarketToBank, selectedBanksBankToMarket, marketToBankPercent, bankToMarketPercent, marketToBankMinAmount, marketToBankMaxAmount, bankToMarketMinAmount, bankToMarketMaxAmount ) { const threads = document.querySelectorAll('.discussionListItem'); threads.forEach(thread => { const titleElement = thread.querySelector('.spanTitle'); if (!titleElement) return; const threadTitle = titleElement.textContent.trim(); const shouldShow = checkThreadMatchesFilter( threadTitle, selectedBanksMarketToBank, selectedBanksBankToMarket, marketToBankPercent, bankToMarketPercent, marketToBankMinAmount, marketToBankMaxAmount, bankToMarketMinAmount, bankToMarketMaxAmount ); if (shouldShow) { thread.style.display = 'block'; thread.classList.add('p2p-highlight'); } else { thread.style.display = 'none'; thread.classList.remove('p2p-highlight'); } }); addQuickOfferButtons(); return threads.length; } function applyFilter() { const selectedBanksMarketToBank = []; const selectedBanksBankToMarket = []; document.querySelectorAll('#market-to-bank input[type="checkbox"]:checked').forEach(checkbox => { selectedBanksMarketToBank.push(checkbox.value); }); document.querySelectorAll('#bank-to-market input[type="checkbox"]:checked').forEach(checkbox => { selectedBanksBankToMarket.push(checkbox.value); }); const marketToBankPercent = parseFloat(document.getElementById('market-to-bank-percent').value); const bankToMarketPercent = parseFloat(document.getElementById('bank-to-market-percent').value); const marketToBankMinAmount = parseInt(document.getElementById('market-to-bank-min-amount').value) || 0; const marketToBankMaxAmount = parseInt(document.getElementById('market-to-bank-max-amount').value) || 0; const bankToMarketMinAmount = parseInt(document.getElementById('bank-to-market-min-amount').value) || 0; const bankToMarketMaxAmount = parseInt(document.getElementById('bank-to-market-max-amount').value) || 0; saveFilterSettings( selectedBanksMarketToBank, selectedBanksBankToMarket, marketToBankPercent, bankToMarketPercent, marketToBankMinAmount, marketToBankMaxAmount, bankToMarketMinAmount, bankToMarketMaxAmount ); applyFilterToThreads( selectedBanksMarketToBank, selectedBanksBankToMarket, marketToBankPercent, bankToMarketPercent, marketToBankMinAmount, marketToBankMaxAmount, bankToMarketMinAmount, bankToMarketMaxAmount ); } function saveFilterSettings( selectedBanksMarketToBank, selectedBanksBankToMarket, marketToBankPercent, bankToMarketPercent, marketToBankMinAmount, marketToBankMaxAmount, bankToMarketMinAmount, bankToMarketMaxAmount ) { const settings = { marketToBank: selectedBanksMarketToBank, bankToMarket: selectedBanksBankToMarket, marketToBankPercent, bankToMarketPercent, marketToBankMinAmount, marketToBankMaxAmount, bankToMarketMinAmount, bankToMarketMaxAmount }; localStorage.setItem('p2pFilterSettings', JSON.stringify(settings)); } function loadFilterSettings() { const settingsJson = localStorage.getItem('p2pFilterSettings'); if (settingsJson) { const settings = JSON.parse(settingsJson); if (settings.marketToBankMinAmount === undefined) { settings.marketToBankMinAmount = 0; } if (settings.marketToBankMaxAmount === undefined) { settings.marketToBankMaxAmount = 0; } if (settings.bankToMarketMinAmount === undefined) { settings.bankToMarketMinAmount = 0; } if (settings.bankToMarketMaxAmount === undefined) { settings.bankToMarketMaxAmount = 0; } return settings; } return null; } function resetFilter() { document.querySelectorAll('.p2p-filter-checkbox input').forEach(checkbox => { checkbox.checked = false; }); document.getElementById('market-to-bank-percent').value = 5; document.getElementById('bank-to-market-percent').value = 3; const threads = document.querySelectorAll('.discussionListItem'); threads.forEach(thread => { thread.style.display = 'block'; thread.classList.remove('p2p-highlight'); }); localStorage.removeItem('p2pFilterSettings'); } function applyFilterSettings(settings) { if (!settings) return; settings.marketToBank.forEach(bank => { const checkbox = document.getElementById(`market-to-${bank.toLowerCase().replace(/\s+/g, '-')}`); if (checkbox) checkbox.checked = true; }); settings.bankToMarket.forEach(bank => { const checkbox = document.getElementById(`bank-to-${bank.toLowerCase().replace(/\s+/g, '-')}`); if (checkbox) checkbox.checked = true; }); document.getElementById('market-to-bank-percent').value = settings.marketToBankPercent; document.getElementById('bank-to-market-percent').value = settings.bankToMarketPercent; applyFilterToThreads( settings.marketToBank, settings.bankToMarket, settings.marketToBankPercent, settings.bankToMarketPercent, settings.marketToBankMinAmount, settings.marketToBankMaxAmount, settings.bankToMarketMinAmount, settings.bankToMarketMaxAmount ); } function autoLoadAllThreads() { return new Promise((resolve) => { const maxScrollAttempts = 30; let scrollAttempts = 0; let noNewThreadsCounter = 0; const checkAllResultsShowing = () => { return document.querySelector('.AllResultsShowing') !== null; }; const scrollDown = () => { window.scrollTo(0, document.body.scrollHeight); }; const checkIfLoading = () => { const loadingIndicator = document.querySelector('.loading'); return loadingIndicator && loadingIndicator.style.display !== 'none'; }; let previousThreadCount = 0; const checkForNewThreads = () => { const currentThreadCount = document.querySelectorAll('.discussionListItem').length; const hasNewThreads = currentThreadCount > previousThreadCount; previousThreadCount = currentThreadCount; return hasNewThreads; }; const loadMoreThreads = () => { scrollAttempts++; if (scrollAttempts > maxScrollAttempts || checkAllResultsShowing()) { console.log('Загрузка завершена, всего тем: ' + previousThreadCount); resolve(); return; } if (checkIfLoading()) { setTimeout(loadMoreThreads, 500); return; } scrollDown(); setTimeout(() => { if (checkForNewThreads()) { noNewThreadsCounter = 0; loadMoreThreads(); } else if (checkIfLoading()) { loadMoreThreads(); } else { noNewThreadsCounter++; if (noNewThreadsCounter >= 3) { console.log('Загрузка завершена после ' + scrollAttempts + ' попыток, всего тем: ' + previousThreadCount); resolve(); } else { setTimeout(loadMoreThreads, 1000); } } }, 1000); }; loadMoreThreads(); }); } let autoRefreshInterval = null; function toggleAutoRefresh() { const isEnabled = document.getElementById('auto-refresh-enabled').checked; const intervalSeconds = parseInt(document.getElementById('auto-refresh-interval').value) || 30; if (autoRefreshInterval) { clearInterval(autoRefreshInterval); autoRefreshInterval = null; } if (isEnabled && intervalSeconds >= 5) { autoRefreshInterval = setInterval(() => { const refreshButton = document.querySelector('.UpdateFeedButton'); if (refreshButton) { if (window.getComputedStyle(refreshButton).display !== 'none') { refreshButton.click(); console.log('Лента обновлена автоматически'); } else { console.log('Кнопка обновления ленты скрыта, пропускаем обновление'); } } else { console.log('Кнопка обновления ленты не найдена'); } }, intervalSeconds * 1000); console.log(`Автообновление ленты включено с интервалом ${intervalSeconds} сек`); } else { console.log('Автообновление ленты выключено'); } saveAutoRefreshSettings(isEnabled, intervalSeconds); } function saveAutoRefreshSettings(isEnabled, intervalSeconds) { localStorage.setItem('p2pAutoRefreshEnabled', isEnabled); localStorage.setItem('p2pAutoRefresh
     
    Суббота в 11:08 Изменено
    1. APT29388 Автор темы
      Прошлая версия, актуальная в закрепе выше
  5. APT29388
    APT29388 Автор темы Суббота в 12:59 Лучшие аккаунты тг - lolz.live/threads/8322738/ :admin:
    ОБНОВЛЕНИЕ:
    Добавлены добавочный текст к предложению обмена и расчёт для тем с CryptoBot
    [IMG]

    JS
    // ==UserScript== // @name Lolz P2P Фильтр обменов // @namespace http://tampermonkey.net/ // @version 1.0 // @description Фильтрация P2P обменов на Lolz.live с возможностью выбора направлений и процентов // @author APT29388 // @match https://lolz.live/forums/1001/* // @grant none // ==/UserScript== (function() { 'use strict'; const styles = ` .p2p-filter-container { background-color: #1c1c1c; border: 1px solid #242424; border-radius: 10px; padding: 15px; margin-bottom: 15px; color: #d6d6d6; } .p2p-filter-title { font-size: 16px; font-weight: bold; margin-bottom: 10px; color: #00ba78; } .p2p-filter-section { margin-bottom: 15px; } .p2p-filter-section:not(:last-child) { border-bottom: 1px solid #333; padding-bottom: 15px; margin-bottom: 20px; } .p2p-filter-section-title { font-size: 14px; font-weight: bold; margin-bottom: 5px; display: flex; align-items: center; } .p2p-filter-section-title .direction-icon { margin: 0 5px; color: #00ba78; } .p2p-filter-options { display: flex; flex-wrap: wrap; gap: 10px; margin-bottom: 10px; } .p2p-filter-checkbox { display: flex; align-items: center; margin-right: 10px; } .p2p-filter-checkbox input { margin-right: 5px; } .p2p-filter-percent { display: flex; align-items: center; margin-top: 5px; } .p2p-filter-percent input { width: 60px; margin: 0 5px; padding: 5px; background-color: #242424; border: 1px solid #333; color: #d6d6d6; border-radius: 5px; } .p2p-filter-button { background-color: #00ba78; color: #fff; border: none; padding: 8px 15px; border-radius: 5px; cursor: pointer; font-weight: bold; margin-right: 10px; } .p2p-filter-button:hover { background-color: #008c5a; } .p2p-filter-reset { background-color: #444; color: #fff; border: none; padding: 8px 15px; border-radius: 5px; cursor: pointer; font-weight: bold; } .p2p-filter-reset:hover { background-color: #555; } .p2p-highlight { border-left: 3px solid #00ba78 !important; } .p2p-filter-info { font-size: 12px; color: #888; margin-top: 5px; } .p2p-filter-example { background-color: #242424; padding: 5px 10px; border-radius: 5px; margin-top: 5px; font-size: 12px; } .p2p-filter-example-good { color: #00ba78; } .p2p-filter-example-bad { color: #ff5555; text-decoration: line-through; } .p2p-filter-actions { margin-top: 15px; } .p2p-filter-auto-refresh { display: flex; align-items: center; gap: 15px; margin-bottom: 5px; } .p2p-filter-interval { display: flex; align-items: center; } .p2p-filter-interval input { width: 60px; margin: 0 5px; padding: 5px; background-color: #242424; border: 1px solid #333; color: #d6d6d6; border-radius: 5px; } .p2p-filter-button-small { padding: 5px 10px; font-size: 12px; margin-left: 10px; } .p2p-filter-amount { display: flex; align-items: center; margin-top: 10px; gap: 10px; } .p2p-filter-amount input { width: 80px; padding: 5px; background-color: #242424; border: 1px solid #333; color: #d6d6d6; border-radius: 5px; } .quick-offer-button { background-color: #00ba78; color: #fff; border: none; padding: 3px 6px; border-radius: 3px; cursor: pointer; font-size: 11px; margin-right: 5px; display: inline-flex; align-items: center; opacity: 1 !important; } .quick-offer-button:hover { background-color: #008c5a; } .quick-offer-button i { margin-right: 0; } .discussionListItem .controls { opacity: 1 !important; } /* Стили для настройки дополнительного текста */ .p2p-filter-custom-message { margin-top: 10px; } .p2p-filter-custom-message textarea { width: 100%; height: 40px; background-color: #242424; border: 1px solid #333; color: #d6d6d6; border-radius: 5px; padding: 5px; margin-top: 5px; resize: vertical; font-size: 12px; line-height: 1.3; } .p2p-filter-custom-message .p2p-filter-button-small { padding: 3px 8px; font-size: 11px; margin-top: 3px; } .p2p-filter-custom-message .p2p-filter-info { font-size: 11px; margin-top: 3px; opacity: 0.8; } `; const styleElement = document.createElement('style'); styleElement.textContent = styles; document.head.appendChild(styleElement); const banks = ['Т-Банк', 'СБП', 'Сбербанк', 'Юмани', 'Альфа-Банк', 'CryptoBot']; function getDefaultSettings() { return { marketToBank: true, bankToMarket: true, tinkoff: true, sbp: true, sber: true, yoomoney: true, alpha: true, marketToBankPercent: 5, bankToMarketPercent: 3, autoRefresh: false, refreshInterval: 30, marketToBankMinAmount: 0, marketToBankMaxAmount: 0, bankToMarketMinAmount: 0, bankToMarketMaxAmount: 0 }; } let settings = loadFilterSettings() || getDefaultSettings(); function createFilterHTML() { return ` <div class="p2p-filter-container"> <div class="p2p-filter-title">Фильтр P2P обменов</div> <div class="p2p-filter-section"> <div class="p2p-filter-section-title"> <span>Банк</span> <span class="direction-icon"></span> <span>Маркет (пополнение маркета)</span> </div> <div class="p2p-filter-options" id="bank-to-market"> ${banks.map(bank => ` <div class="p2p-filter-checkbox"> <input type="checkbox" id="bank-to-${bank.toLowerCase().replace(/\s+/g, '-')}" value="${bank}"> <label for="bank-to-${bank.toLowerCase().replace(/\s+/g, '-')}">${bank}</label> </div> `).join('')} </div> <div class="p2p-filter-percent"> <label for="bank-to-market-percent">Максимальный процент:</label> <input type="number" id="bank-to-market-percent" value="3" min="-10" max="20" step="0.5"> <span>%</span> </div> <div class="p2p-filter-amount"> <label for="bank-to-market-min-amount">Сумма от:</label> <input type="number" id="bank-to-market-min-amount" value="0" min="0"> <label for="bank-to-market-max-amount">до:</label> <input type="number" id="bank-to-market-max-amount" value="0" min="0"> <span class="p2p-filter-info">(0 = без ограничений)</span> </div> </div> <div class="p2p-filter-section"> <div class="p2p-filter-section-title"> <span>Маркет</span> <span class="direction-icon"></span> <span>Банк (вывод с маркета)</span> </div> <div class="p2p-filter-options" id="market-to-bank"> ${banks.map(bank => ` <div class="p2p-filter-checkbox"> <input type="checkbox" id="market-to-${bank.toLowerCase().replace(/\s+/g, '-')}" value="${bank}"> <label for="market-to-${bank.toLowerCase().replace(/\s+/g, '-')}">${bank}</label> </div> `).join('')} </div> <div class="p2p-filter-percent"> <label for="market-to-bank-percent">Минимальный процент:</label> <input type="number" id="market-to-bank-percent" value="5" min="0" max="20" step="0.5"> <span>%</span> </div> <div class="p2p-filter-amount"> <label for="market-to-bank-min-amount">Сумма от:</label> <input type="number" id="market-to-bank-min-amount" value="0" min="0"> <label for="market-to-bank-max-amount">до:</label> <input type="number" id="market-to-bank-max-amount" value="0" min="0"> <span class="p2p-filter-info">(0 = без ограничений)</span> </div> </div> <div class="p2p-filter-section"> <div class="p2p-filter-section-title"> <span>Автообновление ленты</span> </div> <div class="p2p-filter-auto-refresh"> <div class="p2p-filter-checkbox"> <input type="checkbox" id="auto-refresh-enabled"> <label for="auto-refresh-enabled">Включить автообновление</label> </div> <div class="p2p-filter-interval"> <label for="auto-refresh-interval">Интервал (сек):</label> <input type="number" id="auto-refresh-interval" value="30" min="5" max="300" step="1"> </div> <button id="save-auto-refresh" class="p2p-filter-button p2p-filter-button-small">Сохранить</button> </div> <div class="p2p-filter-info"> Автоматически нажимает кнопку "Обновить ленту" с указанным интервалом </div> </div> <div class="p2p-filter-section"> <div class="p2p-filter-section-title"> <span>Текст сообщения</span> </div> <div class="p2p-filter-custom-message"> <label for="custom-message-text">Дополнительный текст:</label> <textarea id="custom-message-text" placeholder="Введите текст, который будет добавлен к стандартному сообщению"></textarea> <div class="p2p-filter-info"> Добавляется после "Здравствуйте, интересует обмен: [ссылка]" </div> <button id="save-custom-message" class="p2p-filter-button p2p-filter-button-small">Сохранить</button> </div> </div> <div class="p2p-filter-actions"> <button id="apply-filter" class="p2p-filter-button">Применить фильтр</button> <button id="reset-filter" class="p2p-filter-reset">Сбросить</button> </div> </div> `; } function checkThreadMatchesFilter( threadTitle, selectedBanksMarketToBank, selectedBanksBankToMarket, marketToBankPercent, bankToMarketPercent, marketToBankMinAmount, marketToBankMaxAmount, bankToMarketMinAmount, bankToMarketMaxAmount ) { let marketAmount = null; let bankAmount = null; let direction = null; const bracketMatch = threadTitle.match(/\[(\d+(?:[.,]\d+)?)\s*(?:RUB|р|₽)\s*>\s*(\d+(?:[.,]\d+)?)\s*(?:RUB|р|₽)\]/i); const marketToBankMatch = threadTitle.match(/(?:Маркет|Market|LZT|Lolz)\s*(?:>|→|-)\s*(Т-Банк|Т\s*Банк|Т-банк|Т\s*банк|СБП|Сбербанк|Юмани|Альфа-Банк|Tinkoff|Sberbank|Yoomoney|Alfa|CryptoBot|Crypto\s*Bot|крипто\s*бот)/i); const bankToMarketMatch = threadTitle.match(/(Т-Банк|Т\s*Банк|Т-банк|Т\s*банк|СБП|Сбербанк|Юмани|Альфа-Банк|Tinkoff|Sberbank|Yoomoney|Alfa|CryptoBot|Crypto\s*Bot|крипто\s*бот)\s*(?:>|→|-)\s*(?:Маркет|Market|LZT|Lolz)/i); if (marketToBankMatch) { direction = 'market-to-bank'; const bank = marketToBankMatch[1]; const bankMatches = selectedBanksMarketToBank.some(selectedBank => { if (selectedBank ===-Банк') { return /Т-Банк|Т\s*Банк|Т-банк|Т\s*банк|Tinkoff/i.test(bank); } if (selectedBank === 'CryptoBot') { return /CryptoBot|Crypto\s*Bot|крипто\s*бот/i.test(bank); } return bank.toLowerCase().includes(selectedBank.toLowerCase()) || selectedBank.toLowerCase().includes(bank.toLowerCase()); }); if (!bankMatches || selectedBanksMarketToBank.length === 0) { return false; } if (bracketMatch) { const firstAmount = parseFloat(bracketMatch[1].replace(',', '.')); const secondAmount = parseFloat(bracketMatch[2].replace(',', '.')); marketAmount = firstAmount; bankAmount = secondAmount; const percent = (marketAmount - bankAmount) / (marketAmount / 100); if ((marketToBankMinAmount > 0 || marketToBankMaxAmount > 0) && marketAmount) { if (marketToBankMinAmount > 0 && marketAmount < marketToBankMinAmount) { return false; } if (marketToBankMaxAmount > 0 && marketAmount > marketToBankMaxAmount) { return false; } } return percent >= marketToBankPercent; } return true; } else if (bankToMarketMatch) { direction = 'bank-to-market'; const bank = bankToMarketMatch[1]; const bankMatches = selectedBanksBankToMarket.some(selectedBank => { if (selectedBank ===-Банк') { return /Т-Банк|Т\s*Банк|Т-банк|Т\s*банк|Tinkoff/i.test(bank); } if (selectedBank === 'CryptoBot') { return /CryptoBot|Crypto\s*Bot|крипто\s*бот/i.test(bank); } return bank.toLowerCase().includes(selectedBank.toLowerCase()) || selectedBank.toLowerCase().includes(bank.toLowerCase()); }); if (!bankMatches || selectedBanksBankToMarket.length === 0) { return false; } if (bracketMatch) { const firstAmount = parseFloat(bracketMatch[1].replace(',', '.')); const secondAmount = parseFloat(bracketMatch[2].replace(',', '.')); bankAmount = firstAmount; marketAmount = secondAmount; const percent = (marketAmount - bankAmount) / (bankAmount / 100); if ((bankToMarketMinAmount > 0 || bankToMarketMaxAmount > 0) && bankAmount) { if (bankToMarketMinAmount > 0 && bankAmount < bankToMarketMinAmount) { return false; } if (bankToMarketMaxAmount > 0 && bankAmount > bankToMarketMaxAmount) { return false; } } return percent <= bankToMarketPercent; } return true; } return false; } function applyFilterToThreads( selectedBanksMarketToBank, selectedBanksBankToMarket, marketToBankPercent, bankToMarketPercent, marketToBankMinAmount, marketToBankMaxAmount, bankToMarketMinAmount, bankToMarketMaxAmount ) { const threads = document.querySelectorAll('.discussionListItem'); threads.forEach(thread => { const titleElement = thread.querySelector('.spanTitle'); if (!titleElement) return; const threadTitle = titleElement.textContent.trim(); const shouldShow = checkThreadMatchesFilter( threadTitle, selectedBanksMarketToBank, selectedBanksBankToMarket, marketToBankPercent, bankToMarketPercent, marketToBankMinAmount, marketToBankMaxAmount, bankToMarketMinAmount, bankToMarketMaxAmount ); if (shouldShow) { thread.style.display = 'block'; thread.classList.add('p2p-highlight'); } else { thread.style.display = 'none'; thread.classList.remove('p2p-highlight'); } }); addQuickOfferButtons(); return threads.length; } function applyFilter() { const selectedBanksMarketToBank = []; const selectedBanksBankToMarket = []; document.querySelectorAll('#market-to-bank input[type="checkbox"]:checked').forEach(checkbox => { selectedBanksMarketToBank.push(checkbox.value); }); document.querySelectorAll('#bank-to-market input[type="checkbox"]:checked').forEach(checkbox => { selectedBanksBankToMarket.push(checkbox.value); }); const marketToBankPercent = parseFloat(document.getElementById('market-to-bank-percent').value); const bankToMarketPercent = parseFloat(document.getElementById('bank-to-market-percent').value); const marketToBankMinAmount = parseInt(document.getElementById('market-to-bank-min-amount').value) || 0; const marketToBankMaxAmount = parseInt(document.getElementById('market-to-bank-max-amount').value) || 0; const bankToMarketMinAmount = parseInt(document.getElementById('bank-to-market-min-amount').value) || 0; const bankToMarketMaxAmount = parseInt(document.getElementById('bank-to-market-max-amount').value) || 0; saveFilterSettings( selectedBanksMarketToBank, selectedBanksBankToMarket, marketToBankPercent, bankToMarketPercent, marketToBankMinAmount, marketToBankMaxAmount, bankToMarketMinAmount, bankToMarketMaxAmount ); applyFilterToThreads( selectedBanksMarketToBank, selectedBanksBankToMarket, marketToBankPercent, bankToMarketPercent, marketToBankMinAmount, marketToBankMaxAmount, bankToMarketMinAmount, bankToMarketMaxAmount ); } function saveFilterSettings( selectedBanksMarketToBank, selectedBanksBankToMarket, marketToBankPercent, bankToMarketPercent, marketToBankMinAmount, marketToBankMaxAmount, bankToMarketMinAmount, bankToMarketMaxAmount ) { const settings = { marketToBank: selectedBanksMarketToBank, bankToMarket: selectedBanksBankToMarket, marketToBankPercent, bankToMarketPercent, marketToBankMinAmount, marketToBankMaxAmount, bankToMarketMinAmount, bankToMarketMaxAmount }; localStorage.setItem('p2pFilterSettings', JSON.stringify(settings)); } function loadFilterSettings() { const settingsJson = localStorage.getItem('p2pFilterSettings'); if (settingsJson) { const settings = JSON.parse(settingsJson); if (settings.marketToBankMinAmount === undefined) { settings.marketToBankMinAmount = 0; } if (settings.marketToBankMaxAmount === undefined) { settings.marketToBankMaxAmount = 0; } if (settings.bankToMarketMinAmount === undefined) { settings.bankToMarketMinAmount = 0; } if (settings.bankToMarketMaxAmount === undefined) { settings.bankToMarketMaxAmount = 0; } return settings; } return null; } function resetFilter() { document.querySelectorAll('.p2p-filter-checkbox input').forEach(checkbox => { checkbox.checked = false; }); document.getElementById('market-to-bank-percent').value = 5; document.getElementById('bank-to-market-percent').value = 3; const threads = document.querySelectorAll('.discussionListItem'); threads.forEach(thread => { thread.style.display = 'block'; thread.classList.remove('p2p-highlight'); }); localStorage.removeItem('p2pFilterSettings'); } function applyFilterSettings(settings) { if (!settings) return; settings.marketToBank.forEach(bank => { const checkbox = document.getElementById(`market-to-${bank.toLowerCase().replace(/\s+/g, '-')}`); if (checkbox) checkbox.check
     
    1. APT29388 Автор темы
      Прошлая версия, актуальная в самой теме
  6. vrodefrik
    +rep, накидал челу идей, все реализовал и очень быстро[IMG][IMG][IMG]
     
  7. Coober
    Coober Сегодня, в 17:19 Мир игра, а я ем пряник 5765 11 апр 2019
    Ну что, пора арбитражником p2p становиться !
    Ждите, дополню отзыв когда по 115 - му ФЗ карту блокнут
     
    1. АртёмАнгел
      Coober, не забудь пополнить депозит на 10к
    2. Coober
  8. Coober
    Coober Сегодня, в 17:43 Мир игра, а я ем пряник 5765 11 апр 2019
    APT29388
    [IMG]

    Как включить эти процентики брат ! Очень надо, бэмвэ куплю )
     
Top
JavaScript error: