见博客:https://www.luogu.com.cn/blog/liutianyou/Luogu-Extra
很多人貌似很喜欢我的脚本,所以我把几个大佬的脚本整合了一下发出来,私信提示和换背景完全是我自己开发的。
下文来自上面的博客。
由于使用氩洛谷、exlg之类的插件过于麻烦,本人开发出来一个增强洛谷功能油猴脚本。
使用脚本之前,你需要安装“Tampermonkey”插件,你在你的浏览器扩展商店中可以找到。
下面是脚本内容,你需要对它进行微调,然后就可以用了。
// ==UserScript==
// @name 洛谷强化插件
// @namespace 洛谷强化插件
// @version 1.0
// @description 洛谷强化,来源自https://www.luogu.com.cn/blog/liutianyou/Luogu-Extra
// @author LiuTianyou & rainy & 叶ID (KMnO4y_Fish, yezhiyi9670)
// @match *://www.luogu.com.cn/*
// @grant GM_setValue
// @grant GM_getValue
// @grant GM_registerMenuCommand
// @grant none
// ==/UserScript==
var background = new Array("https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fimg2.huashi6.com%2Fimages%2Fresource%2F2020%2F11%2F29%2Fh85977400p0.jpg%3FimageView2%2F3%2Fq%2F100%2Finterlace%2F1%2Fw%2F1600%2Fh%2F1600&refer=http%3A%2F%2Fimg2.huashi6.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=auto?sec=1659665788&t=df861f3…",
//"https://img2.baidu.com/it/u=3339913661,1461699126&fm=253&fmt=auto&app=138&f=JPEG?w=661&h=500",
//"https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fimg2.huashi6.com%2Fimages%2Fresource%2F2021%2F03%2F24%2F8866197h5p0.jpg%3FimageView2%2F3%2Fq%2F100%2Finterlace%2F1%2Fw%2F1600%2Fh%2F1600&refer=http%3A%2F%2Fimg2.huashi6.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=auto?sec=1659765695&t=e2cf5a79c0b8b29078b2f49d46db3d4f",
//"https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fimg2.huashi6.com%2Fimages%2Fresource%2F2020%2F12%2F15%2F863h15947p0.jpg%3FimageView2%2F3%2Fq%2F100%2Finterlace%2F1%2Fw%2F1600%2Fh%2F1600&refer=http%3A%2F%2Fimg2.huashi6.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=auto?sec=1659765709&t=630011f8950f3cc5fb1101502bc2ef1b",
//"https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fpatchwiki.biligame.com%2Fimages%2Fys%2F4%2F48%2Fkbpj3ldtjpmckt8lyppspsuvg1vu3yc.png&refer=http%3A%2F%2Fpatchwiki.biligame.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=auto?sec=1659765709&t=2d6469423287dbd22d9ac0f70826602c"
);
function payload(){
var back = background[Math.floor(Math.random() * background.length)];
document.querySelector('body').style="background: url(" + back + ") fixed center;background-size: cover;";
if(document.querySelector('main[style="background-color: rgb(239, 239, 239);"]') != null)
document.querySelector('main[style="background-color: rgb(239, 239, 239);"]').style="opacity: 0.8;";
if(document.querySelector('div[style="background: linear-gradient(90deg, rgb(35, 37, 38), rgb(65, 67, 69)); filter: blur(0px) brightness(100%);"]') != null)
document.querySelector('div[style="background: linear-gradient(90deg, rgb(35, 37, 38), rgb(65, 67, 69)); filter: blur(0px) brightness(100%);"]').style="opacity: 0.8;";
if(document.querySelector('div[style="background: rgb(51, 51, 51); filter: blur(0px) brightness(100%);"]') != null)
document.querySelector('div[style="background: rgb(51, 51, 51); filter: blur(0px) brightness(100%);"]').style="opacity: 0.8;";
if(document.querySelector('div[class="mdui-panel mdui-panel-gapless"]') != null)
document.querySelector('div[class="mdui-panel mdui-panel-gapless"]').style="opacity: 0.8;";
if(document.querySelector('div[class="mp-editor-container"]') != null)
document.querySelector('div[class="mp-editor-container"]').style="opacity: 0.8;";
}
var chat_websocket = new WebSocket('wss://ws.luogu.com.cn/ws?host=www.luogu.com.cn');
chat_websocket.onopen = function(evt){
chat_websocket.send('{"type":"join_channel","channel":"chat","channel_param":"206814","exclusive_key":null}');
console.log("已经连接到洛谷私信服务器!");
}
chat_websocket.onerror = function(evt){
console.warn("无法连接到洛谷私信服务器,请刷新页面再试!");
}
chat_websocket.onmessage = function(evt){
//{"_channel":"chat","_channel_param":"206814","_ws_type":"join_result","client_number":2,"result":"success","type":"result","welcome_message":""}
//{"_channel":"chat","_channel_param":"206814","_ws_type":"heartbeat","client_number":1,"type":"heartbeat"}
//{"_channel":"chat","_channel_param":"206814","_ws_type":"server_broadcast","message":{"content":"。。。","id":9395711,"receiver":{"background":"https://cdn.luogu.com.cn/upload/image_hosting/mvku5hfx.png","badge":null,"ccfLevel":5,"color":"Green","isAdmin":false,"isBanned":false,"name":"LiuTianyou","slogan":"希望每个人在自己的道路上越走越远……","uid":206814},"sender":{"background":"https://cdn.luogu.com.cn/upload/image_hosting/9nmrc0ym.png","badge":null,"ccfLevel":0,"color":"Green","isAdmin":false,"isBanned":false,"name":"weisumouyingjinpai","slogan":"","uid":578146},"status":1,"time":1657159550}}
var message = JSON.parse(evt.data);
if(message._ws_type != "server_broadcast") return;
var notice = "收到@" + message.message.sender.name + "的私信:" + message.message.content;
var div = document.createElement("DIV");
div.innerHTML=`
<div class="swal2-container swal2-top-end swal2-fade swal2-shown" style="overflow-y: auto;">
<div aria-labelledby="swal2-title" aria-describedby="swal2-content" class="swal2-popup swal2-toast swal2-show" tabindex="-1" role="alert" aria-live="polite" style="display: flex;">
<div class="swal2-header">
<ul class="swal2-progresssteps" style="display: none;"></ul>
<div class="swal2-icon swal2-info" style="display: flex;">
<span class="swal2-icon-text">i</span>
<div class="swal2-success-circular-line-left" style="background-color: rgb(255, 255, 255);"></div>
<span class="swal2-success-line-tip"></span>
<span class="swal2-success-line-long"></span>
<div class="swal2-success-ring"></div>
<div class="swal2-success-fix" style="background-color: rgb(255, 255, 255);"></div><div class="swal2-success-circular-line-right" style="background-color: rgb(255, 255, 255);"></div>
</div>
<h2 class="swal2-title" id="swal2-title"><a href="https://www.luogu.com.cn/chat">` + notice + `</a></h2>
<button type="button" class="swal2-close" style="display: flex;" onclick="document.body.removeChild(document.body.lastElementChild)">×</button>
</div>`;
document.body.appendChild(div);
setTimeout("document.body.removeChild(document.body.lastElementChild)", 5000);
}
chat_websocket.onclose = function(evt){}
window.onload = function(){
'use strict';
payload();
var homepage = /\/user\/(.*)/;
if(homepage.test(window.location.pathname)){
//练习页面题号加颜色功能,作者rainy
//代码来自于https://greasyfork.org/zh-CN/scripts/392036-%E6%B4%9B%E8%B0%B7%E9%A2%98%E7%9B%AE%E9%9A%BE%E5%BA%A6%E6%98%BE%E7%A4%BA-luogu-dif-render/code
setInterval(() => {
var problems = document.getElementsByTagName('a');
var problems_color = [];
var colors = ['rgb(191, 191, 191)', 'rgb(254, 76, 97)', 'rgb(243, 156, 17)', 'rgb(255, 193, 22)', 'rgb(82, 196, 26)', 'rgb(52, 152, 219)', 'rgb(157, 61, 207)', 'rgb(14, 29, 105)'];
for(var passed of window._feInjection.currentData.passedProblems) problems_color.push({pid: passed.pid, dif: passed.difficulty, rendered: false});
for(var tryed of window._feInjection.currentData.submittedProblems) problems_color.push({pid: tryed.pid, dif: tryed.difficulty, rendered: false});
for(var i = 0; i < problems.length; i++){
var number = problems[i].innerText;
for(var j = 0; j < problems_color.length; j++){
if(problems_color[j].pid == number){
problems[i].style.color = colors[problems_color[j].dif];
}
}
}
}, 1000);
}
if(window.location.pathname == "/"){
//按难度随机跳题,作者叶ID (KMnO4y_Fish, yezhiyi9670)
//代码来自于https://greasyfork.org/zh-CN/scripts/390181-%E6%B4%9B%E8%B0%B7%E6%8C%89%E9%9A%BE%E5%BA%A6%E9%9A%8F%E6%9C%BA%E8%B7%B3%E9%A2%98/code
setTimeout(function () {
document.querySelector('div[class="am-u-md-3"]').innerHTML = `
<div class="lg-article" id="rand-problem-form">
<h2>按难度随机跳题</h2>
<select class="am-form-field" style="background-color:#DDD;" name="rand-problem-rating" autocomplete="off" placeholder="选择难度">
<option value="0">暂无评定</option>
<option value="1">入门</option>
<option value="2">普及-</option>
<option value="3">普及/提高-</option>
<option value="4">普及+/提高</option>
<option selected value="5">提高+/省选-</option>
<option value="6">省选/NOI-</option>
<option value="7">NOI/NOI+/CTSC</option>
</select>
<select class="am-form-field" style="background-color:#DDD;margin-top:16px;" name="rand-problem-source" autocomplete="off" placeholder="选择来源">
<option selected value="P">洛谷题库</option>
<option value="CF">CodeForces</option>
<option value="SP">SPOJ</option>
<option value="AT">AtCoder</option>
<option value="UVA">UVa</option>
</select>
<button class="am-btn am-btn-sm am-btn-primary" style="margin-top:16px;visibility:hidden">跳转</button>
<button class="am-btn am-btn-sm am-btn-primary lg-right" id="rand-problem-button" style="margin-top:16px;">跳转</button>
</div>`;
$('#rand-problem-button').click(function() {
$('#rand-problem-button').addClass('am-disabled');
$.get("https://www.luogu.com.cn/problem/list?difficulty=" + $('[name=rand-problem-rating]')[0].value + "&type=" + $('[name=rand-problem-source]')[0].value + "&page=1&_contentOnly=1",
function (data) {
var arr = data;
if (arr['code'] != 200) {
$('#rand-problem-button').removeClass('am-disabled');
show_alert("好像哪里有点问题", arr["message"]);
}
else {
var problem_count = arr['currentData']['problems']['count'];
var page_count = Math.ceil(problem_count / 50);
var rand_page = Math.floor(Math.random()*page_count) + 1;
$.get("https://www.luogu.com.cn/problem/list?difficulty=" + $('[name=rand-problem-rating]')[0].value + "&type=" + $('[name=rand-problem-source]')[0].value + "&page=" + rand_page + "&_contentOnly=1",
function(data) {
var list = data['currentData']['problems']['result'];
var rand_idx = Math.floor(Math.random()*list.length);
var pid = list[rand_idx]['pid'];
location.href = "https://www.luogu.com.cn/problem/" + pid;
}
);
}
}
);
});
},499);
}
};
你需要进行的修改如下:
将var background = 之后的URL改为你的背景图片,可以放任意个,会随机选择图片.
将洛谷改为默认主题.
这个脚本的功能:
修改背景图片,透明化内容
实时接收私信,并在右上角以提示方式给出.
主页 -> 练习中的题目带颜色.
按照难度随机跳转题目
修复的Bug:
更改题目颜色功能干扰验证码运行(2022年7月7日修复)
透明度适用于博客编辑框(2022年7月7日修复)
拒绝div不存在而错误终止脚本的情况(2022年7月7日修复)
功能会持续更新,但目前不打算放到Tampermonkey的官网上.请认准这篇博客,并检查你的更新.
这份代码是结合了其他大佬的代码而成的,具体可见代码.
效果图:




PS:这个私信提示真的好用,刚刚收私信的时候右上角就来提示了……