您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Auto-skip chats based on country (persisted) and if "You have disconnected" appears, simulate an ESC key press after a randomized delay.
当前为
- // ==UserScript==
- // @name Uhmegle AutoSkip with Persistent Country List and Disconnect Detection (Randomized Intervals)
- // @namespace http://tampermonkey.net/
- // @version 1.3.1
- // @description Auto-skip chats based on country (persisted) and if "You have disconnected" appears, simulate an ESC key press after a randomized delay.
- // @match *://uhmegle.com/*
- // @grant none
- // @license GNU GPLv3
- // ==/UserScript==
- (function() {
- 'use strict';
- // -------------------------------
- // Persistent Country List Settings
- // -------------------------------
- const storageKey = 'uhmegleAutoSkipCountries';
- // Retrieve stored auto-skip country settings or initialize as empty.
- let autoSkipCountries = JSON.parse(localStorage.getItem(storageKey)) || {};
- // Save changes to localStorage.
- function saveAutoSkipCountries() {
- localStorage.setItem(storageKey, JSON.stringify(autoSkipCountries));
- }
- // Create and style a panel for the country list.
- const panel = document.createElement('div');
- panel.style.position = 'fixed';
- panel.style.top = '10px';
- panel.style.right = '10px';
- panel.style.backgroundColor = 'white';
- panel.style.border = '1px solid #ccc';
- panel.style.padding = '10px';
- panel.style.zIndex = 10000;
- panel.style.maxHeight = '300px';
- panel.style.overflowY = 'auto';
- panel.innerHTML = '<h4>AutoSkip Countries</h4><div id="countryList"></div>';
- document.body.appendChild(panel);
- // Update the panel with the list of countries and their auto-skip checkbox.
- function updateCountryListUI() {
- const listDiv = document.getElementById('countryList');
- listDiv.innerHTML = '';
- for (const country in autoSkipCountries) {
- const label = document.createElement('label');
- label.style.display = 'block';
- label.style.marginBottom = '5px';
- const checkbox = document.createElement('input');
- checkbox.type = 'checkbox';
- checkbox.checked = autoSkipCountries[country];
- checkbox.addEventListener('change', function() {
- autoSkipCountries[country] = this.checked;
- saveAutoSkipCountries();
- });
- label.appendChild(checkbox);
- label.appendChild(document.createTextNode(' ' + country));
- listDiv.appendChild(label);
- }
- }
- updateCountryListUI();
- // -------------------------------
- // ESC Key Simulation Functions
- // -------------------------------
- // Function to simulate one ESC key press.
- function simulateEsc() {
- const escEvent = new KeyboardEvent('keydown', {
- key: 'Escape',
- code: 'Escape',
- keyCode: 27,
- which: 27,
- bubbles: true,
- cancelable: true
- });
- document.dispatchEvent(escEvent);
- }
- // Function to simulate two ESC key presses.
- function simulateSkip() {
- console.log('Simulating ESC key presses for auto-skip...');
- simulateEsc();
- // Random delay between 400ms and 600ms.
- const randomDelay = 400 + Math.random() * 200;
- setTimeout(simulateEsc, randomDelay);
- }
- // -------------------------------
- // Monitor for Country Changes
- // -------------------------------
- let lastCountry = '';
- function checkCountry() {
- const countryElem = document.getElementById('countryName');
- if (countryElem) {
- const currentCountry = countryElem.textContent.trim();
- if (currentCountry && currentCountry !== lastCountry) {
- lastCountry = currentCountry;
- // Add new country if not already present.
- if (!(currentCountry in autoSkipCountries)) {
- autoSkipCountries[currentCountry] = false; // default auto-skip off
- saveAutoSkipCountries();
- updateCountryListUI();
- }
- // If auto-skip is enabled for this country, simulate the skip.
- if (autoSkipCountries[currentCountry]) {
- simulateSkip();
- }
- }
- }
- }
- // Use a recursive function to randomize interval between country checks.
- function scheduleCountryCheck() {
- checkCountry();
- const nextDelay = 800 + Math.random() * 400; // 800ms to 1200ms
- setTimeout(scheduleCountryCheck, nextDelay);
- }
- scheduleCountryCheck();
- // Also observe DOM changes in case the country element is loaded dynamically.
- const countryObserver = new MutationObserver(checkCountry);
- countryObserver.observe(document.body, { childList: true, subtree: true });
- // -------------------------------
- // Monitor for "You have disconnected" Text
- // -------------------------------
- let disconnectTriggered = false;
- function checkForDisconnect() {
- // Check if the phrase "You have disconnected" appears anywhere in the visible text.
- const pageText = document.body.innerText || "";
- const found = pageText.includes("You have disconnected");
- if (found && !disconnectTriggered) {
- disconnectTriggered = true;
- console.log('"You have disconnected" detected. Simulating ESC key press after a random delay...');
- // Random delay between 400ms and 600ms before simulating an ESC key press.
- const randomDelay = 400 + Math.random() * 200;
- setTimeout(simulateEsc, randomDelay);
- } else if (!found && disconnectTriggered) {
- disconnectTriggered = false;
- }
- }
- // Recursive check for disconnect with random interval.
- function scheduleDisconnectCheck() {
- checkForDisconnect();
- const nextDelay = 800 + Math.random() * 400;
- setTimeout(scheduleDisconnectCheck, nextDelay);
- }
- scheduleDisconnectCheck();
- // -------------------------------
- // End of Script
- // -------------------------------
- })();