Play Stripchat via PotPlayer, VLC, nPlayer, etc

Play Stripchat videos using external players like PotPlayer, VLC, and nPlayer.

ही स्क्रिप्ट इंस्टॉल करण्यासाठी तुम्हाला Tampermonkey, Greasemonkey किंवा Violentmonkey यासारखे एक्स्टेंशन इंस्टॉल करावे लागेल.

ही स्क्रिप्ट इंस्टॉल करण्यासाठी तुम्हाला Tampermonkey किंवा Violentmonkey यासारखे एक्स्टेंशन इंस्टॉल करावे लागेल..

ही स्क्रिप्ट इंस्टॉल करण्यासाठी तुम्हाला Tampermonkey किंवा Violentmonkey यासारखे एक्स्टेंशन इंस्टॉल करावे लागेल..

You will need to install an extension such as Tampermonkey or Userscripts to install this script.

ही स्क्रिप्ट इंस्टॉल करण्यासाठी तुम्हाला Tampermonkey यासारखे एक्स्टेंशन इंस्टॉल करावे लागेल..

ही स्क्रिप्ट इंस्टॉल करण्यासाठी तुम्हाला एक युझर स्क्रिप्ट व्यवस्थापक एक्स्टेंशन इंस्टॉल करावे लागेल.

(माझ्याकडे आधीच युझर स्क्रिप्ट व्यवस्थापक आहे, मला इंस्टॉल करू द्या!)

ही स्टाईल इंस्टॉल करण्यासाठी तुम्हाला Stylus सारखे एक्स्टेंशन इंस्टॉल करावे लागेल.

ही स्टाईल इंस्टॉल करण्यासाठी तुम्हाला Stylus सारखे एक्स्टेंशन इंस्टॉल करावे लागेल.

ही स्टाईल इंस्टॉल करण्यासाठी तुम्हाला Stylus सारखे एक्स्टेंशन इंस्टॉल करावे लागेल.

ही स्टाईल इंस्टॉल करण्यासाठी तुम्हाला एक युझर स्टाईल व्यवस्थापक इंस्टॉल करावे लागेल.

ही स्टाईल इंस्टॉल करण्यासाठी तुम्हाला एक युझर स्टाईल व्यवस्थापक इंस्टॉल करावे लागेल.

ही स्टाईल इंस्टॉल करण्यासाठी तुम्हाला एक युझर स्टाईल व्यवस्थापक इंस्टॉल करावे लागेल.

(माझ्याकडे आधीच युझर स्टाईल व्यवस्थापक आहे, मला इंस्टॉल करू द्या!)

// ==UserScript==
// @name        Play Stripchat via PotPlayer, VLC, nPlayer, etc
// @namespace   https://greasyfork.org/scripts/473187
// @version     1.3.0
// @description Play Stripchat videos using external players like PotPlayer, VLC, and nPlayer.
// @match       *://*.stripchat.com/*
// @grant       GM_setClipboard
// @license     MIT
// ==/UserScript==

(function () {
    'use strict';

    let live_url = '';

    // 📡 Bắt URL qua XHR
    const originalXHR = window.XMLHttpRequest.prototype.open;
    window.XMLHttpRequest.prototype.open = function (method, url) {
        this.addEventListener('readystatechange', function () {
            if (this.readyState === 4 && this.responseText) {
                try {
                    if (this.responseText.includes('.m3u8')) {
                        const match = this.responseText.match(/https?:\/\/[^\s"]+\.m3u8/);
                        if (match) {
                            live_url = match[0];
                            console.log('🎯 Found m3u8 URL via XHR:', live_url);
                        }
                    }
                } catch (e) {
                    console.warn('⚠️ XHR Error:', e);
                }
            }
        });
        originalXHR.apply(this, arguments);
    };

    // 📡 Bắt URL qua WebSocket
    const originalWebSocket = window.WebSocket;
    window.WebSocket = function (...args) {
        const ws = new originalWebSocket(...args);

        ws.addEventListener('message', (event) => {
            try {
                const data = event.data;
                if (typeof data === 'string' && data.includes('.m3u8')) {
                    const match = data.match(/https?:\/\/[^\s"]+\.m3u8/);
                    if (match) {
                        live_url = match[0];
                        console.log('🎯 Found m3u8 URL via WebSocket:', live_url);
                    }
                }
            } catch (e) {
                console.warn('⚠️ WebSocket Error:', e);
            }
        });

        return ws;
    };

    // 🎮 Tạo nút điều khiển
    function createButton(player_name, player_url, copy_url = false) {
        let button = document.createElement("button");
        button.innerHTML = player_name;
        button.style.cssText = `
            width: 100px;
            height: 35px;
            text-align: center;
            color: white;
            background: #e33e33;
            border: 1px solid #e33e33;
            border-radius: 8px;
            font-size: 14px;
            cursor: pointer;
            margin: 5px;
        `;

        button.onclick = function () {
            if (!live_url) {
                alert('❌ Không tìm thấy URL video. Hãy làm mới trang và thử lại.');
                return;
            }

            let final_url = `${player_url}${live_url}`;
            if (copy_url) {
                GM_setClipboard(final_url);
                alert(`✅ URL đã sao chép: ${final_url}`);
            } else {
                window.open(final_url);
            }
        };

        document.querySelector("#portal-root")?.prepend(button);
    }

    // Thêm nút phát video
    createButton("Copy Link", "", true);
    createButton("PotPlayer", "potplayer://");
    createButton("VLC", "vlc://");
    createButton("nPlayer", "nplayer-");
})();