您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Spoof Discord Web client with draggable, toggleable UI and platform icons
// ==UserScript== // @name Spoof Discord Platform // @namespace http://tampermonkey.net/ // @version 0.6 // @description Spoof Discord Web client with draggable, toggleable UI and platform icons // @author you // @match https://discord.com/* // @grant GM_registerMenuCommand // @run-at document-idle // ==/UserScript== (function () { 'use strict'; const platforms = { "Desktop": { "$os": "Windows", "$browser": "Discord Client", "$device": "Discord Client" }, "Android": { "$os": "Android", "$browser": "Discord Android", "$device": "Discord Android" }, "iOS": { "$os": "iOS", "$browser": "Discord iOS", "$device": "Discord iOS" }, "Xbox": { "$os": "Xbox", "$browser": "Xbox", "$device": "Xbox" }, "Web": { "$os": "Mac OS X", "$browser": "Chrome", "$device": "" } }; const platformIcons = { "Desktop": "💻", "Android": "🤖", "iOS": "📱", "Xbox": "🎮", "Web": "🌐" }; const defaultPlatform = "Web"; let selectedPlatform = localStorage.getItem("discordPlatformSpoof") || defaultPlatform; Object.keys(platforms).forEach(platform => { GM_registerMenuCommand(`Set platform: ${platform}`, () => { localStorage.setItem("discordPlatformSpoof", platform); alert(`Discord platform set to ${platform}. Reload Discord to apply changes.`); }); }); const spoofProps = platforms[selectedPlatform]; const originalSend = WebSocket.prototype.send; WebSocket.prototype.send = function (data) { try { const json = JSON.parse(data); if (json.op === 2 && json.d?.properties) { json.d.properties = spoofProps; console.log(`[SPOOF] Spoofed as ${selectedPlatform} client.`); data = JSON.stringify(json); } } catch (e) { } return originalSend.call(this, data); }; function createMenu() { const wrapper = document.createElement("div"); wrapper.id = "spoof-ui-wrapper"; wrapper.style.cssText = ` position: fixed; top: 120px; right: 20px; z-index: 9999; background-color: #2f3136; color: #fff; border-radius: 8px; font-family: "gg sans", "Segoe UI", sans-serif; box-shadow: 0 0 15px rgba(0,0,0,0.4); padding: 10px; max-width: 220px; display: none; `; const title = document.createElement("div"); title.textContent = "Platform Menu"; title.style.fontWeight = "bold"; title.style.marginBottom = "10px"; title.style.cursor = "move"; wrapper.appendChild(title); Object.keys(platforms).forEach(platform => { const btn = document.createElement("button"); btn.textContent = `${platformIcons[platform]} ${platform}`; btn.style.cssText = ` display: block; width: 100%; margin: 5px 0; padding: 6px; background-color: ${platform === selectedPlatform ? "#5865F2" : "#7289da"}; color: white; border: none; border-radius: 4px; cursor: pointer; text-align: left; padding-left: 12px; `; btn.onclick = () => { localStorage.setItem("discordPlatformSpoof", platform); alert(`Platform set to ${platform}. Reload Discord to apply.`); location.reload(); }; wrapper.appendChild(btn); }); let isDragging = false, offsetX, offsetY; title.addEventListener("mousedown", (e) => { isDragging = true; offsetX = e.clientX - wrapper.getBoundingClientRect().left; offsetY = e.clientY - wrapper.getBoundingClientRect().top; e.preventDefault(); }); document.addEventListener("mousemove", (e) => { if (isDragging) { wrapper.style.top = `${e.clientY - offsetY}px`; wrapper.style.left = `${e.clientX - offsetX}px`; wrapper.style.right = "auto"; } }); document.addEventListener("mouseup", () => { isDragging = false; }); document.body.appendChild(wrapper); const toggle = document.createElement("div"); toggle.textContent = "⚙️"; toggle.title = "Toggle Menu"; toggle.style.cssText = ` position: fixed; bottom: 20px; right: 20px; background: #5865F2; color: white; font-size: 18px; border-radius: 50%; width: 36px; height: 36px; display: flex; align-items: center; justify-content: center; cursor: pointer; z-index: 9999; box-shadow: 0 0 10px rgba(0,0,0,0.3); `; toggle.onclick = () => { wrapper.style.display = wrapper.style.display === "none" ? "block" : "none"; }; document.body.appendChild(toggle); } window.addEventListener('load', createMenu); })();