theYNC.com Underground bypass

Watch theYNC Underground videos without needing an account

Tính đến 11-12-2024. Xem phiên bản mới nhất.

// ==UserScript==
// @name        theYNC.com Underground bypass
// @description Watch theYNC Underground videos without needing an account
// @namespace   Violentmonkey Scripts
// @match       https://theync.com/*
// @match       https://theync.net/*
// @match       https://theync.org/*
// @grant       none
// @version     1.4
// @license MIT
// @author      -
// ==/UserScript==
function getTheYNCVideoURL(url) {
  for (const [, group_url] of url.matchAll(
    /https:\/\/theync.com\/media\/thumbs\/(.*?)\.[a-zA-Z0-9_.-]*\//gm
  )) {
    return `https://media.theync.com/videos/${group_url}.mp4`;
  }
}
function waitForElm(selector) {
  return new Promise((resolve) => {
    if (document.querySelector(selector)) {
      return resolve(document.querySelector(selector));
    }
    const observer = new MutationObserver((mutations) => {
      if (document.querySelector(selector)) {
        observer.disconnect();
        resolve(document.querySelector(selector));
      }
    });

    // If you get "parameter 1 is not of type 'Node'" error, see https://stackoverflow.com/a/77855838/492336
    observer.observe(document.body, {
      childList: true,
      subtree: true
    });
  });
}
waitForElm(".content-block").then((contentBlock) => {
  for (const element of contentBlock.querySelectorAll(
    ".upgrade-profile > .upgrade-info-block"
  )) {
    const thumbnailURL = element.querySelector(
      ".image-block > .image > img"
    ).src;
    if (!thumbnailURL) continue;
    const videoURL = getTheYNCVideoURL(thumbnailURL);
    if (!videoURL) continue;
    location.href = videoURL;
    return;
  }
  for (const element of contentBlock.querySelectorAll(
    ".inner-block > a:has(> .item-info > .border-gold)"
  )) {
    const thumbnailURL = element.querySelector(".image > img").src;
    if (!thumbnailURL) continue;
    const videoURL = getTheYNCVideoURL(thumbnailURL);
    if (!videoURL) continue;
    element.href = getTheYNCVideoURL(thumbnailURL);
  }
});