// ==UserScript==
// @name U2种子备份查询
// @namespace https://u2.dmhy.org/
// @version 2.1
// @description 在页面下载旁加入图标,支持一键发送请求。
// @author McHobby & kysdm
// @grant none
// @match *://u2.dmhy.org/torrents.php*
// @match *://u2.dmhy.org/sendmessage.php?receiver=*
// @match *://u2.dmhy.org/details.php?id=*
// @match *://u2.dmhy.org/offers.php?id=*
// @match *://u2.dmhy.org/userdetails.php?id=*
// @require https://cdn.bootcss.com/jquery-cookie/1.4.1/jquery.cookie.min.js
// @require https://unpkg.com/xhook@latest/dist/xhook.min.js
// @connect cdn.jsdelivr.net
// @downloadURL none
// ==/UserScript==
// $.cookie 方法感觉可以弃用了,直接用 localStorage 就可以
// 在用户界面发起的请求,由于列表里没有做种人数,请求不一定会允许
(function () {
'use strict';
const userid = 45940; // 勿动
const Uploaders = 7;
let GstaticIco;
const date = new Date().getDate();
// Ajax-hook 有点复杂,用 xhook 简单点...
// 好像 Ajax-hook 的处理效率更高? 也可能我的写法有问题
// 列表如果上千了,就可以明显感觉到慢了,chrome任务管理器里直接99占用,wwwwwww
// 如果其他脚本也劫持了 ajax 请求,那可能会发生冲突!!!!!!!!
xhook.after(function (request, response) {
if (request.url.match(/getusertorrentlistajax\.php\?userid=\d+?&type=leeching/i)) {
response.text = userdetails(response.text);
}
});
let gdListObj = JSON.parse(localStorage.getItem("u2_gd_list"))
if (gdListObj === null || gdListObj.date !== date) {
let gdListValue = getList()
gdListValue.then(g => {
gdListObj = { date: date, list: g.trim().split('\n') };
console.log(gdListObj)
localStorage.setItem("u2_gd_list", JSON.stringify(gdListObj)); // https://www.runoob.com/jsref/obj-storage.html
})
gdListValue.catch(e => {
console.log('下载列表发生错误,HTTP状态码[' + e + ']。');
})
}
const gdList = gdListObj.list;
const lang = $('#locale_selection').val() // 获取当前网页使用的语言
let txt1 = {
'zh_CN': '发送请求',
'zh_TW': '發送請求',
'zh_HK': '發送請求',
'en_US': 'Send request',
'ru_RU': 'послать запрос' // 谷歌翻译
}
let txt2 = {
'zh_CN': '做种良好',
'zh_TW': '做種良好',
'zh_HK': '做種良好',
'en_US': 'Good seeding',
'ru_RU': 'хороший посев' // 谷歌翻译
}
let txt3 = {
'zh_CN': '记住邮箱地址',
'zh_TW': '記住信箱地址',
'zh_HK': '記住郵箱地址',
'en_US': 'Remember email address',
'ru_RU': 'Запомнить адрес электронной почты' // 谷歌翻译
}
let txt4 = {
'zh_CN': '邮箱地址错误或未定义,请重新输入。',
'zh_TW': '信箱地址錯誤或未定義,請重新輸入。',
'zh_HK': '郵箱地址錯誤或未定義,請重新輸入。',
'en_US': 'Email address is wrong or undefined, please re-enter.',
'ru_RU': 'Адрес электронной почты неверен или не указан, введите его еще раз.' // 谷歌翻译
}
let txt5 = {
'zh_CN': '下载种子',
'zh_TW': '下載種子',
'zh_HK': '下載種子',
'en_US': 'Download Torrent',
'ru_RU': 'Скачать Торрент'
}
if (location.href.match(/u2\.dmhy\.org\/torrents\.php/i)) {
new torrents();
} else if (location.href.match(/u2\.dmhy\.org\/(?:details|offers)\.php/i)) {
new torrents();
new details();
} else if (location.href.match(/u2\.dmhy\.org\/sendmessage\.php\?receiver=45940#\d+$/i)) { // 45940好像没法设置为变量
new sendmessage();
}
function torrents() {
const torrentTable = $('table.torrents')
torrentTable.find('> tbody > tr:not(:first-child)').each(function () {
const tds = $(this).find('> td');
const SeederNum = parseInt($(tds[tds.length - 3]).text());
const idLink = $(this).find("[href*='id=']")[0].getAttribute('href');
const id = parseInt(idLink.substr(idLink.indexOf('id=') + 3));
const Id_Data = gdList.findIndex((value) => value == id);
if (Id_Data != -1 && SeederNum <= Uploaders) {
GstaticIco = $(this).find('td.embedded')[1];
$(GstaticIco).width(55);
$(GstaticIco).prepend('
');
} else if (Id_Data != -1) {
GstaticIco = $(this).find('td.embedded')[1];
$(GstaticIco).width(55);
$(GstaticIco).prepend('
');
}
})
}
function details() {
const id = $("#outer > h3").text().split(/\(#(\d+?)\)/, 2)[1]
const SeederNum = $("#peercount").text().match(/^(\d+?)\s?(?:个做种者|個做種者|Seeders|Раздающих)/i)[1]
const Id_Data = gdList.findIndex((value) => value == Number(id));
if (Id_Data != -1 && SeederNum <= Uploaders) {
$("td.rowfollow:first").append(' [GD]');
} else if (Id_Data != -1) {
$("td.rowfollow:first").append('
\
\
\
\