FanPass Btn

Adds button to redirect OnlyFans,Fansly,Candfans to Coomer with enhancement

目前為 2024-10-26 提交的版本,檢視 最新版本

// ==UserScript==
// @name         FanPass Btn
// @version      1.2
// @description  Adds button to redirect OnlyFans,Fansly,Candfans to Coomer with enhancement
// @namespace    https://greasyfork.org/en/users/1333430
// @match        https://onlyfans.com/*
// @match        https://coomer.su/*
// @match        https://fansly.com/*
// @match        https://candfans.jp/*
// @grant        GM_openInTab
// ==/UserScript==

(function() {
    'use strict';

    // Function to handle redirection
    function redirect(username, service) {
        const coomerUrl = `https://coomer.su/${service}/user/${username}`;
        GM_openInTab(coomerUrl, { active: true });
    }

    function createRedirectButton(username, service) {
        const button = document.createElement('button');
        button.innerHTML = `<img src="https://coomer.su/favicon.ico" style="width: 24px; height: 24px; display: block; margin: auto;">`;
        button.className = 'redirect-button';
        button.addEventListener('click', () => redirect(username, service));
        document.body.appendChild(button);
    }

    // Add styles for the button and main content adjustment
    const style = document.createElement('style');
    style.textContent = `
        .redirect-button {
            position: fixed;
            top: 20px;
            right: 20px;
            z-index: 9999;
            border: none;
            border-radius: 50%;
            background-color: rgba(105, 105, 105, 0.7);
            width: 50px;
            height: 50px;
            padding: 10px;
            box-sizing: border-box;
            cursor: pointer;
        }
        .shifted.content-wrapper.full-width {
            width: 100% !important;
            margin-left: 0 !important;
        }
        .post-card {
            border-radius: 10px !important;
            overflow: hidden;
        }
        .post-card__image-container {
            overflow: visible;
        }
        .post-card__image {
            transition: transform 0.3s ease, box-shadow 0.3s ease;
        }
        .post-card__image-container:hover .post-card__image {
            transform: scale(1.1);
            box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2);
        }
        .post-card.post-card--preview {
            transform: scale(1.2);
            margin: 20px;
            transition: transform 0.3s ease, box-shadow 0.3s ease;
            backface-visibility: hidden;
            perspective: 1000px;
        }
        .post-card.post-card--preview:hover {
            transform: scale(1.3);
            box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2);
        }
        .ad-banner, .ad-container, .banner, .advertisement {
            display: none !important;
        }
        .post__nav-links {
            position: sticky;
            top: 50%;
            display: flex;
            justify-content: space-between;
            align-items: center;
            width: 100%;
            z-index: 1000;
            transform: translateY(-50%);
        }
        .post__nav-item {
            flex: 1;
            text-align: center;
            font-size: 130%;
        }
        .post__nav-item.subtitle {
            font-size: 130%;
            position: absolute;
            left: 20%;
        }
        .post__nav-item a {
            text-decoration: none;
            color: inherit;
            font-size: 130%;
        }
        .post__nav-item.previous {
            position: absolute;
            left: 20%;
        }
        .post__nav-item.next {
            position: absolute;
            right: 20%;
        }
        .glow {
            animation: glow 1.5s infinite alternate;
        }
        @keyframes glow {
            0% {
                text-shadow: 0 0 5px #fff, 0 0 10px #fff, 0 0 15px #fff, 0 0 20px #ff00ff, 0 0 25px #ff00ff, 0 0 30px #ff00ff, 0 0 35px #ff00ff;
            }
            50% {
                text-shadow: 0 0 10px #fff, 0 0 15px #fff, 0 0 20px #fff, 0 0 25px #ff00ff, 0 0 30px #ff00ff, 0 0 35px #ff00ff, 0 0 40px #ff00ff;
            }
            100% {
                text-shadow: 0 0 15px #fff, 0 0 25px #fff, 0 0 35px #fff, 0 0 45px #ff00ff, 0 0 55px #ff00ff, 0 0 65px #ff00ff, 0 0 75px #ff00ff;
            }
        }
    `;
    document.head.appendChild(style);

    function hideSidebar() {
        const sidebar = document.querySelector('.global-sidebar');
        if (sidebar) {
            sidebar.remove();
        }
    }

    function removeMatrixBanner() {
        const matrixBanner = document.querySelector('a[href="https://coomer.su/matrix"]');
        if (matrixBanner) {
            matrixBanner.remove();
        }
    }

    function moveNavElement() {
        const navElements = document.querySelectorAll('.post__nav-links');
        const postBodyElement = document.querySelector('.post__body');
    
        navElements.forEach(navElement => {
            const previousItem = navElement.querySelector('.post__nav-link.prev') || navElement.querySelector('.post__nav-item.subtitle');
            if (previousItem) {
                previousItem.innerHTML = '←';
                previousItem.parentElement.classList.add('previous', 'glow');
            }
    
            const nextItem = navElement.querySelector('.post__nav-link.next');
            if (nextItem) {
                nextItem.innerHTML = '→';
                nextItem.parentElement.classList.add('next', 'glow');
            }
    
            postBodyElement.insertBefore(navElement, postBodyElement.firstChild);
        });
    }

    if (window.location.href.includes('onlyfans.com')) {
        const profileMatch = window.location.href.match(/https:\/\/onlyfans.com\/([^/]+)/);
        if (profileMatch) {
            const username = profileMatch[1];
            createRedirectButton(username, 'onlyfans');
        }
    }

    if (window.location.href.includes('fansly.com')) {
        (async () => {
            let userID = null;
            const profileMatch = window.location.href.match(/https:\/\/fansly.com\/([^/]+)/);
            if (profileMatch) {
                const userName = profileMatch[1];
                if (userName) {
                    const res = await fetch(`https://apiv3.fansly.com/api/v1/account?usernames=${userName}&ngsw-bypass=true`);
                    const data = await res.json();
                    userID = data?.response?.[0]?.id ?? null;
                }
                if (userID) {
                    createRedirectButton(userID, 'fansly');
                }
            }
        })();
    }

    if (window.location.href.includes('candfans.jp')) {
        const processedUserIds = new Set();
        const observer = new MutationObserver(() => {
            document.querySelectorAll('img[data-src]').forEach((imgElement) => {
                const userID = imgElement.getAttribute('data-src')?.match(/user\/(\d+)\//)?.[1];
                if (userID && !processedUserIds.has(userID)) {
                    createRedirectButton(userID, 'candfans');
                    processedUserIds.add(userID);
                }
            });
        });
        observer.observe(document.body, { childList: true, subtree: true });
    }

    if (window.location.href.includes('coomer.su')) {
        removeMatrixBanner();
        if (window.location.href.includes('coomer.su/onlyfans/user') ||
            window.location.href.includes('coomer.su/fansly/user') ||
            window.location.href.includes('coomer.su/candfans/user')) {
            hideSidebar();
            const mainContent = document.querySelector('.shifted.content-wrapper');
            if (mainContent) {
                mainContent.classList.add('full-width');
            }
            const imageContainers = document.querySelectorAll('.post-card.post-card--preview');
            imageContainers.forEach(container => {
                container.style.transform = 'scale(1.2)';
                container.style.margin = '20px';
                container.style.transition = 'transform 0.3s ease, box-shadow 0.3s ease';
                container.style.backfaceVisibility = 'hidden';
                container.style.perspective = '1000px';
                container.addEventListener('mouseover', () => {
                    container.style.transform = 'scale(1.3)';
                    container.style.boxShadow = '0 4px 8px rgba(0, 0, 0, 0.2)';
                });
                container.addEventListener('mouseout', () => {
                    container.style.transform = 'scale(1.2)';
                    container.style.boxShadow = 'none';
                });
            });
        }
    }

    window.addEventListener('load', () => {
        const links = document.querySelectorAll('a.image-link');
        links.forEach(link => {
            link.addEventListener('click', (event) => {
                event.preventDefault();
                window.open(link.href, '_blank');
            });
        });
        moveNavElement();
    });
})();