omogglev2

this is a basic omegle cheating script that gets you a rating of ~8-9 with an ui

スクリプトをインストールするには、Tampermonkey, GreasemonkeyViolentmonkey のような拡張機能のインストールが必要です。

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

スクリプトをインストールするには、TampermonkeyViolentmonkey のような拡張機能のインストールが必要です。

スクリプトをインストールするには、TampermonkeyUserscripts のような拡張機能のインストールが必要です。

このスクリプトをインストールするには、Tampermonkeyなどの拡張機能をインストールする必要があります。

このスクリプトをインストールするには、ユーザースクリプト管理ツールの拡張機能をインストールする必要があります。

(ユーザースクリプト管理ツールは設定済みなのでインストール!)

このスタイルをインストールするには、Stylusなどの拡張機能をインストールする必要があります。

このスタイルをインストールするには、Stylus などの拡張機能をインストールする必要があります。

このスタイルをインストールするには、Stylus tなどの拡張機能をインストールする必要があります。

このスタイルをインストールするには、ユーザースタイル管理用の拡張機能をインストールする必要があります。

このスタイルをインストールするには、ユーザースタイル管理用の拡張機能をインストールする必要があります。

このスタイルをインストールするには、ユーザースタイル管理用の拡張機能をインストールする必要があります。

(ユーザースタイル管理ツールは設定済みなのでインストール!)

このスクリプトの質問や評価の投稿はこちら通報はこちらへお寄せください
// ==UserScript==
// @name         omogglev2
// @namespace    http://tampermonkey.net/
// @version      2026-06-01
// @description  this is a basic omegle cheating script that gets you a rating of ~8-9 with an ui
// @author       c8g
// @match        https://omoggle.com/
// @icon         https://www.google.com/s2/favicons?sz=64&domain=omoggle.com
// @grant        jew
// @license      nignig
// ==/UserScript==

(function() {
    'use strict';


    let active = false;
    let jitterAmount = 0.15;
    let queueDelaySecs = 1.5; // seconds between auto queue clicks

    const canvas = document.createElement('canvas');
    const ctx = canvas.getContext('2d');
    canvas.width = 640;
    canvas.height = 480;

    // ─── Hardcoded Face Config ────────────────────────────────────────────────────
    const faceConfig = {
        eyeTilt:    20.0,
        eyeWidth:   26,
        eyeHeight:  8,
        eyeSpacing: 52,
        faceWidth:  85,
        faceHeight: 620,
        jawWidth:   74,
        jawDepth:   214,
        mouthY:     44,
        philtrumY:  16,
        headX:      0,
        headY:      0,
        rotateZ:    0,
        rotateX:    0,
        rotateY:    0,
    };

    // ─── 3D helpers ──────────────────────────────────────────────────────────────
    function rotatePoint3D(x, y, z, rx, ry, rz) {
        let x1 = x * Math.cos(rz) - y * Math.sin(rz);
        let y1 = x * Math.sin(rz) + y * Math.cos(rz);
        let z1 = z;
        let y2 = y1 * Math.cos(rx) - z1 * Math.sin(rx);
        let z2 = y1 * Math.sin(rx) + z1 * Math.cos(rx);
        let x2 = x1;
        let x3 = x2 * Math.cos(ry) + z2 * Math.sin(ry);
        let z3 = -x2 * Math.sin(ry) + z2 * Math.cos(ry);
        let y3 = y2;
        return { x: x3, y: y3, z: z3 };
    }

    function project(x, y, z, focalLen = 600) {
        const scale = focalLen / (focalLen + z);
        return { x: x * scale, y: y * scale, scale };
    }

    // ─── Renderer ────────────────────────────────────────────────────────────────
    function renderFace(targetCtx, W, H, config, jitter) {
        targetCtx.clearRect(0, 0, W, H);
        targetCtx.fillStyle = "#000";
        targetCtx.fillRect(0, 0, W, H);

        const t = Date.now() * 0.015;
        const jx = Math.sin(t) * jitter;
        const jy = Math.cos(t * 1.1) * (jitter * 0.67);

        const drawScale = Math.min(W / 640, H / 480);
        const baseCX = 320 + config.headX * 80 + jx;
        const baseCY = 212 + config.headY * 80 + jy;

        const rx = config.rotateX * Math.PI / 180;
        const ry = config.rotateY * Math.PI / 180;
        const rz = config.rotateZ * Math.PI / 180;

        function tp(dx, dy, dz = 0) {
            const r = rotatePoint3D(dx, dy, dz, rx, ry, rz);
            const p = project(r.x, r.y, r.z);
            return { x: baseCX + p.x, y: baseCY + p.y, s: p.scale };
        }

        targetCtx.save();
        targetCtx.translate(W / 2, H / 2);
        targetCtx.scale(drawScale, drawScale);
        targetCtx.translate(-320, -240);

        // Face oval
        targetCtx.beginPath();
        const steps = 48;
        for (let i = 0; i <= steps; i++) {
            const a = (i / steps) * Math.PI * 2;
            const p = tp(Math.cos(a) * config.faceWidth, Math.sin(a) * config.faceHeight + 12);
            i === 0 ? targetCtx.moveTo(p.x, p.y) : targetCtx.lineTo(p.x, p.y);
        }
        targetCtx.closePath();
        const g = targetCtx.createRadialGradient(baseCX, baseCY, 20, baseCX, baseCY, 170);
        g.addColorStop(0, "#c4a484");
        g.addColorStop(0.75, "#2a1b10");
        g.addColorStop(1, "#000");
        targetCtx.fillStyle = g;
        targetCtx.fill();

        // Eyes
        [-1, 1].forEach(side => {
            const ep = tp(config.eyeSpacing * side, -16);
            targetCtx.save();
            targetCtx.translate(ep.x, ep.y);
            targetCtx.rotate((side * config.eyeTilt + ry * 15 * side) * Math.PI / 180);
            targetCtx.scale(ep.s, ep.s);
            targetCtx.fillStyle = "black";
            targetCtx.fillRect(-config.eyeWidth / 2, -config.eyeHeight / 2, config.eyeWidth, config.eyeHeight);
            targetCtx.restore();
        });

        // Philtrum
        const pp = tp(0, config.philtrumY);
        targetCtx.fillStyle = "black";
        targetCtx.beginPath();
        targetCtx.arc(pp.x, pp.y, 8 * pp.s, 0, Math.PI * 2);
        targetCtx.fill();

        // Mouth
        const mL = tp(-28, config.mouthY), mR = tp(28, config.mouthY), mC = tp(0, config.mouthY - 3);
        targetCtx.strokeStyle = "black";
        targetCtx.lineWidth = 6;
        targetCtx.beginPath();
        targetCtx.moveTo(mL.x, mL.y);
        targetCtx.quadraticCurveTo(mC.x, mC.y, mR.x, mR.y);
        targetCtx.stroke();

        // Jawline
        const jL = tp(-config.jawWidth, config.mouthY);
        const jR = tp(config.jawWidth, config.mouthY);
        const jCL = tp(-22, config.jawDepth);
        const jCR = tp(22, config.jawDepth);
        targetCtx.lineWidth = 14;
        targetCtx.strokeStyle = "black";
        targetCtx.lineJoin = "round";
        targetCtx.beginPath();
        targetCtx.moveTo(jL.x, jL.y);
        targetCtx.lineTo(jCL.x, jCL.y);
        targetCtx.lineTo(jCR.x, jCR.y);
        targetCtx.lineTo(jR.x, jR.y);
        targetCtx.stroke();

        targetCtx.restore();
    }

    function drawPerfectFace() {
        renderFace(ctx, 640, 480, faceConfig, jitterAmount);
    }

    // ─── WebGL Hook ──────────────────────────────────────────────────────────────
    const hook = (proto) => {
        const original = proto.texImage2D;
        proto.texImage2D = function (...args) {
            if (active && args[args.length - 1] instanceof HTMLVideoElement) {
                drawPerfectFace();
                return original.apply(this, [args[0], args[1], args[2], args[3], args[4], canvas]);
            }
            return original.apply(this, args);
        };
    };
    if (window.WebGLRenderingContext) hook(window.WebGLRenderingContext.prototype);
    if (window.WebGL2RenderingContext) hook(window.WebGL2RenderingContext.prototype);

    // ─── UI ──────────────────────────────────────────────────────────────────────
    function injectUI() {
        if (document.getElementById('mgr-ui')) return;

        const style = document.createElement('style');
        style.textContent = `
            @import url('https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500;600&display=swap');

            #mgr-ui {
                position: fixed;
                top: 18px;
                left: 18px;
                z-index: 1000000;
                width: 240px;
                font-family: 'JetBrains Mono', 'Consolas', monospace;
                font-size: 11px;
                user-select: none;
                pointer-events: all;
            }

            /* window */
            .mgr-window {
                background: #1e1e1e;
                border: 1px solid #3a3a3a;
                border-radius: 4px;
                box-shadow: 0 8px 32px rgba(0,0,0,0.6), 0 1px 0 rgba(255,255,255,0.04) inset;
                overflow: hidden;
            }

            /* titlebar */
            .mgr-titlebar {
                background: #2c2c2c;
                border-bottom: 1px solid #3a3a3a;
                padding: 6px 10px;
                cursor: move;
                display: flex;
                align-items: center;
                gap: 6px;
            }
            .mgr-titlebar-dot {
                width: 8px; height: 8px;
                border-radius: 50%;
                background: #444;
                flex-shrink: 0;
            }
            .mgr-titlebar-dot.active-dot { background: #d4a017; box-shadow: 0 0 4px #d4a01788; }
            .mgr-titlebar-title {
                color: #aaa;
                font-size: 10px;
                font-weight: 500;
                letter-spacing: 0.05em;
                flex: 1;
            }

            /* body */
            .mgr-body {
                padding: 10px;
            }

            /* separator */
            .mgr-sep {
                border: none;
                border-top: 1px solid #2e2e2e;
                margin: 8px 0;
            }

            /* label row */
            .mgr-row {
                display: flex;
                align-items: center;
                margin-bottom: 6px;
                gap: 6px;
            }
            .mgr-label {
                color: #888;
                font-size: 10px;
                flex: 1;
                white-space: nowrap;
            }
            .mgr-value {
                color: #ccc;
                font-size: 10px;
                min-width: 32px;
                text-align: right;
            }

            /* slider */
            .mgr-slider-wrap {
                margin-bottom: 2px;
            }
            .mgr-slider {
                width: 100%;
                -webkit-appearance: none;
                appearance: none;
                height: 3px;
                border-radius: 2px;
                background: #333;
                outline: none;
                cursor: pointer;
            }
            .mgr-slider::-webkit-slider-thumb {
                -webkit-appearance: none;
                width: 12px;
                height: 12px;
                border-radius: 50%;
                background: #e0e0e0;
                border: 2px solid #555;
                cursor: pointer;
                box-shadow: 0 1px 4px rgba(0,0,0,0.5);
                transition: background 0.1s, border-color 0.1s;
            }
            .mgr-slider::-webkit-slider-thumb:hover {
                background: #fff;
                border-color: #888;
            }
            .mgr-slider:focus::-webkit-slider-thumb {
                background: #fff;
                border-color: #aaa;
                box-shadow: 0 0 0 2px rgba(255,255,255,0.1);
            }

            /* section heading */
            .mgr-section-title {
                color: #555;
                font-size: 8.5px;
                letter-spacing: 0.18em;
                text-transform: uppercase;
                margin-bottom: 7px;
            }

            /* warning note */
            .mgr-note {
                color: #c97c2e;
                font-size: 9px;
                margin-top: 2px;
                margin-bottom: 8px;
                padding: 4px 6px;
                background: rgba(201, 124, 46, 0.08);
                border-left: 2px solid #c97c2e55;
                border-radius: 0 2px 2px 0;
                line-height: 1.5;
            }

            /* activate button */
            .mgr-btn {
                width: 100%;
                padding: 6px 0;
                cursor: pointer;
                background: #2a2a2a;
                color: #888;
                border: 1px solid #3a3a3a;
                border-radius: 3px;
                font-family: 'JetBrains Mono', monospace;
                font-size: 10px;
                font-weight: 500;
                letter-spacing: 0.1em;
                text-transform: uppercase;
                transition: all 0.1s;
                margin-top: 2px;
            }
            .mgr-btn:hover {
                background: #333;
                color: #bbb;
                border-color: #555;
            }
            .mgr-btn.on {
                background: #2a2210;
                color: #d4a017;
                border-color: #5a4510;
                box-shadow: 0 0 8px rgba(212, 160, 23, 0.15);
            }
            .mgr-btn.on:hover {
                background: #332910;
                border-color: #7a5e18;
            }

            /* status indicator */
            .mgr-status {
                display: flex;
                align-items: center;
                gap: 5px;
                margin-top: 8px;
                padding: 4px 6px;
                background: #252525;
                border-radius: 2px;
            }
            .mgr-status-dot {
                width: 5px; height: 5px;
                border-radius: 50%;
                background: #444;
                flex-shrink: 0;
            }
            .mgr-status-dot.on { background: #d4a017; box-shadow: 0 0 4px #d4a017; }
            .mgr-status-text {
                color: #555;
                font-size: 9px;
                letter-spacing: 0.05em;
            }
            .mgr-status-text.on { color: #d4a017; }
        `;
        document.head.appendChild(style);

        const ui = document.createElement('div');
        ui.id = 'mgr-ui';

        ui.innerHTML = `
            <div class="mgr-window">
                <div class="mgr-titlebar" id="mgr-titlebar">
                    <div class="mgr-titlebar-dot" id="mgr-tbar-dot"></div>
                    <div class="mgr-titlebar-title">golden ratio v2</div>
                </div>
                <div class="mgr-body">

                    <div class="mgr-section-title">output</div>
                    <button class="mgr-btn" id="mgr-activate">activate</button>
                    <div class="mgr-status">
                        <div class="mgr-status-dot" id="mgr-status-dot"></div>
                        <span class="mgr-status-text" id="mgr-status-text">inactive</span>
                    </div>

                    <hr class="mgr-sep">

                    <div class="mgr-section-title">face</div>
                    <div class="mgr-row">
                        <span class="mgr-label">Philtrum Y</span>
                        <span class="mgr-value" id="mgr-philtrum-val">${faceConfig.philtrumY.toFixed(1)}</span>
                    </div>
                    <div class="mgr-slider-wrap">
                        <input type="range" class="mgr-slider" id="mgr-philtrum"
                            min="15" max="17" step="0.1" value="${faceConfig.philtrumY}">
                    </div>

                    <hr class="mgr-sep">

                    <div class="mgr-section-title">safety</div>
                    <div class="mgr-row">
                        <span class="mgr-label">Jitter</span>
                        <span class="mgr-value" id="mgr-jitter-val">${jitterAmount.toFixed(2)}</span>
                    </div>
                    <div class="mgr-slider-wrap">
                        <input type="range" class="mgr-slider" id="mgr-jitter"
                            min="0.0" max="2.0" step="0.01" value="${jitterAmount}">
                    </div>
                    <div class="mgr-note">⚠ values below 0.10 may result in ban</div>

                    <hr class="mgr-sep">

                    <div class="mgr-section-title">automation</div>
                    <button class="mgr-btn" id="mgr-autoqueue">auto queue</button>

                </div>
            </div>
        `;

        document.body.appendChild(ui);

        const jitterSlider = ui.querySelector('#mgr-jitter');
        const jitterVal = ui.querySelector('#mgr-jitter-val');
        const activateBtn = ui.querySelector('#mgr-activate');
        const statusDot = ui.querySelector('#mgr-status-dot');
        const statusText = ui.querySelector('#mgr-status-text');
        const tbarDot = ui.querySelector('#mgr-tbar-dot');

        const philtrumSlider = ui.querySelector('#mgr-philtrum');
        const philtrumVal = ui.querySelector('#mgr-philtrum-val');

        philtrumSlider.addEventListener('input', () => {
            faceConfig.philtrumY = parseFloat(philtrumSlider.value);
            philtrumVal.textContent = faceConfig.philtrumY.toFixed(1);
        });

        jitterSlider.addEventListener('input', () => {
            jitterAmount = parseFloat(jitterSlider.value);
            jitterVal.textContent = jitterAmount.toFixed(2);
        });

        activateBtn.addEventListener('click', () => {
            active = !active;
            activateBtn.textContent = active ? 'deactivate' : 'activate';
            activateBtn.classList.toggle('on', active);
            statusDot.classList.toggle('on', active);
            statusText.classList.toggle('on', active);
            statusText.textContent = active ? 'running' : 'inactive';
            tbarDot.classList.toggle('active-dot', active);
        });

        let autoQueue = false;
        let autoQueueInterval = null;
        const autoQueueBtn = ui.querySelector('#mgr-autoqueue');

        function tryClickQueue() {
            const btn = document.querySelector('button.w-full.flex.items-center.justify-center.rounded-xl.border.border-cyan-400\\/55');
            if (btn && !btn.disabled) btn.click();
        }

        autoQueueBtn.addEventListener('click', () => {
            autoQueue = !autoQueue;
            autoQueueBtn.textContent = autoQueue ? 'auto queue: on' : 'auto queue';
            autoQueueBtn.classList.toggle('on', autoQueue);
            if (autoQueue) {
                tryClickQueue();
                autoQueueInterval = setInterval(tryClickQueue, queueDelaySecs * 1000);
            } else {
                clearInterval(autoQueueInterval);
                autoQueueInterval = null;
            }
        });

        // Drag
        let dragging = false, ox = 0, oy = 0;
        const titlebar = ui.querySelector('#mgr-titlebar');
        titlebar.addEventListener('mousedown', (e) => {
            dragging = true;
            ox = e.clientX - ui.offsetLeft;
            oy = e.clientY - ui.offsetTop;
            e.preventDefault();
        });
        document.addEventListener('mousemove', (e) => {
            if (!dragging) return;
            ui.style.left = (e.clientX - ox) + 'px';
            ui.style.top = (e.clientY - oy) + 'px';
        });
        document.addEventListener('mouseup', () => { dragging = false; });
    }

    setInterval(injectUI, 1000);
})();