您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
This is to change the handle in the YouTube comments section to a username.
当前为
// ==UserScript== // @name Return YouTube Comment Username // @name:ja YouTubeコメント欄の名前を元に戻す // @version 0.2.3 // @author yakisova41 // @license MIT // @icon data:image/png;base64,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 // @namespace https://yt-returnname-api.pages.dev/extension/ // @description This is to change the handle in the YouTube comments section to a username. // @description:ja YouTubeのコメント欄の名前がハンドル(@...)表記になってしまった場合に、元のユーザーネームに上書きします。 // @match https://www.youtube.com/* // @grant none // ==/UserScript== // src/getUserName.ts async function getUserName(id) { const data = await fetch( `https://www.youtube.com/youtubei/v1/browse?key=AIzaSyAO_FJ2SlqU8Q4STEHLGCilw_Y9_11qcW8&prettyPrint=false`, { method: "POST", headers: { accept: "*/*", "accept-encoding": "gzip, deflate, br", "accept-language": "ja", "content-type": "application/json", cookie: `GPS=1; YSC=YajuSEnP; DEVICE_INFO=DEVICE_INFO; VISITOR_INFO1_LIVE=LLIIVVEE; PREF=f6=40000000&tz=Asia.Tokyo; ST-o2eza2=itct=itct&endpoint=%7B%22clickTrackingParams%22%3A%22CBQQ8JMBGAciEwjNqtCAASAhXnm1YBHABY%3D%22%2C%22commandMetadata%22%3A%7B%22webCommandMetadata%22%3A%7B%22url%22%3A%22%2F%40FUCKYOUTUBE%2Fchannels%22%2C%22webPageType%22%3A%22WEB_PAGE_TYPE_CHANNEL%22%2C%22rootVe%22%3A3611%2C%22apiUrl%22%3A%22%2Fyoutubei%2Fv1%2Fbrowse%22%7D%7D%2C%22browseEndpoint%22%3A%7B%22browseId%22%3A%22${id}%22%2C%22params%22%3A%22EghjaGFubmVsc_IGBAoCUgA%253D%22%2C%22canonicalBaseUrl%22%3A%22%2F%40FUCK_YOUTUBE%22%7D%7D`, dnt: "1", referer: `https://www.youtube.com/channel/${id}`, "sec-ch-ua": `"Chromium";v="110", "Not A(Brand";v="24", "Google Chrome";v="110"`, "sec-ch-ua-arch": "x86", "sec-ch-ua-bitness": "64", "sec-ch-ua-full-version": "110.0.5481.104", "sec-ch-ua-full-version-list": `"Chromium";v="110.0.5481.104", "Not A(Brand";v="24.0.0.0", "Google Chrome";v="110.0.5481.104"`, "sec-ch-ua-mobile": "?0", "sec-ch-ua-platform": "Windows", "sec-ch-ua-platform-version": "15.0.0", "sec-ch-ua-wow64": "?0", "sec-fetch-dest": "empty", "sec-fetch-mode": "same-origin", "sec-fetch-site": "same-origin", "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36", "x-client-data": "x-client-data", "x-goog-authuser": "0", "x-goog-visitor-id": "visitorData", "x-origin": "https://www.youtube.com", "x-youtube-bootstrap-logged-in": "true", "x-youtube-client-name": "1", "x-youtube-client-version": "2.20230217.01.00" }, body: JSON.stringify({ context: { client: { hl: "ja", gl: "JP", remoteHost: "1919:8a10:1145:1419:e1c9:b81a:09db:ff3a", deviceMake: "", deviceModel: "", visitorData: "visitorData", userAgent: "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36,gzip(gfe)", clientName: "WEB", clientVersion: "2.20230217.01.00", osName: "Windows", osVersion: "10.0", originalUrl: "https://www.youtube.com/@FUCK_YOUTUBE/channels", platform: "DESKTOP", clientFormFactor: "UNKNOWN_FORM_FACTOR", configInfo: { appInstallData: "appInstallData" }, userInterfaceTheme: "USER_INTERFACE_THEME_DARK", timeZone: "Asia/Tokyo", browserName: "Chrome", browserVersion: "110.0.0.0", acceptHeader: "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", deviceExperimentId: "deviceExperimentId", screenWidthPoints: 599, screenHeightPoints: 937, screenPixelDensity: 1, screenDensityFloat: 1, utcOffsetMinutes: 540, memoryTotalKbytes: "8000000", mainAppWebInfo: { graftUrl: "/@FUCK_YOUTUBE/channels", pwaInstallabilityStatus: "PWA_INSTALLABILITY_STATUS_CAN_BE_INSTALLED", webDisplayMode: "WEB_DISPLAY_MODE_BROWSER", isWebNativeShareAvailable: true } }, user: { lockedSafetyMode: false }, request: { useSsl: true, internalExperimentFlags: [], consistencyTokenJars: [] }, clickTracking: { clickTrackingParams: "UnkoBuuriiiiiiiicuuusssaiMAJIDE=" }, adSignalsInfo: { params: [ { key: "dt", value: "1145141919810" }, { key: "flash", value: "0" }, { key: "frm", value: "0" }, { key: "u_tz", value: "540" }, { key: "u_his", value: "1" }, { key: "u_h", value: "1080" }, { key: "u_w", value: "1920" }, { key: "u_ah", value: "1040" }, { key: "u_aw", value: "1920" }, { key: "u_cd", value: "24" }, { key: "bc", value: "31" }, { key: "bih", value: "937" }, { key: "biw", value: "582" }, { key: "brdim", value: "-1920,0,-1920,0,1920,0,1920,1040,599,937" }, { key: "vis", value: "1" }, { key: "wgl", value: "true" }, { key: "ca_type", value: "image" } ] } }, browseId: id, params: "YajuSenpaiInmu1919%3D" }) } ).then(async (res) => await res.text()).then((text) => { const data2 = JSON.parse(text); const name = data2.header.c4TabbedHeaderRenderer.title; return name; }); return data; } // src/handleToName.ts async function handleToName(handle) { const res = await fetch(`https://www.youtube.com/${handle}/about`); const text = await res.text(); const parser = new DOMParser(); const dom = parser.parseFromString(text, "text/html"); const ogtitle = dom.querySelector(`meta[property="og:title"]`); const name = ogtitle?.getAttribute("content"); if (typeof name === "string") { return name; } else { return "ERROR"; } } // src/index.ts function main() { let commentReplaceInterval = 0; let beforeHref = ""; const body = document.querySelector("body"); if (body !== null) { const observer = new MutationObserver(() => { const href = location.href; if (href !== beforeHref) { clearInterval(commentReplaceInterval); commentReplaceInterval = runCommentsReplace(); } beforeHref = href; }); observer.observe(body, { childList: true, subtree: true }); } const style = document.createElement("style"); document.head.appendChild(style); style.innerHTML = `#author-text > span:nth-child(1) ,ytd-author-comment-badge-renderer > #name > #channel-name > #container > #text-container > yt-formatted-string{ display:none; }`; } function runCommentsReplace() { return window.setInterval(() => { const authorSpan = document.querySelector( "#author-text > span:nth-child(1):not(.name-replaced)" ); if (authorSpan !== null) { authorSpan.classList.add("name-replaced"); const channelLink2 = authorSpan.parentElement; const href = channelLink2?.getAttribute("href"); if (channelLink2 !== null && typeof href === "string") { if (href.split("/")[1][0] === "@") { void handleToName(href.split("/")[1]).then((name) => { replacedElement(authorSpan, name); }); } else { void getUserName(href.split("/")[2]).then((name) => { replacedElement(authorSpan, name); }); } } } const mention = document.querySelector( `#content-text > a.yt-formatted-string[dir="auto"]:not(.name-replaced)` ); if (mention !== null) { mention.classList.add("name-replaced"); if (mention.innerHTML.match("@.*") !== null) { mention.removeAttribute("dir"); const href = mention.getAttribute("href"); if (href !== null) { void getUserName(href.split("/")[2]).then((name) => { mention.innerHTML = "@" + name; }); } } } const channelNameSpan = document.querySelector( "ytd-author-comment-badge-renderer > #name > #channel-name > #container > #text-container > yt-formatted-string:not(.name-replaced)" ); const channelLink = channelNameSpan?.parentElement?.parentElement?.parentElement?.parentElement; if (channelLink !== null && channelNameSpan !== null) { channelNameSpan.classList.add("name-replaced"); const href = channelLink?.getAttribute("href"); if (channelLink !== null && typeof href === "string") { void getUserName(href.split("/")[2]).then((name) => { replacedElement(channelNameSpan, name); }); } } }); } function replacedElement(nameElem, name) { const className = "shit-youtube-handle-name"; const parent = nameElem.parentElement; if (parent !== null) { const replacedNameElem = parent.querySelector(`.${className}`); if (replacedNameElem !== null) { replacedNameElem.innerHTML = name; replacedNameElem.className = nameElem.className; } else { const replacedNameElem2 = document.createElement("span"); replacedNameElem2.className = nameElem.className; replacedNameElem2.classList.add(className); replacedNameElem2.innerHTML = name; parent.appendChild(replacedNameElem2); } } } // node_modules/ts-extension-builder/tmp/entry.ts var args = {}; if (typeof GM_info !== "undefined") { GM_info.script.grant.forEach((propatyName) => { let keyName = propatyName.split("GM_")[1]; if (keyName === "xmlhttpRequest") { keyName = "xmlHttpRequest"; } args[propatyName] = GM[keyName]; }); } main(args);
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址