хелпер который помогает определить популярность карты на сайте astars.club
当前为
// ==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);
})();