您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Auto-skip chats based on pre-configured country list (195 countries enabled by default) and if "You have disconnected" appears, simulate an ESC key press after a randomized delay.
// ==UserScript== // @name Uhmegle AutoSkip v2 // @namespace http://tampermonkey.net/ // @version 2.1.0 // @description Auto-skip chats based on pre-configured country list (195 countries enabled by default) and if "You have disconnected" appears, simulate an ESC key press after a randomized delay. // @author 01 dev // @match *://uhmegle.com/* // @grant none // @license MIT // @supportURL https://discord.gg/69mE7xjghp // @donation Bitcoin: 3EMEWx5b5wwfaf5NKAQzW1sWHDYwFGEqw2 // ==/UserScript== /** * ============================================================================ * UHMEGLE AUTOSKIP V2 * Advanced Country Filtering System * ============================================================================ * * DEVELOPED BY: 01 DEV * ★ Premium Userscript Creator ★ * * ============================================================================ * * INTRODUCTION: * Welcome to Uhmegle AutoSkip v2, crafted by 01 dev - a cutting-edge userscript * that revolutionizes your Uhmegle experience through intelligent country-based * filtering and advanced automation features. * * CREATOR EXPERTISE (01 dev): * ✓ Advanced JavaScript Engineering * ✓ Modern CSS3 & Dark Theme Design * ✓ UI/UX Optimization & Animation * ✓ Browser Extension Development * ✓ Real-time Data Processing * ✓ Persistent Storage Architecture * * TECHNICAL IMPLEMENTATION BY 01 DEV: * • CSS: Glass morphism dark theme with advanced animations * • JavaScript: Sophisticated filtering algorithms and UI interactions * • Design: Responsive layout with intuitive user experience * • Performance: Optimized code for seamless operation * * PREMIUM FEATURES: * • Auto-skip 195 comprehensive country list * • Real-time search and intelligent filtering * • Bulk actions for efficient management * • Persistent settings with local storage * • Professional dark UI design * • Advanced disconnect detection & recovery * • Drag & drop panel positioning * • One-click Bitcoin donation integration * * CONNECT WITH 01 DEV: * Discord Community: https://discord.gg/69mE7xjghp * Bitcoin Donations: 3EMEWx5b5wwfaf5NKAQzW1sWHDYwFGEqw2 * * ============================================================================ * © 2024 01 dev - All Rights Reserved * ============================================================================ */ (function() { 'use strict'; // ------------------------------- // Persistent Country List Settings // ------------------------------- const storageKey = 'uhmegleAutoSkipCountries'; // Default countries to auto-skip (all enabled by default) const defaultAutoSkipCountries = { 'Afghanistan': true, 'Albania': true, 'Algeria': true, 'Andorra': true, 'Angola': true, 'Antigua and Barbuda': true, 'Argentina': true, 'Armenia': true, 'Australia': true, 'Austria': true, 'Azerbaijan': true, 'Bahamas': true, 'Bahrain': true, 'Bangladesh': true, 'Barbados': true, 'Belarus': true, 'Belgium': true, 'Belize': true, 'Benin': true, 'Bhutan': true, 'Bolivia': true, 'Bosnia and Herzegovina': true, 'Botswana': true, 'Brazil': true, 'Brunei': true, 'Bulgaria': true, 'Burkina Faso': true, 'Burundi': true, 'Cabo Verde': true, 'Cambodia': true, 'Cameroon': true, 'Canada': true, 'Central African Republic': true, 'Chad': true, 'Chile': true, 'China': true, 'Colombia': true, 'Comoros': true, 'Congo (Congo-Brazzaville)': true, 'Costa Rica': true, 'Côte d\'Ivoire': true, 'Croatia': true, 'Cuba': true, 'Cyprus': true, 'Czechia (Czech Republic)': true, 'Democratic Republic of the Congo': true, 'Denmark': true, 'Djibouti': true, 'Dominica': true, 'Dominican Republic': true, 'Ecuador': true, 'Egypt': true, 'El Salvador': true, 'Equatorial Guinea': true, 'Eritrea': true, 'Estonia': true, 'Eswatini (formerly Swaziland)': true, 'Ethiopia': true, 'Fiji': true, 'Finland': true, 'France': true, 'Gabon': true, 'Gambia': true, 'Georgia': true, 'Germany': true, 'Ghana': true, 'Greece': true, 'Grenada': true, 'Guatemala': true, 'Guinea': true, 'Guinea-Bissau': true, 'Guyana': true, 'Haiti': true, 'Holy See': true, 'Honduras': true, 'Hungary': true, 'Iceland': true, 'India': true, 'Indonesia': true, 'Iran': true, 'Iraq': true, 'Ireland': true, 'Israel': true, 'Italy': true, 'Jamaica': true, 'Japan': true, 'Jordan': true, 'Kazakhstan': true, 'Kenya': true, 'Kiribati': true, 'Kuwait': true, 'Kyrgyzstan': true, 'Laos': true, 'Latvia': true, 'Lebanon': true, 'Lesotho': true, 'Liberia': true, 'Libya': true, 'Liechtenstein': true, 'Lithuania': true, 'Luxembourg': true, 'Madagascar': true, 'Malawi': true, 'Malaysia': true, 'Maldives': true, 'Mali': true, 'Malta': true, 'Marshall Islands': true, 'Mauritania': true, 'Mauritius': true, 'Mexico': true, 'Micronesia': true, 'Moldova': true, 'Monaco': true, 'Mongolia': true, 'Montenegro': true, 'Morocco': true, 'Mozambique': true, 'Myanmar (formerly Burma)': true, 'Namibia': true, 'Nauru': true, 'Nepal': true, 'Netherlands': true, 'New Zealand': true, 'Nicaragua': true, 'Niger': true, 'Nigeria': true, 'North Korea (Democratic People\'s Republic of Korea)': true, 'North Macedonia': true, 'Norway': true, 'Oman': true, 'Pakistan': true, 'Palau': true, 'Palestine': true, 'Panama': true, 'Papua New Guinea': true, 'Paraguay': true, 'Peru': true, 'Philippines': true, 'Poland': true, 'Portugal': true, 'Qatar': true, 'Romania': true, 'Russia (Russian Federation)': true, 'Rwanda': true, 'Saint Kitts and Nevis': true, 'Saint Lucia': true, 'Saint Vincent and the Grenadines': true, 'Samoa': true, 'San Marino': true, 'Sao Tome and Principe': true, 'Saudi Arabia': true, 'Senegal': true, 'Serbia': true, 'Seychelles': true, 'Sierra Leone': true, 'Singapore': true, 'Slovakia': true, 'Slovenia': true, 'Solomon Islands': true, 'Somalia': true, 'South Africa': true, 'South Korea (Republic of Korea)': true, 'South Sudan': true, 'Spain': true, 'Sri Lanka': true, 'Sudan': true, 'Suriname': true, 'Sweden': true, 'Switzerland': true, 'Syria': true, 'Tajikistan': true, 'Tanzania': true, 'Thailand': true, 'Timor-Leste (East Timor)': true, 'Togo': true, 'Tonga': true, 'Trinidad and Tobago': true, 'Tunisia': true, 'Turkey': true, 'Turkmenistan': true, 'Tuvalu': true, 'Uganda': true, 'Ukraine': true, 'United Arab Emirates': true, 'United Kingdom': true, 'United States': true, 'Uruguay': true, 'Uzbekistan': true, 'Vanuatu': true, 'Venezuela': true, 'Vietnam': true, 'Yemen': true, 'Zambia': true, 'Zimbabwe': true }; // Retrieve stored auto-skip country settings or initialize with defaults let storedCountries = JSON.parse(localStorage.getItem(storageKey)) || {}; // Merge stored settings with default countries (stored settings take precedence) let autoSkipCountries = { ...defaultAutoSkipCountries, ...storedCountries }; // Country flag emoji mapping const countryFlags = { 'Afghanistan': '🇦🇫', 'Albania': '🇦🇱', 'Algeria': '🇩🇿', 'Andorra': '🇦🇩', 'Angola': '🇦🇴', 'Antigua and Barbuda': '🇦🇬', 'Argentina': '🇦🇷', 'Armenia': '🇦🇲', 'Australia': '🇦🇺', 'Austria': '🇦🇹', 'Azerbaijan': '🇦🇿', 'Bahamas': '🇧🇸', 'Bahrain': '🇧🇭', 'Bangladesh': '🇧🇩', 'Barbados': '🇧🇧', 'Belarus': '🇧🇾', 'Belgium': '🇧🇪', 'Belize': '🇧🇿', 'Benin': '🇧🇯', 'Bhutan': '🇧🇹', 'Bolivia': '🇧🇴', 'Bosnia and Herzegovina': '🇧🇦', 'Botswana': '🇧🇼', 'Brazil': '🇧🇷', 'Brunei': '🇧🇳', 'Bulgaria': '🇧🇬', 'Burkina Faso': '🇧🇫', 'Burundi': '🇧🇮', 'Cabo Verde': '🇨🇻', 'Cambodia': '🇰🇭', 'Cameroon': '🇨🇲', 'Canada': '🇨🇦', 'Central African Republic': '🇨🇫', 'Chad': '🇹🇩', 'Chile': '🇨🇱', 'China': '🇨🇳', 'Colombia': '🇨🇴', 'Comoros': '🇰🇲', 'Congo (Congo-Brazzaville)': '🇨🇬', 'Costa Rica': '🇨🇷', 'Côte d\'Ivoire': '🇨🇮', 'Croatia': '🇭🇷', 'Cuba': '🇨🇺', 'Cyprus': '🇨🇾', 'Czechia (Czech Republic)': '🇨🇿', 'Democratic Republic of the Congo': '🇨🇩', 'Denmark': '🇩🇰', 'Djibouti': '🇩🇯', 'Dominica': '🇩🇲', 'Dominican Republic': '🇩🇴', 'Ecuador': '🇪🇨', 'Egypt': '🇪🇬', 'El Salvador': '🇸🇻', 'Equatorial Guinea': '🇬🇶', 'Eritrea': '🇪🇷', 'Estonia': '🇪🇪', 'Eswatini (formerly Swaziland)': '🇸🇿', 'Ethiopia': '🇪🇹', 'Fiji': '🇫🇯', 'Finland': '🇫🇮', 'France': '🇫🇷', 'Gabon': '🇬🇦', 'Gambia': '🇬🇲', 'Georgia': '🇬🇪', 'Germany': '🇩🇪', 'Ghana': '🇬🇭', 'Greece': '🇬🇷', 'Grenada': '🇬🇩', 'Guatemala': '🇬🇹', 'Guinea': '🇬🇳', 'Guinea-Bissau': '🇬🇼', 'Guyana': '🇬🇾', 'Haiti': '🇭🇹', 'Holy See': '🇻🇦', 'Honduras': '🇭🇳', 'Hungary': '🇭🇺', 'Iceland': '🇮🇸', 'India': '🇮🇳', 'Indonesia': '🇮🇩', 'Iran': '🇮🇷', 'Iraq': '🇮🇶', 'Ireland': '🇮🇪', 'Israel': '🇮🇱', 'Italy': '🇮🇹', 'Jamaica': '🇯🇲', 'Japan': '🇯🇵', 'Jordan': '🇯🇴', 'Kazakhstan': '🇰🇿', 'Kenya': '🇰🇪', 'Kiribati': '🇰🇮', 'Kuwait': '🇰🇼', 'Kyrgyzstan': '🇰🇬', 'Laos': '🇱🇦', 'Latvia': '🇱🇻', 'Lebanon': '🇱🇧', 'Lesotho': '🇱🇸', 'Liberia': '🇱🇷', 'Libya': '🇱🇾', 'Liechtenstein': '🇱🇮', 'Lithuania': '🇱🇹', 'Luxembourg': '🇱🇺', 'Madagascar': '🇲🇬', 'Malawi': '🇲🇼', 'Malaysia': '🇲🇾', 'Maldives': '🇲🇻', 'Mali': '🇲🇱', 'Malta': '🇲🇹', 'Marshall Islands': '🇲🇭', 'Mauritania': '🇲🇷', 'Mauritius': '🇲🇺', 'Mexico': '🇲🇽', 'Micronesia': '🇫🇲', 'Moldova': '🇲🇩', 'Monaco': '🇲🇨', 'Mongolia': '🇲🇳', 'Montenegro': '🇲🇪', 'Morocco': '🇲🇦', 'Mozambique': '🇲🇿', 'Myanmar (formerly Burma)': '🇲🇲', 'Namibia': '🇳🇦', 'Nauru': '🇳🇷', 'Nepal': '🇳🇵', 'Netherlands': '🇳🇱', 'New Zealand': '🇳🇿', 'Nicaragua': '🇳🇮', 'Niger': '🇳🇪', 'Nigeria': '🇳🇬', 'North Korea (Democratic People\'s Republic of Korea)': '🇰🇵', 'North Macedonia': '🇲🇰', 'Norway': '🇳🇴', 'Oman': '🇴🇲', 'Pakistan': '🇵🇰', 'Palau': '🇵🇼', 'Palestine': '🇵🇸', 'Panama': '🇵🇦', 'Papua New Guinea': '🇵🇬', 'Paraguay': '🇵🇾', 'Peru': '🇵🇪', 'Philippines': '🇵🇭', 'Poland': '🇵🇱', 'Portugal': '🇵🇹', 'Qatar': '🇶🇦', 'Romania': '🇷🇴', 'Russia (Russian Federation)': '🇷🇺', 'Rwanda': '🇷🇼', 'Saint Kitts and Nevis': '🇰🇳', 'Saint Lucia': '🇱🇨', 'Saint Vincent and the Grenadines': '🇻🇨', 'Samoa': '🇼🇸', 'San Marino': '🇸🇲', 'Sao Tome and Principe': '🇸🇹', 'Saudi Arabia': '🇸🇦', 'Senegal': '🇸🇳', 'Serbia': '🇷🇸', 'Seychelles': '🇸🇨', 'Sierra Leone': '🇸🇱', 'Singapore': '🇸🇬', 'Slovakia': '🇸🇰', 'Slovenia': '🇸🇮', 'Solomon Islands': '🇸🇧', 'Somalia': '🇸🇴', 'South Africa': '🇿🇦', 'South Korea (Republic of Korea)': '🇰🇷', 'South Sudan': '🇸🇸', 'Spain': '🇪🇸', 'Sri Lanka': '🇱🇰', 'Sudan': '🇸🇩', 'Suriname': '🇸🇷', 'Sweden': '🇸🇪', 'Switzerland': '🇨🇭', 'Syria': '🇸🇾', 'Tajikistan': '🇹🇯', 'Tanzania': '🇹🇿', 'Thailand': '🇹🇭', 'Timor-Leste (East Timor)': '🇹🇱', 'Togo': '🇹🇬', 'Tonga': '🇹🇴', 'Trinidad and Tobago': '🇹🇹', 'Tunisia': '🇹🇳', 'Turkey': '🇹🇷', 'Turkmenistan': '🇹🇲', 'Tuvalu': '🇹🇻', 'Uganda': '🇺🇬', 'Ukraine': '🇺🇦', 'United Arab Emirates': '🇦🇪', 'United Kingdom': '🇬🇧', 'United States': '🇺🇸', 'Uruguay': '🇺🇾', 'Uzbekistan': '🇺🇿', 'Vanuatu': '🇻🇺', 'Venezuela': '🇻🇪', 'Vietnam': '🇻🇳', 'Yemen': '🇾🇪', 'Zambia': '🇿🇲', 'Zimbabwe': '🇿🇼' }; // Save changes to localStorage. function saveAutoSkipCountries() { localStorage.setItem(storageKey, JSON.stringify(autoSkipCountries)); } // Create and style a modern dark panel for the country list const panel = document.createElement('div'); panel.style.cssText = ` position: fixed; top: 20px; right: 20px; width: 340px; max-height: 520px; background: linear-gradient(145deg, #0a0a1f 0%, #1a1a2e 30%, #16213e 60%, #0f3460 100%); border: 2px solid rgba(100, 181, 246, 0.3); border-radius: 20px; padding: 0; z-index: 10000; box-shadow: 0 25px 50px rgba(0, 0, 0, 0.7), 0 0 0 1px rgba(255, 255, 255, 0.1), inset 0 1px 0 rgba(255, 255, 255, 0.1); font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Inter', sans-serif; backdrop-filter: blur(25px); overflow: hidden; transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1); transform: translateZ(0); `; // Create header const header = document.createElement('div'); header.style.cssText = ` background: linear-gradient(135deg, rgba(100, 181, 246, 0.15) 0%, rgba(0, 0, 0, 0.4) 100%); padding: 18px 24px; border-bottom: 1px solid rgba(100, 181, 246, 0.3); display: flex; justify-content: space-between; align-items: center; backdrop-filter: blur(15px); position: relative; `; // Add subtle glow effect to header header.style.setProperty('--glow', '0 0 20px rgba(100, 181, 246, 0.2)'); header.style.boxShadow = 'var(--glow)'; const title = document.createElement('h4'); title.innerHTML = 'AutoSkip <span style="color: #64b5f6; font-weight: 700;">v2</span>'; title.style.cssText = ` margin: 0; color: #ffffff; font-size: 18px; font-weight: 600; text-shadow: 0 2px 8px rgba(0, 0, 0, 0.5), 0 0 20px rgba(100, 181, 246, 0.3); letter-spacing: 0.8px; text-transform: uppercase; `; // Add toggle button for minimize/expand const toggleBtn = document.createElement('button'); toggleBtn.innerHTML = '−'; toggleBtn.style.cssText = ` background: linear-gradient(135deg, rgba(100, 181, 246, 0.2) 0%, rgba(255, 255, 255, 0.1) 100%); border: 2px solid rgba(100, 181, 246, 0.4); color: #ffffff; width: 32px; height: 32px; border-radius: 50%; cursor: pointer; font-size: 18px; font-weight: bold; display: flex; align-items: center; justify-content: center; transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1); backdrop-filter: blur(15px); box-shadow: 0 4px 15px rgba(100, 181, 246, 0.2); `; toggleBtn.addEventListener('mouseenter', () => { toggleBtn.style.background = 'linear-gradient(135deg, rgba(100, 181, 246, 0.4) 0%, rgba(255, 255, 255, 0.2) 100%)'; toggleBtn.style.transform = 'scale(1.15) rotate(5deg)'; toggleBtn.style.boxShadow = '0 8px 25px rgba(100, 181, 246, 0.4), 0 0 30px rgba(100, 181, 246, 0.3)'; toggleBtn.style.borderColor = 'rgba(100, 181, 246, 0.6)'; }); toggleBtn.addEventListener('mouseleave', () => { toggleBtn.style.background = 'linear-gradient(135deg, rgba(100, 181, 246, 0.2) 0%, rgba(255, 255, 255, 0.1) 100%)'; toggleBtn.style.transform = 'scale(1) rotate(0deg)'; toggleBtn.style.boxShadow = '0 4px 15px rgba(100, 181, 246, 0.2)'; toggleBtn.style.borderColor = 'rgba(100, 181, 246, 0.4)'; }); header.appendChild(title); header.appendChild(toggleBtn); // Create content container const content = document.createElement('div'); content.style.cssText = ` background: linear-gradient(180deg, rgba(10, 10, 31, 0.95) 0%, rgba(26, 26, 46, 0.9) 100%); max-height: 420px; overflow-y: auto; transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1); backdrop-filter: blur(15px); border-top: 1px solid rgba(100, 181, 246, 0.1); `; // Create stats bar const statsBar = document.createElement('div'); statsBar.style.cssText = ` padding: 14px 24px; background: linear-gradient(135deg, rgba(100, 181, 246, 0.1) 0%, rgba(15, 52, 96, 0.2) 100%); border-bottom: 1px solid rgba(100, 181, 246, 0.2); font-size: 12px; color: #64b5f6; font-weight: 600; text-shadow: 0 1px 3px rgba(0, 0, 0, 0.5); `; // Create country list container const countryListContainer = document.createElement('div'); countryListContainer.id = 'countryList'; countryListContainer.style.cssText = ` padding: 12px; max-height: 320px; overflow-y: auto; background: rgba(26, 26, 46, 0.8); `; // Custom animations const animationStyle = document.createElement('style'); animationStyle.textContent = ` @keyframes fadeIn { from { opacity: 0; transform: translateY(-8px) scale(0.95); } to { opacity: 1; transform: translateY(0) scale(1); } } @keyframes pulse { 0% { transform: scale(1); } 50% { transform: scale(1.4); filter: brightness(1.5); } 100% { transform: scale(1); } } @keyframes glow { 0%, 100% { box-shadow: 0 0 15px rgba(100, 181, 246, 0.3); } 50% { box-shadow: 0 0 25px rgba(100, 181, 246, 0.6); } } #countryList::-webkit-scrollbar { width: 10px; } #countryList::-webkit-scrollbar-track { background: rgba(0, 0, 0, 0.3); border-radius: 5px; border: 1px solid rgba(100, 181, 246, 0.1); } #countryList::-webkit-scrollbar-thumb { background: linear-gradient(135deg, rgba(100, 181, 246, 0.6) 0%, rgba(100, 181, 246, 0.8) 100%); border-radius: 5px; border: 1px solid rgba(100, 181, 246, 0.3); } #countryList::-webkit-scrollbar-thumb:hover { background: linear-gradient(135deg, rgba(100, 181, 246, 0.8) 0%, rgba(100, 181, 246, 1) 100%); box-shadow: 0 0 10px rgba(100, 181, 246, 0.5); } `; document.head.appendChild(animationStyle); // Create search input const searchContainer = document.createElement('div'); searchContainer.style.cssText = ` padding: 16px 20px; border-bottom: 1px solid rgba(100, 181, 246, 0.2); background: linear-gradient(135deg, rgba(0, 0, 0, 0.3) 0%, rgba(100, 181, 246, 0.05) 100%); `; const searchInput = document.createElement('input'); searchInput.type = 'text'; searchInput.placeholder = '🔍 Search countries...'; searchInput.style.cssText = ` width: 100%; padding: 12px 18px; border: 2px solid rgba(100, 181, 246, 0.3); border-radius: 15px; font-size: 14px; background: rgba(0, 0, 0, 0.4); color: #ffffff; transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1); outline: none; backdrop-filter: blur(10px); box-shadow: inset 0 2px 10px rgba(0, 0, 0, 0.3); font-weight: 500; `; searchInput.addEventListener('focus', () => { searchInput.style.borderColor = '#64b5f6'; searchInput.style.boxShadow = '0 0 0 4px rgba(100, 181, 246, 0.2), inset 0 2px 10px rgba(0, 0, 0, 0.3), 0 0 30px rgba(100, 181, 246, 0.1)'; searchInput.style.background = 'rgba(0, 0, 0, 0.5)'; searchInput.style.transform = 'scale(1.02)'; }); searchInput.addEventListener('blur', () => { searchInput.style.borderColor = 'rgba(100, 181, 246, 0.3)'; searchInput.style.boxShadow = 'inset 0 2px 10px rgba(0, 0, 0, 0.3)'; searchInput.style.background = 'rgba(0, 0, 0, 0.4)'; searchInput.style.transform = 'scale(1)'; }); searchContainer.appendChild(searchInput); // Create bulk actions bar const bulkActions = document.createElement('div'); bulkActions.style.cssText = ` padding: 8px 15px; background: rgba(88, 101, 242, 0.05); border-bottom: 1px solid rgba(88, 101, 242, 0.1); display: flex; gap: 8px; justify-content: space-between; align-items: center; `; const bulkBtnStyle = ` padding: 6px 10px; border: 1px solid rgba(255, 255, 255, 0.2); border-radius: 8px; font-size: 11px; font-weight: 500; cursor: pointer; transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); color: white; backdrop-filter: blur(10px); `; const enableAllBtn = document.createElement('button'); enableAllBtn.textContent = '✅ Enable All'; enableAllBtn.style.cssText = bulkBtnStyle + 'background: rgba(76, 175, 80, 0.3);'; const disableAllBtn = document.createElement('button'); disableAllBtn.textContent = '❌ Disable All'; disableAllBtn.style.cssText = bulkBtnStyle + 'background: rgba(244, 67, 54, 0.3);'; const resetBtn = document.createElement('button'); resetBtn.textContent = '🔄 Reset'; resetBtn.style.cssText = bulkBtnStyle + 'background: rgba(255, 152, 0, 0.3);'; [enableAllBtn, disableAllBtn, resetBtn].forEach(btn => { btn.addEventListener('mouseenter', () => { btn.style.transform = 'translateY(-2px) scale(1.05)'; btn.style.boxShadow = '0 4px 15px rgba(255, 255, 255, 0.2)'; btn.style.borderColor = 'rgba(255, 255, 255, 0.4)'; }); btn.addEventListener('mouseleave', () => { btn.style.transform = 'translateY(0) scale(1)'; btn.style.boxShadow = 'none'; btn.style.borderColor = 'rgba(255, 255, 255, 0.2)'; }); }); bulkActions.appendChild(enableAllBtn); bulkActions.appendChild(disableAllBtn); bulkActions.appendChild(resetBtn); // Create footer with Discord and donation info const footer = document.createElement('div'); footer.style.cssText = ` padding: 8px 16px; background: rgba(0, 0, 0, 0.4); border-top: 1px solid rgba(255, 255, 255, 0.1); font-size: 10px; color: rgba(255, 255, 255, 0.7); display: flex; flex-direction: column; gap: 4px; `; const topRow = document.createElement('div'); topRow.style.cssText = ` display: flex; justify-content: space-between; align-items: center; `; const discordLink = document.createElement('a'); discordLink.href = 'https://discord.gg/69mE7xjghp'; discordLink.target = '_blank'; discordLink.textContent = '💬 Discord'; discordLink.style.cssText = ` color: #7289da; text-decoration: none; font-weight: 500; transition: all 0.2s ease; `; discordLink.addEventListener('mouseenter', () => { discordLink.style.color = '#ffffff'; discordLink.style.textShadow = '0 0 8px #7289da'; }); discordLink.addEventListener('mouseleave', () => { discordLink.style.color = '#7289da'; discordLink.style.textShadow = 'none'; }); const donationInfo = document.createElement('span'); donationInfo.innerHTML = '₿ <span style="cursor: pointer; color: #f7931a; font-family: monospace; font-size: 9px;" title="Click to copy Bitcoin address">3EMEWx5b5wwfaf5NKAQzW1sWHDYwFGEqw2</span>'; const btcAddress = donationInfo.querySelector('span'); btcAddress.addEventListener('click', () => { navigator.clipboard.writeText('3EMEWx5b5wwfaf5NKAQzW1sWHDYwFGEqw2').then(() => { btcAddress.style.color = '#4caf50'; btcAddress.textContent = 'Copied!'; setTimeout(() => { btcAddress.style.color = '#f7931a'; btcAddress.textContent = '3EMEWx5b5wwfaf5NKAQzW1sWHDYwFGEqw2'; }, 1500); }).catch(() => { // Fallback for older browsers const textArea = document.createElement('textarea'); textArea.value = '3EMEWx5b5wwfaf5NKAQzW1sWHDYwFGEqw2'; document.body.appendChild(textArea); textArea.select(); document.execCommand('copy'); document.body.removeChild(textArea); btcAddress.style.color = '#4caf50'; btcAddress.textContent = 'Copied!'; setTimeout(() => { btcAddress.style.color = '#f7931a'; btcAddress.textContent = '3EMEWx5b5wwfaf5NKAQzW1sWHDYwFGEqw2'; }, 1500); }); }); footer.appendChild(discordLink); footer.appendChild(donationInfo); // Add author credit const authorCredit = document.createElement('div'); authorCredit.textContent = 'by 01 dev'; authorCredit.style.cssText = ` font-size: 9px; color: rgba(255, 255, 255, 0.5); font-style: italic; text-align: center; margin-top: 2px; `; footer.appendChild(authorCredit); content.appendChild(statsBar); content.appendChild(searchContainer); content.appendChild(bulkActions); content.appendChild(countryListContainer); content.appendChild(footer); panel.appendChild(header); panel.appendChild(content); document.body.appendChild(panel); // Add drag functionality let isDragging = false; let dragOffset = { x: 0, y: 0 }; header.style.cursor = 'move'; header.addEventListener('mousedown', (e) => { if (e.target === toggleBtn) return; isDragging = true; dragOffset.x = e.clientX - panel.offsetLeft; dragOffset.y = e.clientY - panel.offsetTop; panel.style.transition = 'none'; }); document.addEventListener('mousemove', (e) => { if (!isDragging) return; const newX = e.clientX - dragOffset.x; const newY = e.clientY - dragOffset.y; panel.style.left = Math.max(0, Math.min(newX, window.innerWidth - panel.offsetWidth)) + 'px'; panel.style.top = Math.max(0, Math.min(newY, window.innerHeight - panel.offsetHeight)) + 'px'; panel.style.right = 'auto'; }); document.addEventListener('mouseup', () => { if (isDragging) { isDragging = false; panel.style.transition = 'all 0.3s ease'; } }); // Bulk action handlers enableAllBtn.addEventListener('click', () => { Object.keys(autoSkipCountries).forEach(country => { autoSkipCountries[country] = true; }); saveAutoSkipCountries(); updateCountryListUI(); }); disableAllBtn.addEventListener('click', () => { Object.keys(autoSkipCountries).forEach(country => { autoSkipCountries[country] = false; }); saveAutoSkipCountries(); updateCountryListUI(); }); resetBtn.addEventListener('click', () => { if (confirm('Reset all countries to default settings?')) { autoSkipCountries = { ...defaultAutoSkipCountries }; saveAutoSkipCountries(); updateCountryListUI(); } }); // Search functionality let currentSearchTerm = ''; searchInput.addEventListener('input', (e) => { currentSearchTerm = e.target.value.toLowerCase(); updateCountryListUI(); }); let isMinimized = false; toggleBtn.addEventListener('click', () => { isMinimized = !isMinimized; if (isMinimized) { content.style.maxHeight = '0'; content.style.padding = '0'; toggleBtn.innerHTML = '+'; panel.style.width = '320px'; } else { content.style.maxHeight = '500px'; content.style.padding = ''; toggleBtn.innerHTML = '−'; panel.style.width = '320px'; } }); // Update the panel with the list of countries and their auto-skip checkbox function updateCountryListUI() { const listDiv = document.getElementById('countryList'); const statsBar = listDiv.parentElement.querySelector('div'); // Filter countries based on search const filteredCountries = Object.keys(autoSkipCountries).filter(country => country.toLowerCase().includes(currentSearchTerm) ); // Calculate statistics const totalCountries = filteredCountries.length; const enabledCountries = filteredCountries.filter(country => autoSkipCountries[country]).length; const totalAllCountries = Object.keys(autoSkipCountries).length; const enabledAllCountries = Object.values(autoSkipCountries).filter(enabled => enabled).length; // Update stats bar with search info const searchInfo = currentSearchTerm ? ` (filtered: ${totalCountries}/${totalAllCountries})` : ''; statsBar.innerHTML = ` <div style="display: flex; justify-content: space-between; align-items: center;"> <span style="font-size: 11px; opacity: 0.8;">📊 Total: ${totalAllCountries}${searchInfo}</span> <span style="display: flex; gap: 10px; font-size: 11px;"> <span style="color: #57f287;">✅ ${enabledAllCountries}</span> <span style="color: #ed4245;">❌ ${totalAllCountries - enabledAllCountries}</span> </span> </div> `; listDiv.innerHTML = ''; if (totalCountries === 0 && currentSearchTerm) { const noResults = document.createElement('div'); noResults.style.cssText = ` padding: 20px; text-align: center; color: rgba(255, 255, 255, 0.6); font-style: italic; `; noResults.textContent = `No countries found for "${currentSearchTerm}"`; listDiv.appendChild(noResults); return; } // Sort countries alphabetically const sortedCountries = filteredCountries.sort(); sortedCountries.forEach(country => { const countryItem = document.createElement('div'); countryItem.style.cssText = ` display: flex; align-items: center; padding: 10px 12px; margin-bottom: 3px; border-radius: 8px; transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); cursor: pointer; border: 1px solid transparent; animation: fadeIn 0.3s ease; background: rgba(255, 255, 255, 0.03); `; const checkbox = document.createElement('input'); checkbox.type = 'checkbox'; checkbox.checked = autoSkipCountries[country]; checkbox.style.cssText = ` margin-right: 12px; transform: scale(1.3); accent-color: #64b5f6; `; // Add country flag icon const flagIcon = document.createElement('span'); flagIcon.textContent = countryFlags[country] || '🏳️'; flagIcon.style.cssText = ` font-size: 20px; margin-right: 10px; filter: drop-shadow(0 1px 3px rgba(0, 0, 0, 0.3)); transition: all 0.2s ease; `; const countryLabel = document.createElement('span'); countryLabel.innerHTML = currentSearchTerm ? country.replace(new RegExp(currentSearchTerm, 'gi'), match => `<mark style="background: #ffd700; color: #000; padding: 2px 3px; border-radius: 3px; font-weight: bold;">${match}</mark>`) : country; countryLabel.style.cssText = ` flex: 1; font-size: 14px; font-weight: 500; color: #ffffff; transition: color 0.2s ease; `; const statusIcon = document.createElement('span'); statusIcon.textContent = autoSkipCountries[country] ? '🚫' : '✅'; statusIcon.style.cssText = ` font-size: 16px; margin-left: 8px; transition: transform 0.2s ease; filter: drop-shadow(0 0 3px rgba(255, 255, 255, 0.3)); `; // Hover effects with better visual feedback countryItem.addEventListener('mouseenter', () => { countryItem.style.backgroundColor = autoSkipCountries[country] ? 'rgba(244, 67, 54, 0.2)' : 'rgba(76, 175, 80, 0.2)'; countryItem.style.borderColor = autoSkipCountries[country] ? 'rgba(244, 67, 54, 0.5)' : 'rgba(76, 175, 80, 0.5)'; countryItem.style.boxShadow = '0 2px 10px rgba(255, 255, 255, 0.1)'; statusIcon.style.transform = 'scale(1.2)'; flagIcon.style.transform = 'scale(1.1) rotate(5deg)'; flagIcon.style.filter = 'drop-shadow(0 2px 8px rgba(0, 0, 0, 0.5)) brightness(1.2)'; }); countryItem.addEventListener('mouseleave', () => { countryItem.style.backgroundColor = 'rgba(255, 255, 255, 0.03)'; countryItem.style.borderColor = 'transparent'; countryItem.style.boxShadow = 'none'; statusIcon.style.transform = 'scale(1)'; flagIcon.style.transform = 'scale(1) rotate(0deg)'; flagIcon.style.filter = 'drop-shadow(0 1px 3px rgba(0, 0, 0, 0.3))'; }); // Click to toggle with animation countryItem.addEventListener('click', (e) => { if (e.target !== checkbox) { checkbox.click(); } }); checkbox.addEventListener('change', function() { autoSkipCountries[country] = this.checked; statusIcon.textContent = this.checked ? '🚫' : '✅'; // Add pulse animation statusIcon.style.animation = 'pulse 0.3s ease'; setTimeout(() => statusIcon.style.animation = '', 300); saveAutoSkipCountries(); updateCountryListUI(); // Refresh to update stats }); countryItem.appendChild(checkbox); countryItem.appendChild(flagIcon); countryItem.appendChild(countryLabel); countryItem.appendChild(statusIcon); listDiv.appendChild(countryItem); }); } 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 // ------------------------------- })();