您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
AtCoderのお気に入り管理のユーザーに色がつきます
当前为
// ==UserScript== // @name AtCoder-Favorite-Person-Colors // @namespace https://ruku.tellpro.net // @version 2025-06-19 // @description AtCoderのお気に入り管理のユーザーに色がつきます // @author ruku // @match https://atcoder.jp/settings/fav // @icon https://www.google.com/s2/favicons?sz=64&domain=atcoder.jp // @grant none // @license MIT // ==/UserScript== // 関数名がdiffToColor...? // まあ、user名と一緒だしえっか. // こんなコード誰も見てないでしょ. // そのまんまでよしっ!!! const diffToColor = (diff) => { if(diff === 0) { return "black"; } if(diff < 399) { return "#808080"; } if(diff < 799) { return "#804000"; } if(diff < 1199) { return "#008000"; } if(diff < 1599) { return "#00C0C0"; } if(diff < 1999) { return "#0000FF"; } if(diff < 2399) { return "#C0C000"; } if(diff < 2799) { return "#FF8000"; } return "#FF0000"; } (async function() { 'use strict'; const users = document.querySelectorAll("td a[href^='/users/']"); const userElements = Array.from(users); const processed = new Set(); for(const userElem of userElements){ const user = userElem.textContent.trim(); if(!user) { console.warn("User not found"); continue; } if(processed.has(user)) { console.info(`User ${user} already processed`); continue; } processed.add(user); try { const response = await fetch(`https://kenkoooo.com/atcoder/proxy/users/${user}/history/json`); if (!response.ok) { console.error(`Failed to fetch data for user: ${user}`); continue; } const data = await response.json(); if (data.length === 0) { console.warn(`No data found for user: ${user}`); continue; } const lastColor = data[data.length - 1].NewRating; const color = diffToColor(lastColor); // 同じユーザー名の全ての要素に色をつける userElements .filter(el => el.textContent.trim() === user) .forEach(el => { el.style.color = color; }); } catch (e) { console.error(`Error processing user ${user}:`, e); } } })();