[osu!]Sayobot's 镜像站 存档当前页码 跳转页面(自用备份)

以前经常在镜像站找谱下,一找就是几十页。但是下一次进来的时候又是从第一页开始了(我在镜像站没有找到类似页码或者能跳到指定页码的功能)。最后研究了一下可以通过修改offset值快速到之前自己浏览的页数。 有爱自取,顺便我也存个档。
offset值获取途径:
1.自己看最后一次的/post 请求中的参数 自行通过记事本保存
2. 点下存档offset值按钮
食用:输入offset值,点击设置按钮,再点原网站的下一页功能即可到之前浏览的地方。

// ==UserScript==
// @name Sayobot跳转
// @namespace http://tampermonkey.net/
// @version 0.1
// @description Jump Jump
// @author bladek
// @match https://osu.sayobot.cn/home
// @run-at document-start
// @require https://scriptcat.org/lib/637/1.3.1/ajaxHooker.js
// @grant unsafeWindow
// ==/UserScript==
(function () {
console.log('加载脚本');
let saveOffset = localStorage.getItem("my-offset") || 0;
let saveFlag = false;
let nowOffset = 0;
let previewSongsList = [];
let nowPlayIndex = 0;
ajaxHooker.hook(request => {
if (request.url === 'https://api.sayobot.cn/?post' && request.method == 'POST' ) {
const sendResult = JSON.parse(request.data) || {};
console.log(request.data)
console.log(sendResult)
nowOffset = sendResult.offset;
nowOffsetDom.innerText = nowOffset;
if(saveFlag) {
console.log("flag enter")
sendResult.offset = saveOffset - 0;
console.log(JSON.stringify(sendResult))
request.data = JSON.stringify(sendResult)
saveFlag = false;
}
}
});
const divStr = `
<div class="temp" style="position: fixed;
z-index: 9999;
right: 40px;
top: 250px;
width: 293px;
height: 137px;
border: 1px solid red;
display:flex;
justify-content:center;
align-items:center;
flex-direction:column;"
>
<audio id="myAudio"></audio>
<p id="title" style="user-select: inherit;"></p>
<div>
<button id="next" onclick="play('prev')">下一首</button>
<button id="prev" onclick="play('next')">上一首</button>
<button id="save">存档目前Offset值</button>
</div>
<div style="display:flex"><span>修改Offset:</span><input type="text" id="offsetValue" value="${saveOffset}"/><button id="setOffset">设置!</button></div>
<p>当前偏差值:<span id="nowOffset">${nowOffset}</span></p>
</div>
`;
const div = document.createElement("div");
div.innerHTML = divStr;
document.body.append(div);
const audio = document.getElementById("myAudio");
const title = document.getElementById("title");
const save = document.getElementById("save");
const setOffset = document.getElementById("setOffset");
const nowOffsetDom = document.getElementById("nowOffset");
const play = (action) => {
const { previewLink, title: songTitle } = previewSongsList[nowPlayIndex];
audio.src = previewLink;
title.innerText = songTitle;
if (action == "next") {
nowPlayIndex++;
} else {
if (nowPlayIndex > 1) {
nowPlayIndex--;
}
}
console.log(previewSongsList);
console.log(nowPlayIndex);
audio.play();
};
save.addEventListener("click", () => {
localStorage.setItem("my-offset", nowOffset);
});
setOffset.addEventListener("click", () => {
saveOffset = document.getElementById('offsetValue').value;
nowOffset = saveOffset;
saveFlag = true;
alert("设置完成!")
});
})();