您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
检测其乐论坛福利放送版块的赠key剩余数量
当前为
// ==UserScript== // @name Giveaway Left Check // @namespace Giveaway-Left-Check // @version 0.1 // @description 检测其乐论坛福利放送版块的赠key剩余数量 // @author HCLonely // @include *://keylol.com/* // @require https://cdn.jsdelivr.net/npm/[email protected]/dist/jquery.min.js // @run-at document-end // @grant GM_xmlhttpRequest // @grant GM_addStyle // @connect marvelousga.com // @connect grabfreegame.com // @connect bananagiveaway.com // @connect gamehag.com // @connect prys.revadike.com // @connect takekey.ru // @connect alienwarearena.com // ==/UserScript== (function () { 'use strict' const leftTitle = $('.subforum_left_title_left_up a').eq(3) const leftTitleHref = leftTitle.length > 0 ? leftTitle.attr('href') : '' if ((leftTitleHref.includes('f319-1') || (leftTitleHref.includes('page=1') && leftTitleHref.includes('fid=319'))) && leftTitle.text() === '福利放送') { const marvelousgaLinks = $('a[href*="marvelousga.com"]') const grabfreegameLinks = $('a[href*="grabfreegame.com"],a[href*="bananagiveaway.com"]') const gamehagLinks = $('a[href*="gamehag.com"]') const prysLinks = $('a[href*="prys.revadike.com"]') const takekeyLinks = $('a[href*="takekey.ru"]') const alienwarearenaLinks = $('a[href*="alienwarearena.com"]') if (marvelousgaLinks.length > 0) { for (const e of marvelousgaLinks) { const test = $(e).attr('href').match(/https?:\/\/marvelousga\.com\/giveaway\/(.+)/) const id = test ? test[1] : false if (id) checkMarvelousga(id, e) } } if (grabfreegameLinks.length > 0) { for (const e of grabfreegameLinks) { const link = $(e).attr('href') if (/https?:\/\/www\.(grabfreegame|bananagiveaway)\.com\/giveaway\/.*/.test(link)) checkGrabfreegame(link, e) } } if (gamehagLinks.length > 0) { for (const e of gamehagLinks) { const link = $(e).attr('href') if (/https?:\/\/.*?gamehag\.com\/giveaway\/[\d]+.*?/.test(link)) checkGamehag(link, e) } } if (prysLinks.length > 0) { for (const e of prysLinks) { const link = $(e).attr('href') if (/https?:\/\/prys\.revadike\.com\/giveaway\/\?id=[\d]+/.test(link)) checkPrys(link, e) } } if (takekeyLinks.length > 0) { for (const e of takekeyLinks) { const link = $(e).attr('href') if (/https?:\/\/takekey\.ru\/distribution\/[\d]+/.test(link)) checkTakekey(link, e) } } if (alienwarearenaLinks.length > 0) { for (const e of alienwarearenaLinks) { const link = $(e).attr('href') if (/https?:\/\/.*?\.alienwarearena\.com\/ucf\/show\/[\d]+.*?/.test(link)) checkAlienwarearena(link, e) } } } function checkMarvelousga (id, e) { const thisEle = $('a[href="' + $(e).attr('href') + '"]') GM_xmlhttpRequest({ method: 'get', url: 'https://marvelousga.com/', timeout: 30 * 1000, ontimeout: () => { if (!thisEle.next().hasClass('left-keys')) thisEle.after('<font class="left-keys lk-red" title="请求超时">timeout</font>') }, onerror: () => { if (!thisEle.next().hasClass('left-keys')) thisEle.after('<font class="left-keys lk-red" title="请求失败">error</font>') }, onload: response => { try { const a = $(`<div>${response.responseText}</div>`).find('a[href*="' + id + '"]') if (a.length > 0) { const leftKey = a.parent().children('small').text().trim().match(/[\d]+/)[0] if (!thisEle.next().hasClass('left-keys')) thisEle.after(`<font class="left-keys ${getClass(leftKey)}" title="剩余key数量">${leftKey}</font>`) } else { if (!thisEle.next().hasClass('left-keys')) thisEle.after(`<font class="left-keys ${getClass(0)}" title="剩余key数量">0</font>`) } } catch (err) { if (!thisEle.next().hasClass('left-keys')) thisEle.after('<font class="left-keys lk-red" title="获取数据失败">error</font>') } } }) } function checkGrabfreegame (url, e) { const thisEle = $('a[href="' + $(e).attr('href') + '"]') GM_xmlhttpRequest({ method: 'get', url, timeout: 30 * 1000, ontimeout: () => { if (!thisEle.next().hasClass('left-keys')) thisEle.after('<font class="left-keys lk-red" title="请求超时">timeout</font>') }, onerror: () => { if (!thisEle.next().hasClass('left-keys')) thisEle.after('<font class="left-keys lk-red" title="请求失败">error</font>') }, onload: response => { try { const counter = $(`<div>${response.responseText}</div>`).find('#giveaway .left>b') if (counter.length > 0) { const leftKey = counter.text().trim() if (!thisEle.next().hasClass('left-keys')) thisEle.after(`<font class="left-keys ${getClass(leftKey)}" title="剩余key数量">${leftKey}</font>`) } else { if (!thisEle.next().hasClass('left-keys')) thisEle.after(`<font class="left-keys ${getClass(0)}" title="剩余key数量">0</font>`) } } catch (err) { if (!thisEle.next().hasClass('left-keys')) thisEle.after('<font class="left-keys lk-red" title="获取数据失败">error</font>') } } }) } function checkGamehag (url, e) { const thisEle = $('a[href="' + $(e).attr('href') + '"]') GM_xmlhttpRequest({ method: 'get', url, timeout: 30 * 1000, ontimeout: () => { if (!thisEle.next().hasClass('left-keys')) thisEle.after('<font class="left-keys lk-red" title="请求超时">timeout</font>') }, onerror: () => { if (!thisEle.next().hasClass('left-keys')) thisEle.after('<font class="left-keys lk-red" title="请求失败">error</font>') }, onload: response => { try { const counter = $(`<div>${response.responseText}</div>`).find('div.giveaway-counter').not(':contains("day")').find('.strong') if (counter.length > 0) { const leftKey = counter.text().trim() if (!thisEle.next().hasClass('left-keys')) thisEle.after(`<font class="left-keys ${getClass(leftKey)}" title="剩余key数量">${leftKey}</font>`) } else { if (!thisEle.next().hasClass('left-keys')) thisEle.after(`<font class="left-keys ${getClass(0)}" title="剩余key数量">0</font>`) } } catch (err) { if (!thisEle.next().hasClass('left-keys')) thisEle.after('<font class="left-keys lk-red" title="获取数据失败">error</font>') } } }) } function checkPrys (url, e) { const thisEle = $('a[href="' + $(e).attr('href') + '"]') GM_xmlhttpRequest({ method: 'get', url, timeout: 30 * 1000, ontimeout: () => { if (!thisEle.next().hasClass('left-keys')) thisEle.after('<font class="left-keys lk-red" title="请求超时">timeout</font>') }, onerror: () => { if (!thisEle.next().hasClass('left-keys')) thisEle.after('<font class="left-keys lk-red" title="请求失败">error</font>') }, onload: response => { try { const counter = $(`<div>${response.responseText}</div>`).find('#header :contains("left")') if (counter.length > 0) { const leftKey = counter.text().trim().match(/\(([\d]+).*\)/)[1] if (!thisEle.next().hasClass('left-keys')) thisEle.after(`<font class="left-keys ${getClass(leftKey)}" title="剩余key数量">${leftKey}</font>`) } else { if (!thisEle.next().hasClass('left-keys')) thisEle.after(`<font class="left-keys ${getClass(0)}" title="剩余key数量">0</font>`) } } catch (err) { if (!thisEle.next().hasClass('left-keys')) thisEle.after('<font class="left-keys lk-red" title="获取数据失败">error</font>') } } }) } function checkTakekey (url, e) { const thisEle = $('a[href="' + $(e).attr('href') + '"]') GM_xmlhttpRequest({ method: 'get', url, timeout: 30 * 1000, ontimeout: () => { if (!thisEle.next().hasClass('left-keys')) thisEle.after('<font class="left-keys lk-red" title="请求超时">timeout</font>') }, onerror: () => { if (!thisEle.next().hasClass('left-keys')) thisEle.after('<font class="left-keys lk-red" title="请求失败">error</font>') }, onload: response => { try { const counter = $(`<div>${response.responseText}</div>`).find('span.text-muted:contains("Left")') if (counter.length > 0) { const leftKey = counter.text().trim().match(/[\d]+/)[0] if (!thisEle.next().hasClass('left-keys')) thisEle.after(`<font class="left-keys ${getClass(leftKey)}" title="剩余key数量">${leftKey}</font>`) } else { if (!thisEle.next().hasClass('left-keys')) thisEle.after(`<font class="left-keys ${getClass(0)}" title="剩余key数量">0</font>`) } } catch (err) { if (!thisEle.next().hasClass('left-keys')) thisEle.after('<font class="left-keys lk-red" title="获取数据失败">error</font>') } } }) } function checkAlienwarearena (url, e) { const thisEle = $('a[href="' + $(e).attr('href') + '"]') GM_xmlhttpRequest({ method: 'get', url, timeout: 30 * 1000, ontimeout: () => { if (!thisEle.next().hasClass('left-keys')) thisEle.after('<font class="left-keys lk-red" title="请求超时">timeout</font>') }, onerror: () => { if (!thisEle.next().hasClass('left-keys')) thisEle.after('<font class="left-keys lk-red" title="请求失败">error</font>') }, onload: response => { try { let userCountry = response.responseText.match(/user_country.*?=.*?"([\w]+)"/) userCountry = userCountry ? userCountry[1] : '' let prestigeLevel = response.responseText.match(/prestige_level.*?=.*?([\d]+)/) prestigeLevel = prestigeLevel ? parseInt(prestigeLevel[1]) : 0 let fullLevel = response.responseText.match(/full_level.*?=.*?([\d]+)/) fullLevel = fullLevel ? parseInt(fullLevel[1]) : 0 let countryKeys = response.responseText.match(/countryKeys.*?=.*?(\{.+\});/) countryKeys = countryKeys ? JSON.parse(countryKeys[1]) : {} const keyType = prestigeLevel ? 'prestige' : 'normal' let userCountryKeys = countryKeys[userCountry][keyType] let lowestLevelWithKeys let highestKeysForUser let keysForUser = false for (const level in userCountryKeys) { if (userCountryKeys[level] > 0) { if (!lowestLevelWithKeys) { lowestLevelWithKeys = level } if (fullLevel >= level) { if (!highestKeysForUser || userCountryKeys[level] > highestKeysForUser) { highestKeysForUser = userCountryKeys[level] } } } } if (!highestKeysForUser && keyType === 'prestige') { userCountryKeys = countryKeys[userCountry].normal for (var level in userCountryKeys) { if (userCountryKeys[level] > 0) { if (!lowestLevelWithKeys) { lowestLevelWithKeys = level } if (fullLevel >= level) { if (!highestKeysForUser || userCountryKeys[level] > highestKeysForUser) { highestKeysForUser = userCountryKeys[level] } } } } } if (highestKeysForUser) { if (!thisEle.next().hasClass('left-keys')) thisEle.after(`<font class="left-keys ${getClass(highestKeysForUser)}" title="剩余key数量">${highestKeysForUser}</font>`) keysForUser = true } if (!keysForUser) { if (lowestLevelWithKeys) { if (!thisEle.next().hasClass('left-keys')) thisEle.after('<font class="left-keys lk-red" title="等级不足">等级不足</font>') } else { if (!thisEle.next().hasClass('left-keys')) thisEle.after('<font class="left-keys lk-red" title="剩余key数量">0</font>') } } } catch (err) { if (!thisEle.next().hasClass('left-keys')) thisEle.after('<font class="left-keys lk-red" title="获取数据失败">error</font>') } } }) } function getClass (left) { const leftKey = parseInt(left) if (leftKey >= 100) { return 'lk-green' } else if (leftKey > 0 && leftKey < 100) { return 'lk-yellow' } else { return 'lk-red' } } GM_addStyle(` .left-keys{ color: #fff; border-radius: 10px; padding: 0 5px; margin-left: 5px; } .lk-green{ background-color: #5cb85c; } .lk-yelow{ background-color: #f0ad4e; } .lk-red{ background-color: #d9534f; } `) })()
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址