您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Search and navigate to a Discord server by name
当前为
// ==UserScript== // @name Discord Server Search // @namespace Made by @hakav // @author @hakav // @version 2.0 // @description Search and navigate to a Discord server by name // @match https://discord.com/* // @grant none // @icon https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSrWjmWEq2JeU0yKb2ArlyAAJA4QQLkhbuihw&s // @license Copyright @hakav // ==/UserScript== (function() { 'use strict'; // ======= SETTINGS ======= const defaultPosition = { bottom: '20px', right: '20px' }; // Default position if no saved data const popupPositionOffset = '80px'; // Customize popup offset from the bottom const localStorageKey = 'searchIconPosition'; // Key for storing position in localStorage // ======================== // Create the search icon const searchIcon = document.createElement('div'); searchIcon.innerHTML = '🔍'; searchIcon.style.position = 'fixed'; searchIcon.style.backgroundColor = 'rgba(255, 255, 255, 0.3)'; searchIcon.style.color = 'black'; searchIcon.style.border = '2px solid rgba(0, 0, 0, 0.3)'; searchIcon.style.borderRadius = '50%'; searchIcon.style.padding = '10px'; searchIcon.style.cursor = 'pointer'; searchIcon.style.zIndex = '1000'; searchIcon.style.boxShadow = '0 0 10px rgba(0, 0, 0, 0.2)'; searchIcon.style.transition = 'background-color 0.3s ease, box-shadow 0.3s ease, transform 0.2s ease'; document.body.appendChild(searchIcon); // Load the saved position from localStorage or use default const savedPosition = JSON.parse(localStorage.getItem(localStorageKey)); if (savedPosition) { searchIcon.style.bottom = savedPosition.bottom; searchIcon.style.right = savedPosition.right; } else { searchIcon.style.bottom = defaultPosition.bottom; searchIcon.style.right = defaultPosition.right; } // Hover effects with scaling searchIcon.onmouseenter = function() { searchIcon.style.backgroundColor = 'rgba(255, 255, 255, 0.8)'; searchIcon.style.boxShadow = '0 0 15px rgba(0, 0, 0, 0.5)'; searchIcon.style.transform = 'scale(1.1)'; }; searchIcon.onmouseleave = function() { searchIcon.style.backgroundColor = 'rgba(255, 255, 255, 0.3)'; searchIcon.style.boxShadow = '0 0 10px rgba(0, 0, 0, 0.2)'; searchIcon.style.transform = 'scale(1)'; }; // Draggable functionality let isDragging = false; let dragOffsetX = 0; let dragOffsetY = 0; searchIcon.addEventListener('mousedown', function(event) { isDragging = true; dragOffsetX = event.clientX - searchIcon.getBoundingClientRect().right; dragOffsetY = event.clientY - searchIcon.getBoundingClientRect().bottom; event.preventDefault(); }); document.addEventListener('mousemove', function(event) { if (isDragging) { // Calculate the new position const right = window.innerWidth - event.clientX - dragOffsetX + 'px'; const bottom = window.innerHeight - event.clientY - dragOffsetY + 'px'; // Move the search icon searchIcon.style.right = right; searchIcon.style.bottom = bottom; // Save the position in localStorage localStorage.setItem(localStorageKey, JSON.stringify({ right: right, bottom: bottom })); } }); document.addEventListener('mouseup', function() { if (isDragging) { isDragging = false; } }); // Create the search input popup const searchPopup = document.createElement('div'); searchPopup.style.position = 'fixed'; searchPopup.style.bottom = popupPositionOffset; searchPopup.style.right = '-250px'; // Slide in from outside the screen searchPopup.style.backgroundColor = 'white'; searchPopup.style.padding = '15px'; searchPopup.style.borderRadius = '5px'; searchPopup.style.boxShadow = '0 0 10px rgba(0, 0, 0, 0.5)'; searchPopup.style.display = 'none'; searchPopup.style.zIndex = '1001'; searchPopup.style.opacity = '0'; searchPopup.style.transition = 'opacity 0.3s ease, transform 0.3s ease, right 0.5s ease'; const searchInput = document.createElement('input'); searchInput.placeholder = 'Enter server name...'; searchInput.style.width = '200px'; searchInput.style.border = '2px solid #ccc'; searchInput.style.padding = '5px'; searchInput.style.transition = 'border-color 0.3s ease'; searchPopup.appendChild(searchInput); searchInput.onfocus = function() { searchInput.style.borderColor = '#4A90E2'; }; searchInput.onblur = function() { searchInput.style.borderColor = '#ccc'; }; const searchButton = document.createElement('button'); searchButton.innerText = 'Search'; searchButton.style.marginLeft = '10px'; searchButton.style.padding = '5px 10px'; searchButton.style.backgroundColor = '#4A90E2'; searchButton.style.color = 'white'; searchButton.style.border = 'none'; searchButton.style.borderRadius = '3px'; searchButton.style.cursor = 'pointer'; searchButton.style.transition = 'transform 0.2s ease, background-color 0.3s ease'; searchButton.onmouseenter = function() { searchButton.style.backgroundColor = '#357ABD'; searchButton.style.transform = 'scale(1.05)'; }; searchButton.onmouseleave = function() { searchButton.style.backgroundColor = '#4A90E2'; searchButton.style.transform = 'scale(1)'; }; // Search function const searchServer = () => { const serverName = searchInput.value.trim(); if (serverName) { const servers = Array.from(document.querySelectorAll('[data-list-id="guildsnav"] [aria-label]')); const matchedServer = servers.find(server => server.getAttribute('aria-label').toLowerCase().includes(serverName.toLowerCase()) ); if (matchedServer) { matchedServer.click(); } else { showErrorNotification('Server not found!'); } } }; searchButton.onclick = searchServer; searchInput.addEventListener('keydown', function (e) { if (e.key === 'Enter') { searchServer(); } }); searchPopup.appendChild(searchButton); document.body.appendChild(searchPopup); // Show/hide popup animation const showPopup = () => { searchPopup.style.display = 'block'; setTimeout(() => { searchPopup.style.opacity = '1'; searchPopup.style.right = '20px'; }, 10); }; const hidePopup = () => { searchPopup.style.opacity = '0'; searchPopup.style.right = '-250px'; setTimeout(() => { searchPopup.style.display = 'none'; }, 300); }; searchIcon.onclick = function() { if (searchPopup.style.display === 'none' || searchPopup.style.opacity === '0') { showPopup(); searchInput.focus(); } else { hidePopup(); } }; // Custom notification system const showErrorNotification = (message) => { const notification = document.createElement('div'); notification.innerText = message; notification.style.position = 'fixed'; notification.style.bottom = '100px'; notification.style.right = '20px'; notification.style.backgroundColor = '#ff6666'; notification.style.color = 'white'; notification.style.padding = '10px'; notification.style.borderRadius = '5px'; notification.style.boxShadow = '0 0 10px rgba(0, 0, 0, 0.5)'; notification.style.zIndex = '1002'; notification.style.opacity = '0'; notification.style.transition = 'opacity 0.5s ease'; document.body.appendChild(notification); // Show notification with fade-in setTimeout(() => { notification.style.opacity = '1'; }, 10); // Hide notification after 3 seconds setTimeout(() => { notification.style.opacity = '0'; setTimeout(() => { notification.remove(); }, 500); }, 3000); }; // Hide popup when clicking outside with animation window.onclick = function(event) { if (!searchIcon.contains(event.target) && !searchPopup.contains(event.target)) { hidePopup(); } }; })();