Pixeldrain Download Bypass (with zip file content support)

Bypass Pixeldrain Download Limit

Você precisará instalar uma extensão como Tampermonkey, Greasemonkey ou Violentmonkey para instalar este script.

Você precisará instalar uma extensão como Tampermonkey ou Violentmonkey para instalar este script.

Você precisará instalar uma extensão como Tampermonkey ou Violentmonkey para instalar este script.

Você precisará instalar uma extensão como Tampermonkey ou Userscripts para instalar este script.

Você precisará instalar uma extensão como o Tampermonkey para instalar este script.

Você precisará instalar um gerenciador de scripts de usuário para instalar este script.

(Eu já tenho um gerenciador de scripts de usuário, me deixe instalá-lo!)

Você precisará instalar uma extensão como o Stylus para instalar este estilo.

Você precisará instalar uma extensão como o Stylus para instalar este estilo.

Você precisará instalar uma extensão como o Stylus para instalar este estilo.

Você precisará instalar um gerenciador de estilos de usuário para instalar este estilo.

Você precisará instalar um gerenciador de estilos de usuário para instalar este estilo.

Você precisará instalar um gerenciador de estilos de usuário para instalar este estilo.

(Eu já possuo um gerenciador de estilos de usuário, me deixar fazer a instalação!)

// ==UserScript==
// @name         Pixeldrain Download Bypass (with zip file content support)
// @namespace    http://tampermonkey.net/
// @version      1.6.4
// @description  Bypass Pixeldrain Download Limit
// @author       MegaLime0, honey, Nurarihyon, ksynwa
// @match        https://pixeldrain.com/*
// @match        https://cdn.pd8.workers.dev/*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=pixeldrain.com
// @grant        GM_openInTab
// @license      MIT
// ==/UserScript==

(function() {
  "use strict";

  const bypassPrefix = "https://pd.1drv.eu.org/";
  const idRegex = /\/api\/file\/(\w+)\//;
  const zipFileRegex = /\/api\/file\/(\w+)\/info\/zip\//;

  function getBypassUrls(urlType, url = "") {
    const currentUrl = window.location.href;

    if (urlType === "file") {
      const id = currentUrl.replace("https://pixeldrain.com/u/", "");
      const alteredUrl = bypassPrefix + id;

      return alteredUrl;
    }

    if (urlType === "gallery") {
      const links = document.querySelectorAll("a.file");

      const bypassPrefixList = [];
      const bypassPrefixNames = [];

      links.forEach((link) => {
        const childDiv = link.querySelector("div");
        const backgroundUrl = childDiv.style.backgroundImage;

        const match = backgroundUrl.match(idRegex);

        if (match && match.length > 1) {
          const alteredUrl = bypassPrefix + match[1];
          bypassPrefixList.push(alteredUrl);
          bypassPrefixNames.push(link.textContent);
        }
      });

      return {
        bypassPrefixList,
        bypassPrefixNames
      };
    }

    if (urlType === "zipFile") {
      const zipFileSuffix = url.replace(
        "https://pixeldrain.com/api/file/",
        "",
      );
      return bypassPrefix + zipFileSuffix;
    }
  }

  function handleButtonClick() {
    const currentUrl = window.location.href;

    if (currentUrl.includes("https://pixeldrain.com/u/")) {
      const alteredUrl = getBypassUrls("file");
      startDownload(alteredUrl);
    }

    if (currentUrl.includes("https://pixeldrain.com/l/")) {
      const links = getBypassUrls("gallery").bypassPrefixList;

      links.forEach((link) => {
        startDownload(link);
      });
    }
  }

  function startDownload(link) {
    GM_openInTab(link);
  }

  function handleLinksButtonClick() {
    const popupBox = document.getElementById("popupBox");
    const popupClose = document.createElement("span");
    popupClose.innerHTML = "×";
    popupClose.style.position = "absolute";
    popupClose.style.top = "1px";
    popupClose.style.right = "7px";
    popupClose.style.cursor = "pointer";
    popupClose.onclick = function() {
      popupBox.style.display = "none";
    };

    popupBox.innerHTML = "";
    popupBox.appendChild(popupClose);

    const currentUrl = window.location.href;

    if (currentUrl.includes("https://pixeldrain.com/u/")) {
      const alteredUrl = getBypassUrls("file");
      const urlElement = document.createElement("a");
      urlElement.href = alteredUrl;
      urlElement.textContent = alteredUrl;
      popupBox.appendChild(urlElement);
    }

    if (currentUrl.includes("https://pixeldrain.com/l/")) {
      let result = getBypassUrls("gallery");
      let bypassLinks = result.bypassPrefixList;

      const linksContainer = document.createElement("div");
      linksContainer.style.maxHeight = "calc(100% - 40px)";
      linksContainer.style.overflowY = "auto";
      linksContainer.style.paddingBottom = "10px";

      bypassLinks.forEach((link) => {
        const urlElement = document.createElement("a");
        urlElement.href = link;
        urlElement.textContent = link;
        urlElement.style.display = "block";
        linksContainer.appendChild(urlElement);
      });

      popupBox.appendChild(linksContainer);

      popupBox.style.display = "flex";
      popupBox.style.flexDirection = "column";
      popupBox.style.alignItems = "center";
      popupBox.style.justifyContent = "center";

      const buttonContainer = document.createElement("div");
      buttonContainer.style.display = "flex";
      buttonContainer.style.justifyContent = "center";
      buttonContainer.style.marginTop = "10px";

      const copyButton = document.createElement("button");
      copyButton.textContent = "🔗 Copy URL";
      copyButton.style.marginRight = "5px";
      copyButton.addEventListener("click", function() {
        const urls = bypassLinks.join("\n");
        navigator.clipboard.writeText(urls).then(
          function() {
            copyButton.textContent = "✔️ Copied";
            setTimeout(function() {
              copyButton.textContent = "🔗 Copy URL";
            }, 2500);
          },
          function(err) {
            console.error("Failed to copy URLs: ", err);
          },
        );
      });
      buttonContainer.appendChild(copyButton);

      const saveButton = document.createElement("button");
      saveButton.textContent = "📄 Save as Text File";
      saveButton.style.marginLeft = "5px";
      saveButton.addEventListener("click", function() {
        const popupContent = document
          .getElementById("popupBox")
          .querySelectorAll("a");
        if (popupContent.length > 0) {
          const currentUrl = window.location.href;
          const fileIdMatch = currentUrl.match(/\/l\/([^/#?]+)/);
          if (fileIdMatch && fileIdMatch.length > 1) {
            const fileId = fileIdMatch[1];
            const fileName = fileId + ".txt";
            let content = "";
            popupContent.forEach((link) => {
              content += link.href + "\n";
            });
            const blob = new Blob([content.trim()], {
              type: "text/plain",
            });
            const url = URL.createObjectURL(blob);
            const a = document.createElement("a");
            a.href = url;
            a.download = fileName;
            document.body.appendChild(a);
            a.click();
            document.body.removeChild(a);
            URL.revokeObjectURL(url);
          } else {
            console.error(
              "Failed to extract file identifier from URL.",
            );
          }
        } else {
          console.error("Popup content not found.");
        }
      });
      buttonContainer.appendChild(saveButton);

      popupBox.appendChild(buttonContainer);
    }

    popupBox.style.display = "block";
  }

  if (window.location.href.includes("pixeldrain.com")) {
    const button = document.createElement("button");
    const downloadIcon = document.createElement("a");
    downloadIcon.className = "icon";
    downloadIcon.textContent = "download";
    downloadIcon.style.color = "#d7dde8";
    const downloadButtonText = document.createElement("span");
    downloadButtonText.textContent = "Download Bypass";
    button.appendChild(downloadIcon);
    button.appendChild(downloadButtonText);

    const linksButton = document.createElement("button");
    const linksIcon = document.createElement("i");
    linksIcon.className = "icon";
    linksIcon.textContent = "link";
    const linksButtonText = document.createElement("span");
    linksButtonText.textContent = "Show Bypass Links";
    linksButton.appendChild(linksIcon);
    linksButton.appendChild(linksButtonText);

    const popupBox = document.createElement("div");
    popupBox.style.zIndex = 20;
    popupBox.style.whiteSpace = "pre-line";
    popupBox.id = "popupBox";
    popupBox.style.display = "none";
    popupBox.style.position = "fixed";

    popupBox.style.top = "50%";
    popupBox.style.left = "50%";
    popupBox.style.transform = "translate(-50%, -50%)";
    popupBox.style.padding = "20px";
    popupBox.style.background = "#2f3541";
    popupBox.style.border = "2px solid #a4be8c";
    popupBox.style.color = "#d7dde8";
    popupBox.style.borderRadius = "10px";
    popupBox.style.width = "30%";
    popupBox.style.height = "auto";
    popupBox.style.maxWidth = "600px";

    button.addEventListener("click", handleButtonClick);
    linksButton.addEventListener("click", handleLinksButtonClick);

    const labels = document.querySelectorAll("div.label");
    labels.forEach((label) => {
      if (label.textContent.trim() === "Size") {
        const nextElement = label.nextElementSibling;
        if (nextElement) {
          nextElement.insertAdjacentElement("afterend", linksButton);
          nextElement.insertAdjacentElement("afterend", button);
        }
      }
    });

    document.body.appendChild(popupBox);

    const bypassZipLinks = (element) => {
      if (
        element.nodeType === Node.ELEMENT_NODE &&
        element.nodeName === "A" &&
        element.href.match(zipFileRegex)
      ) {
        // console.log(`LINK FOUND ${element.href}`);
        const bypassLink = getBypassUrls("zipFile", element.href);
        const bypassElement = document.createElement("a");
        bypassElement.href = bypassLink;
        bypassElement.textContent = "(Bypass)";
        const parent = element.parentElement;
        parent.insertAdjacentText("beforeend", "\t");
        parent.insertAdjacentElement("beforeend", bypassElement);
      }
    };

    const moCallback = (mutations) => {
      for (const mutation of mutations) {
        for (const node of mutation.addedNodes) {
          //console.log("LOGGING: V"); console.log(node);
          bypassZipLinks(node);
        }
      }
    };

    const file_preview_div =
      document.getElementsByClassName("file_preview")[0];
    const observer = new MutationObserver(moCallback);
    observer.observe(file_preview_div, {
      childList: true,
      subtree: true
    });
  }
})();