您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
自動進入 Twitch 聊天室頁面,防止被揪團帶離目標實況主,並可自動導回原實況主頁面
// ==UserScript== // @name Twitch auto enter chat-page // @namespace http://tampermonkey.net/ // @version 2024-08-25 // @description 自動進入 Twitch 聊天室頁面,防止被揪團帶離目標實況主,並可自動導回原實況主頁面 // @author BeckerSpace // @match https://www.twitch.tv/* // @icon https://www.google.com/s2/favicons?sz=64&domain=twitch.tv // @run-at document-end // @grant none // ==/UserScript== (function() { 'use strict'; // 設定變數 let redirectEnabled = true; // 是否開啟防揪團功能 const targetStreamer = "Streamer ID"; // 替換為你的目標實況主帳號 const checkTimer = 5000 // 自動檢查的秒數 // 自訂CSS const customCSS = { toggleButton: { color: 'white', cursor: 'pointer', // 指标变为手形 display: 'flex', alignItems: 'center', // 水平居中 justifyContent: 'center', // 垂直居中 fontWeight: 'bold', // 字体加粗 marginLeft: '5px', // 与 Twitch 标志之间的间距 whiteSpace: 'nowrap' // 防止文字折行 }, label: { fontSize: '12px' }, status: { fontSize: '20px', backgroundColor: 'green', // 初始背景颜色为绿色 width: '25px', // 设置宽度 height: '25px', // 设置高度 display: 'flex', // 使用 flex 使内容居中 alignItems: 'center', // 垂直居中 justifyContent: 'center', // 水平居中 borderRadius: '5px' // 增加圆角 } } // 防揪團開關 function redirectEnabledToggleBtn(){ // 檢查按鈕是否已存在,避免重複創建 if (document.querySelector('#redirect-toggle-button')) return; // 創建一個新的 div 元素作為按鈕容器 const toggleButton = document.createElement('div'); // 設置按鈕的 ID 以便識別 toggleButton.id = 'redirect-toggle-button'; // 应用样式 Object.assign(toggleButton.style, customCSS.toggleButton); // 創建文本行,顯示 "防揪團功能:" const label = document.createElement('span'); label.textContent = '防揪團:'; Object.assign(label.style, customCSS.label); // 創建狀態行,顯示 "O" 或 "X" const status = document.createElement('span'); status.textContent = 'O'; // 初始顯示 O 表示啟用 Object.assign(status.style, customCSS.status); // 點擊事件切換狀態 toggleButton.addEventListener('click', () => { redirectEnabled = !redirectEnabled; status.textContent = redirectEnabled ? 'O' : 'X'; status.style.backgroundColor = redirectEnabled ? 'green' : 'red'; // 使用条件运算符设置背景颜色 console.log(`防揪團 ${redirectEnabled ? '啟用' : '禁用'}`); }); // 將文本行和狀態行添加到 div toggleButton.appendChild(label); toggleButton.appendChild(status); // 找到指定的LOGO a元素 const homeLogo = document.querySelector('a[data-a-target="home-link"]'); // 將新創建的 div 添加到 a 標籤的後面 if (homeLogo) { homeLogo.parentElement.appendChild(toggleButton); } } // 防揪團功能 function redirectToTargetUrl() { // 檢查 防揪團開關 if(!redirectEnabled) return // 檢查網址,若非原實況主則防揪團 if (window.location.href !== `https://www.twitch.tv/${targetStreamer}`) { console.log(`非目標實況主網址,將導回: ${targetStreamer}`) window.location.href = `https://www.twitch.tv/${targetStreamer}`; } } // 判斷進入頁面 function enterChat(){ // 找尋section,以此判斷目前頁面狀態 // const streamInfoSection = document.querySelector('section.Layout-sc-1xcs6mc-0.skip-to-target#live-channel-stream-information'); // 待確認實況開啟時的tag id const streamInfoSection = document.querySelector('section.Layout-sc-1xcs6mc-0.skip-to-target'); if(!streamInfoSection) return console.log(`streamInfoSection沒找到`)// 防呆 // 葉面狀態由 section 的 ariaLabel 提供 const ariaLabel = streamInfoSection.getAttribute('aria-label'); // 在實況主首頁 if(ariaLabel === "主要內容"){ // 進入聊天室 const chatTab = document.querySelector('a[tabname="chat"]'); if (!chatTab) return console.log(`chatTab沒找到`); // 防呆 chatTab.click(); } // 已經在聊天室內 if(ariaLabel === "實況資訊"){ // 目前無內容 } } // 主程式 function main(){ redirectEnabledToggleBtn(); // 創建並顯示切換按鈕 enterChat() // 檢查並進入聊天室 redirectToTargetUrl() } // 重複執行 主程式 setInterval(()=>{ main() },checkTimer) // 第一次嘗試執行 window.addEventListener('load', ()=>{ main() }); })();