- // ==UserScript==
- // @name Media Link Extractor
- // @namespace http://tampermonkey.net/
- // @version 3.3
- // @description Extract media links from various websites.
- // @author 1axx
- // @icon https://img.freepik.com/premium-photo/link-icon-3d-render-illustration_567294-4275.jpg
- // @include https://cyberdrop.me/*
- // @include https://files.fm/*
- // @include https://app.koofr.net/*
- // @include https://bunkr.*/*
- // @include https://*.dropbox.com/*
- // @include https://www.redd.tube/*
- // @include https://shiroko.co/*
- // @grant GM_setClipboard
- // @license MIT
- // ==/UserScript==
-
- (function () {
- 'use strict';
-
- const uiSettings = {
- 'cyberdrop.me': {
- button: { top: '8px', right: '440px', bg: '#008b96', width: '40px', height: '40px' },
- panel: { bg: '#222', textColor: '#8F2AA3' }
- },
- 'files.fm': {
- button: { top: '90px', right: '30px', bg: '#181A1B' },
- panel: { bg: '#333', textColor: '#E8E6E3' }
- },
- 'app.koofr.net': {
- button: { top: '15px', right: '110px', bg: '#263238' },
- panel: { bg: '#121212', textColor: '#71BA05' }
- },
- 'bunkr': {
- button: { top: '13px', right: '290px', bg: '#1E2936' },
- panel: { bg: '#181818', textColor: '#7B39EB' }
- },
- 'dropbox.com': {
- button: { top: '15px', right: '290px', bg: '#3E3D3C' },
- panel: { bg: '#232323', textColor: '#3984FF' }
- },
- 'redd.tube': {
- button: { top: '5px', right: '390px', bg: '#185DCC' },
- panel: { bg: '#1a1a1a', textColor: '#EDCC32' }
- },
- 'shiroko.co': {
- button: { top: '5px', right: '1540px', bg: '#FFFFFF' },
- panel: { bg: '#1a1a1a', textColor: '#FFFFFF' }
- },
- 'default': {
- button: { top: '10px', right: '10px', bg: '#10161F' },
- panel: { bg: '#000', textColor: '#10161F' }
- }
- };
-
- // Supported site configurations
- const siteConfigs = {
- 'cyberdrop.me': { selector: '.image-container.column a.image' },
-
- 'files.fm': { selector: '.item.file.image-item a.top_button_download, .item.file.video-item a.top_button_download' },
-
- 'app.koofr.net': { selector: 'a[href^="/content/links/"], a[href^="/links/"]' },
-
- 'bunkr': { selector: 'a[href^="https://bunkrrr.org/"], a[href^="/f/"]' },
-
- 'dropbox.com': { selector: 'a[href^="https://www.dropbox.com/scl/"]' },
-
- 'redd.tube': { selector: 'a[href^="/video/"]' },
-
- 'shiroko.co': { selector: 'a[href^="https://ggredi.info/"]',}
- };
-
- let mediaLinks = new Set(); // Store unique links
-
- function getSiteSettings() {
- const host = Object.keys(uiSettings).find(key => window.location.host.includes(key)) || 'default';
- return uiSettings[host];
- }
-
- function collectMediaLinks() {
- const host = Object.keys(siteConfigs).find(key => window.location.host.includes(key));
- if (!host) return;
-
- mediaLinks.clear();
- const elements = document.querySelectorAll(siteConfigs[host].selector);
- elements.forEach(el => {
- const link = el.getAttribute('href');
- if (link) {
- mediaLinks.add(link.startsWith('http') ? link : `${window.location.origin}${link}`);
- }
- });
- }
-
- function createUI() {
- const settings = getSiteSettings();
-
- // Create Extract Button
- const extractButton = document.createElement('button');
- extractButton.textContent = '☰';
- extractButton.style.position = 'fixed';
- extractButton.style.width = settings.button.width;
- extractButton.style.height = settings.button.height;
- extractButton.style.top = settings.button.top;
- extractButton.style.right = settings.button.right;
- extractButton.style.backgroundColor = settings.button.bg;
- extractButton.style.color = '#fff';
- extractButton.style.border = 'none';
- extractButton.style.padding = '10px 15px';
- extractButton.style.borderRadius = '5px';
- extractButton.style.cursor = 'pointer';
- extractButton.style.zIndex = '10001';
-
- extractButton.addEventListener('click', () => {
- collectMediaLinks();
- displayLinksUI();
- });
-
- document.body.appendChild(extractButton);
- }
-
- function displayLinksUI() {
- if (mediaLinks.size === 0) return;
-
- const settings = getSiteSettings();
-
- // Create Popup Container
- const popup = document.createElement('div');
- popup.style.position = 'fixed';
- popup.style.top = '20%';
- popup.style.left = '50%';
- popup.style.transform = 'translate(-50%, -20%)';
- popup.style.backgroundColor = settings.panel.bg;
- popup.style.padding = '20px';
- popup.style.border = '2px solid ' + settings.panel.textColor;
- popup.style.borderRadius = '10px';
- popup.style.zIndex = '10000';
- popup.style.width = '60%';
- popup.style.boxShadow = `0px 0px 20px rgba(0, 255, 255, 0.3)`;
-
- // Textarea for Links
- const textarea = document.createElement('textarea');
- textarea.value = Array.from(mediaLinks).join('\n');
- textarea.style.width = '100%';
- textarea.style.height = '200px';
- textarea.style.marginBottom = '10px';
- textarea.style.backgroundColor = '#181818';
- textarea.style.color = settings.panel.textColor;
- textarea.style.border = '1px solid #555';
- textarea.style.borderRadius = '5px';
- textarea.style.padding = '10px';
- textarea.style.fontFamily = 'Consolas, "Courier New", monospace';
- textarea.style.fontSize = '14px';
- textarea.style.resize = 'none';
- popup.appendChild(textarea);
-
- // Counter
- const counter = document.createElement('div');
- counter.textContent = `Total Unique Links: ${mediaLinks.size}`;
- counter.style.marginBottom = '10px';
- counter.style.fontWeight = 'bold';
- counter.style.textAlign = 'center';
- counter.style.color = settings.panel.textColor;
- popup.appendChild(counter);
-
- // Copy Button
- const copyButton = document.createElement('button');
- copyButton.textContent = 'Copy to Clipboard';
- copyButton.style.padding = '10px';
- copyButton.style.backgroundColor = settings.panel.textColor;
- copyButton.style.color = '#fff';
- copyButton.style.border = 'none';
- copyButton.style.borderRadius = '5px';
- copyButton.style.cursor = 'pointer';
- copyButton.addEventListener('click', () => {
- textarea.select();
- document.execCommand('copy');
- alert('Links copied to clipboard!');
- });
- popup.appendChild(copyButton);
-
- // Close Button
- const closeButton = document.createElement('button');
- closeButton.textContent = 'Close';
- closeButton.style.marginLeft = '10px';
- closeButton.style.padding = '10px';
- closeButton.style.backgroundColor = '#dc3545';
- closeButton.style.color = 'white';
- closeButton.style.border = 'none';
- closeButton.style.borderRadius = '5px';
- closeButton.style.cursor = 'pointer';
- closeButton.addEventListener('click', () => document.body.removeChild(popup));
- popup.appendChild(closeButton);
-
- document.body.appendChild(popup);
- }
-
- createUI();
- })();