PixelDrain Bypass URLs Globally

Convert all Original Pixeldrain Links to pd for Bypassing in any Page even Linked Buttons.

  1. // ==UserScript==
  2. // @name PixelDrain Bypass URLs Globally
  3. // @namespace SWScripts
  4. // @version v1.5
  5. // @description Convert all Original Pixeldrain Links to pd for Bypassing in any Page even Linked Buttons.
  6. // @grant none
  7. // @license MIT
  8. // @grant GM_setValue
  9. // @grant GM_getValue
  10. // @grant GM_registerMenuCommand
  11. // @run-at document-end
  12. // @match *://*/*
  13. // ==/UserScript==
  14.  
  15. (function() {
  16. 'use strict';
  17.  
  18. const PIXELDRAIN_URL = /https?:\/\/(www\.)?pixeldrain\.com\/u\/(.*?)/g;
  19. const REPLACEMENT_URL = 'https://pd.cybar.xyz/';
  20.  
  21. let enableRedirect = GM_getValue('enableRedirect', true);
  22. let enableTextReplacement = GM_getValue('enableTextReplacement', true);
  23.  
  24. function replaceTextInNode(node) {
  25. if (node.nodeType === Node.TEXT_NODE && enableTextReplacement) {
  26. if (PIXELDRAIN_URL.test(node.textContent)) {
  27. node.textContent = node.textContent.replace(PIXELDRAIN_URL, (match, p1, p2) => {
  28. return REPLACEMENT_URL + p2;
  29. });
  30. }
  31. } else if (node.nodeType === Node.ELEMENT_NODE) {
  32. node.childNodes.forEach(replaceTextInNode);
  33.  
  34. if (node.tagName === 'A' && node.href && enableTextReplacement && PIXELDRAIN_URL.test(node.href)) {
  35. node.href = node.href.replace(PIXELDRAIN_URL, (match, p1, p2) => REPLACEMENT_URL + p2);
  36. }
  37. }
  38. }
  39.  
  40. function checkAndReplaceText() {
  41. if (enableTextReplacement) {
  42. replaceTextInNode(document.body);
  43. }
  44. }
  45.  
  46. function handleMutations(mutations) {
  47. mutations.forEach(mutation => {
  48. if (mutation.type === 'childList') {
  49. mutation.addedNodes.forEach(node => {
  50. replaceTextInNode(node);
  51. });
  52. }
  53. });
  54. }
  55.  
  56. function observeDOMChanges() {
  57. const observer = new MutationObserver(handleMutations);
  58. observer.observe(document.body, {
  59. childList: true,
  60. subtree: true
  61. });
  62. }
  63.  
  64. function checkIfPixeldrainRedirect() {
  65. if (enableRedirect) {
  66. const currentUrl = window.location.href;
  67. if (PIXELDRAIN_URL.test(currentUrl) && /\/u\//.test(currentUrl)) {
  68. window.location.href = currentUrl.replace(PIXELDRAIN_URL, (match, p1, p2) => REPLACEMENT_URL + p2);
  69. }
  70. }
  71. }
  72.  
  73. GM_registerMenuCommand("Redirect PixelDrain Page (Currently " + (enableRedirect ? "Enabled" : "Disabled") + ")", () => {
  74. enableRedirect = !enableRedirect;
  75. GM_setValue('enableRedirect', enableRedirect);
  76. alert("Redirect is now " + (enableRedirect ? "Enabled" : "Disabled"));
  77. });
  78.  
  79. GM_registerMenuCommand("Links Replacement (Currently " + (enableTextReplacement ? "Enabled" : "Disabled") + ")", () => {
  80. enableTextReplacement = !enableTextReplacement;
  81. GM_setValue('enableTextReplacement', enableTextReplacement);
  82. alert("Text Replacement is now " + (enableTextReplacement ? "Enabled" : "Disabled"));
  83. });
  84.  
  85. document.addEventListener('DOMContentLoaded', function() {
  86. checkIfPixeldrainRedirect();
  87. checkAndReplaceText();
  88. observeDOMChanges();
  89. });
  90.  
  91. setInterval(checkAndReplaceText, 1000);
  92. })();
  93.