Ygg research Helper

17/04/2025 11:55:41

// ==UserScript==
// @name        Ygg research Helper
// @namespace   https://greasyfork.org/fr/users/11667-hoax017
// @match       https://www.yggtorrent.top/engine/search*
// @match       https://www.yggtorrent.top/torrent/filmvideo/film/*
// @match       https://www.yggtorrent.top/torrent/filmvideo/serie-tv/*
// @match       https://www.yggtorrent.top/torrent/filmvid%C3%A9o/s%C3%A9rie-tv/*
// @match       https://www.yggtorrent.top/torrent/filmvid%C3%A9o/film/*
// @grant       none
// @license     MIT 
// @version     1.0
// @author      Hoax017
// @description 17/04/2025 11:55:41
// ==/UserScript==

// Création d'un bouton
const createLink = (name, color) => {
  switch (color) {
    case "green":
      color = '#3eeb69'
      break;
    case "blue":
    default:
      color = '#007BFF'
      break;
  }
  const buttonLink = document.createElement('a');
  buttonLink.textContent = name; // Texte du bouton

  // Applique le style directement via JavaScript
  buttonLink.style.display = 'inline-block';
  buttonLink.style.float = 'right';
  buttonLink.style.backgroundColor = color;
  buttonLink.style.maxWidth = '90%';
  buttonLink.style.margin = '15px auto';
  buttonLink.style.display = 'block';
  buttonLink.style.borderRadius = '25px';
  buttonLink.style.padding = '15px';
  buttonLink.style.textTransform = 'uppercase';
  buttonLink.style.color = '#fff';
  buttonLink.style.fontSize = '13px';
  buttonLink.style.fontWeight = '700'
  // Ajoute un effet hover
  buttonLink.addEventListener('mouseover', () => {
      buttonLink.style.backgroundColor = '#0056b3';
  });
  buttonLink.addEventListener('mouseout', () => {
      buttonLink.style.backgroundColor = color;
  });
  return buttonLink
}

function getNameFromTorrent(name) {
  if (!name) return null
	const regex = /(.*)[(. ](\d{4}|S\d{2}(E\d{2,})?|COMPLETE|iNTEGRALE)[. )]/igm;
	return regex.exec(name)?.[1].replaceAll(".", " ")
}

function getSeason(name) {
  if (!name) return false
  regex2 = /[. ](S(\d{2})(E(\d{2,}))?)|(COMPLETE)|(iNTEGRALE)[. ]/i;
  const result = regex2.exec(name)?.map(e => e?.toLowerCase() === "complete" || e?.toLowerCase() === "integrale" ? true : parseInt(e)) || []
  console.log(result)
  const [,,season,, episode,complete, integrale] = result
  return isNaN(season) && !complete && !integrale ? false : {complete: complete || integrale, season, episode}
}


const arrayNonEmpty = (arr) => arr?.length ? arr : undefined

const params = new URLSearchParams(document.location.search);
// Liste des paramètres de requête à ajouter

const quality_1080 = [8, 12, 17, 21]
const quality_2160 = [2, 9, 13,  18,  22]

const torrentName = document.querySelector("#title > h1:nth-child(1)")?.innerText
const seasonInfo = getSeason(torrentName);
console.info("Info season", seasonInfo)
const queryParams = {
    name: params.get("name") || getNameFromTorrent(torrentName),
    do: "search",
    category: params.get("category") || 2145,
    sub_category: params.get("sub_category") || (seasonInfo ? 2184 : (torrentName ? 2183 : 'all')),
    'option_langue:multiple[]': [4, 2, 6, 5],
    'option_qualite[]': [2, 8, 9, 12, 13, 17, 18, 21, 22],
    'option_saison[]': arrayNonEmpty(params.getAll("option_saison[]")) || (seasonInfo ? seasonInfo.complete ?  1 : (seasonInfo.season === 0 ? 2 : seasonInfo.season + 3 ): null),
    'option_episode[]': arrayNonEmpty(params.getAll("option_episode[]")) || (seasonInfo ? seasonInfo.episode + 1 : null),
    order: "asc",
    sort: "size"
}
if (!queryParams['option_saison[]']) delete queryParams['option_saison[]']
if (!queryParams['option_episode[]']) delete queryParams['option_episode[]']
console.log({queryParams})

const url = new URL(window.location.origin + '/engine/search');

const ref = document.querySelector("tr td.alone") || document.querySelector("a.butt").parentElement

const buttonLink = createLink("1080")
buttonLink.href = url + `?${new URLSearchParams({...queryParams, 'option_qualite[]': quality_1080 })}`
ref.appendChild(buttonLink);

const buttonLink2 = createLink("2160")
buttonLink2.href = url + `?${new URLSearchParams({...queryParams, 'option_qualite[]': quality_2160 })}`
ref.appendChild(buttonLink2);

const buttonLink3 = createLink("HD")
buttonLink3.href = url + `?${new URLSearchParams(queryParams)}`
ref.appendChild(buttonLink3);

if (seasonInfo?.episode){
  const button = createLink(`EP ${seasonInfo.episode + 1}`, "green")
  button.href = url + `?${new URLSearchParams({...queryParams, 'option_episode[]': seasonInfo.episode + 2 })}`
  ref.appendChild(button);
}
if (seasonInfo.season) {
  const button = createLink("Other EP" , "green")
  tmp = {...queryParams }
  delete tmp['option_episode[]']
  button.href = url + `?${new URLSearchParams(tmp)}`
  ref.appendChild(button);
  const button2 = createLink("Saison" , "green")
  button2.href = url + `?${new URLSearchParams({...queryParams, 'option_episode[]': 1 })}`
  ref.appendChild(button2);
}
if (seasonInfo.complete) {
  const button = createLink("Serie" , "green")
  button.href = url + `?${new URLSearchParams({...queryParams, 'option_saison[]': 1 })}`
  ref.appendChild(button);
}
if (seasonInfo?.episode){
  const button = createLink(`EP ${seasonInfo.episode - 1}`, "green")
  button.href = url + `?${new URLSearchParams({...queryParams, 'option_episode[]': seasonInfo.episode })}`
  ref.appendChild(button);

}