您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Динамическое обновление времени в темах розыгрышей
// ==UserScript== // @name LztDynamicTimeContest // @version 0.1 // @description Динамическое обновление времени в темах розыгрышей // @author vuchaev2015 // @match https://zelenka.guru/threads/* // @icon https://www.google.com/s2/favicons?sz=64&domain=zelenka.guru // @grant none // @namespace https://gf.qytechs.cn/users/997663 // ==/UserScript== let postElement = document.querySelector('li[id^="post-"]'); if (postElement) { let postId = postElement.id.split('-')[1]; let selector = `#post-${postId} > div.messageInfo > div.messageContent > article > div > div.new-raffle-info.mn-15-0-0 > div:nth-child(1) > div:nth-child(2)`; let textElement = document.querySelector(selector); if (textElement) { let textContent = textElement.textContent; textContent = textContent.replace(/\s+/g, ' ').trim(); textContent = textContent.replace('Времени до завершения:', ''); console.log(textContent); let duration = 0; let match = textContent.match(/(\d+) д(ня|ней|ень)/); if (match) { duration += parseInt(match[1]) * 24 * 60 * 60 * 1000; } match = textContent.match(/(\d+) час/); if (match) { duration += parseInt(match[1]) * 60 * 60 * 1000; } match = textContent.match(/(\d+) минут/); if (match) { duration += parseInt(match[1]) * 60 * 1000; } match = textContent.match(/(\d+) секунд/); if (match) { duration += parseInt(match[1]) * 1000; } let currentTime = new Date(); let resultTime = new Date(currentTime.getTime() + duration); let lastRemainingTimeString = ''; let newElementAdded = false; let intervalId = setInterval(() => { let currentTime = new Date(); let remainingTime = resultTime - currentTime; if (remainingTime <= 0) { let resultTimeString = `${resultTime.getDate()} ${['янв', 'фев', 'мар', 'апр', 'май', 'июн', 'июл', 'авг', 'сен', 'окт', 'ноя', 'дек'][resultTime.getMonth()]} ${resultTime.getFullYear()} в ${resultTime.getHours()}:${resultTime.getMinutes().toString().padStart(2, '0')}`; textElement.innerHTML = `<div><p>До</p> ${resultTimeString}</div>`; let messageListElement = document.querySelector('ol.messageList'); if (messageListElement) { let usernameElements = messageListElement.querySelectorAll('a.username'); let rootUsernames = Array.from(usernameElements).filter(username => username.textContent === 'root') if (rootUsernames.length > 0 && !newElementAdded && !document.querySelector('span.button.contestIsFinished.disabled')) { let contestThreadBlockElement = document.querySelector('div.contestThreadBlock'); if (contestThreadBlockElement) { let textHeadingElement = contestThreadBlockElement.querySelector('div.textHeading'); if (textHeadingElement) { let newElement = document.createElement('span'); newElement.className = 'button contestIsFinished disabled'; newElement.innerHTML = '<i class="fa fa-check muted" aria-hidden="true"></i> Розыгрыш завершен'; contestThreadBlockElement.insertBefore(newElement, textHeadingElement.nextSibling); newElementAdded = true; let elementToRemove1 = document.querySelector(`#post-${postId} > div.messageInfo > div.messageContent > article > div > div.new-raffle-info.mn-15-0-0 > div:nth-child(1)`); if (elementToRemove1) { elementToRemove1.parentNode.removeChild(elementToRemove1); } let elementToRemove2 = document.querySelector(`#post-${postId} > div.messageInfo > div.messageContent > article > div > div.new-raffle-info.mn-15-0-0 > div:nth-child(2)`); if (elementToRemove2) { elementToRemove2.parentNode.removeChild(elementToRemove2); } let quickReplyMessageElement = document.querySelector('div.quickReply.message'); if (quickReplyMessageElement) { quickReplyMessageElement.outerHTML = '<div class="pageNavLinkGroup pageNavLinkGroupAfterPosts"><span class="element">Вы не можете выполнить это действие, потому что тема была закрыта.</span></div>'; } clearInterval(intervalId); } } } else { console.log(22)} let participateButtonElement = document.querySelector('.LztContest--Participate.button.mn-15-0-0.primary'); if (participateButtonElement) { participateButtonElement.parentNode.removeChild(participateButtonElement); } let contestCaptchaElement = document.querySelector('.ContestCaptcha.mn-15-0-0'); if (contestCaptchaElement) { contestCaptchaElement.parentNode.removeChild(contestCaptchaElement); } } } else { let days = Math.floor(remainingTime / (1000 * 60 * 60 * 24)); remainingTime -= days * (1000 * 60 * 60 * 24); let hours = Math.floor(remainingTime / (1000 * 60 * 60)); remainingTime -= hours * (1000 * 60 * 60); let minutes = Math.floor(remainingTime / (1000 * 60)); remainingTime -= minutes * (1000 * 60); let seconds = Math.floor(remainingTime / (1000)); let remainingTimeString = ''; if (days > 0) { remainingTimeString += ` ${days} ${declOfNum(days, ['день', 'дня', 'дней'])}`; } if ((hours > 0 || days > 0) && !(days === 0 && hours === 0)) { remainingTimeString += ` ${hours} ${declOfNum(hours, ['час', 'часа', 'часов'])}`; } if ((minutes > 0 || hours > 0 || days > 0) && !(days === 0 && hours === 0 && minutes === 0)) { remainingTimeString += ` ${minutes} ${declOfNum(minutes, ['минута', 'минуты', 'минут'])}`; } if (days === 0) { remainingTimeString += ` ${seconds} ${declOfNum(seconds, ['секунда', 'секунды', 'секунд'])}`; } if (remainingTimeString !== lastRemainingTimeString) { textElement.innerHTML = `<div><p>Времени до завершения:</p> ${remainingTimeString}</div>`; lastRemainingTimeString = remainingTimeString; } } }); } else { console.log('Текстовый элемент не найден на странице'); } } else { console.log('Элемент с id, начинающимся с "post-", не найден на странице'); } function declOfNum(number, titles) { cases = [2, 0, 1, 1, 1, 2]; return titles[(number %100 >4 && number %100 <20)?2:cases[(number %10 <5)?number %10:5]]; }
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址