Pixeldrain Download Bypass (with zip file content support)

Bypass Pixeldrain Download Limit

Vous devrez installer une extension telle que Tampermonkey, Greasemonkey ou Violentmonkey pour installer ce script.

Vous devrez installer une extension telle que Tampermonkey ou Violentmonkey pour installer ce script.

Vous devrez installer une extension telle que Tampermonkey ou Violentmonkey pour installer ce script.

Vous devrez installer une extension telle que Tampermonkey ou Userscripts pour installer ce script.

Vous devrez installer une extension telle que Tampermonkey pour installer ce script.

Vous devrez installer une extension de gestionnaire de script utilisateur pour installer ce script.

(J'ai déjà un gestionnaire de scripts utilisateur, laissez-moi l'installer !)

Vous devrez installer une extension telle que Stylus pour installer ce style.

Vous devrez installer une extension telle que Stylus pour installer ce style.

Vous devrez installer une extension telle que Stylus pour installer ce style.

Vous devrez installer une extension du gestionnaire de style pour utilisateur pour installer ce style.

Vous devrez installer une extension du gestionnaire de style pour utilisateur pour installer ce style.

Vous devrez installer une extension du gestionnaire de style pour utilisateur pour installer ce style.

(J'ai déjà un gestionnaire de style utilisateur, laissez-moi l'installer!)

// ==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
    });
  }
})();