astars.club Auto Helper

хелпер который помогает определить популярность карты на сайте astars.club

2025/01/19のページです。最新版はこちら。

このスクリプトの質問や評価の投稿はこちら通報はこちらへお寄せください。
// ==UserScript==
// @name         astars.club Auto Helper
// @namespace    astars.club
// @version      1.0
// @description  хелпер который помогает определить популярность карты на сайте astars.club
// @author       astars lover
// @match        https://astars.club/cards/pack/
// @license MIT
// @grant        none


// ==/UserScript==

// Функция для проверки наличия дива и добавления кнопки
function checkAndAddButton() {
    const lootboxTitleDiv = document.querySelector('.lootbox__title');

    if (lootboxTitleDiv && !document.querySelector('#fetchLinksButton')) {
        const button = document.createElement('button');
        button.id = 'fetchLinksButton';
        button.innerText = 'Обновить количество ссылок';
        button.style.marginTop = '10px';
        button.addEventListener('click', fetchAndAddIcons);
        lootboxTitleDiv.appendChild(button);
    }
}

// Функция для получения данных и добавления иконок
// Функция для проверки наличия дива и добавления кнопки
function checkAndAddButton() {
    const lootboxTitleDiv = document.querySelector('.lootbox__title');

    if (lootboxTitleDiv && !document.querySelector('#fetchLinksButton')) {
        const button = document.createElement('button');
        button.id = 'fetchLinksButton';
        button.innerText = 'Обновить количество ссылок';
        button.style.marginTop = '10px';
        button.addEventListener('click', fetchAndAddIcons);
        lootboxTitleDiv.appendChild(button);
    }
}

// Функция для получения данных и добавления иконок
async function fetchAndAddIcons() {
    const cards = document.querySelectorAll('.trade__main-item');

    for (const card of cards) {
        const cardId = card.getAttribute('data-id');
        if (!cardId) continue;

        try {
            // Получение количества "Желающих"
            const needResponse = await fetch(`https://astars.club/cards/${cardId}/users/need/`);
            let needCount = 0;
            if (needResponse.ok) {
                const needHtml = await needResponse.text();
                const needDoc = new DOMParser().parseFromString(needHtml, 'text/html');
                needCount = needDoc.querySelectorAll('.profile__friends-item').length;

                // Проверяем наличие пагинации и умножаем количество ссылок
                const pagination = needDoc.querySelector('.pagination__pages');
                if (pagination) {
                    const lastPageLink = pagination.querySelector('a:last-of-type');
                    const totalPages = lastPageLink ? parseInt(lastPageLink.innerText, 10) : 1;
                    if (totalPages > 1) {
                        needCount = needCount + ((totalPages - 1) * 35);
                    }
                }
            }

            // Получение количества "Готовых поменять"
            const tradeResponse = await fetch(`https://astars.club/cards/${cardId}/users/trade/`);
            let tradeCount = 0;
            if (tradeResponse.ok) {
                const tradeHtml = await tradeResponse.text();
                const tradeDoc = new DOMParser().parseFromString(tradeHtml, 'text/html');
                tradeCount = tradeDoc.querySelectorAll('.profile__friends-item').length;

                // Проверяем наличие пагинации и умножаем количество ссылок
                const pagination = tradeDoc.querySelector('.pagination__pages');
                if (pagination) {
                    const lastPageLink = pagination.querySelector('a:last-of-type');
                    const totalPages = lastPageLink ? parseInt(lastPageLink.innerText, 10) : 1;
                    if (totalPages > 1) {
                        tradeCount = tradeCount + ((totalPages - 1) * 35);
                    }
                }
            }

            // Получение популярности и ранга
            const popularityResponse = await fetch(`https://astars.club/cards/${cardId}/users/`);
            let popularityCount = 0;
            let rankText = '';
            if (popularityResponse.ok) {
                const popularityHtml = await popularityResponse.text();
                const popularityDoc = new DOMParser().parseFromString(popularityHtml, 'text/html');
                popularityCount = popularityDoc.querySelectorAll('.card-show__owner').length;

                // Проверяем наличие пагинации и умножаем количество владельцев
                const pagination = popularityDoc.querySelector('.pagination__pages');
                if (pagination) {
                    const lastPageLink = pagination.querySelector('a:last-of-type');

                    const totalPages = lastPageLink ? parseInt(lastPageLink.innerText, 10) : 1;
                    if (totalPages > 1) {
                        popularityCount = popularityCount + ((totalPages - 1) * 35);
                    }
                }

                // Получение ранга
                const rankElement = popularityDoc.querySelector('.anime-cards__rank');
                if (rankElement) {
                    rankText = rankElement.textContent.trim();
                }
            }

            // Удаляем предыдущую иконку, если она есть
            let existingIcon = card.querySelector('.link-icon');
            if (existingIcon) {
                existingIcon.remove();
            }

            // Добавляем иконку с количеством ссылок и "Готовы поменять"
            const icon = document.createElement('div');
            icon.className = 'link-icon';
            icon.style.position = 'absolute';
            icon.style.top = '5px';
            icon.style.right = '5px';
            icon.style.backgroundColor = 'rgba(0, 0, 0, 0.7)';
            icon.style.color = 'white';
            icon.style.padding = '5px';
            icon.style.borderRadius = '5px';
            icon.style.fontSize = '12px';
            icon.innerHTML = `Ранг: ${rankText}<br>Уже имеют: ${popularityCount}<br>Хотят получить: ${needCount}<br>Готовы поменять: ${tradeCount}`;

            card.style.position = 'relative'; // Для позиционирования иконки
            card.appendChild(icon);
        } catch (error) {
            console.error(`Ошибка обработки карточки ${cardId}:`, error);
        }
    }
}

(function() {
    'use strict';

    // Проверяем наличие дива каждые 5 секунд
    setInterval(checkAndAddButton, 5000);
})();
长期地址
遇到问题?请前往 GitHub 提 Issues,或加Q群1031348184

赞助商

Fishcpy

广告

Rainyun

注册一下就行

Rainyun

一年攒够 12 元