1fichier auto-clicker

Ce script automatise le téléchargement instantané ou différé par compte à rebours.

От 27.01.2025. Виж последната версия.

За да инсталирате този скрипт, трябва да имате инсталирано разширение като Tampermonkey, Greasemonkey или Violentmonkey.

За да инсталирате този скрипт, трябва да имате инсталирано разширение като Tampermonkey или Violentmonkey.

За да инсталирате този скрипт, трябва да имате инсталирано разширение като Tampermonkey или Violentmonkey.

За да инсталирате този скрипт, трябва да имате инсталирано разширение като Tampermonkey или Userscripts.

За да инсталирате скрипта, трябва да инсталирате разширение като Tampermonkey.

За да инсталирате този скрипт, трябва да имате инсталиран скриптов мениджър.

(Вече имам скриптов мениджър, искам да го инсталирам!)

За да инсталирате този стил, трябва да инсталирате разширение като Stylus.

За да инсталирате този стил, трябва да инсталирате разширение като Stylus.

За да инсталирате този стил, трябва да инсталирате разширение като Stylus.

За да инсталирате този стил, трябва да имате инсталиран мениджър на потребителски стилове.

За да инсталирате този стил, трябва да имате инсталиран мениджър на потребителски стилове.

За да инсталирате този стил, трябва да имате инсталиран мениджър на потребителски стилове.

(Вече имам инсталиран мениджър на стиловете, искам да го инсталирам!)

// ==UserScript==
// @name        1fichier auto-clicker
// @name:en     1fichier auto-clicker
// @namespace   Violentmonkey Scripts
// @icon        data:image/png;base64,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
// @match       https://1fichier.com/*
// @grant       window.close
// @grant       GM_addStyle
// @version     1.1
// @license     GNU GPLv3
// @author      Dummy_mole
// @description Ce script automatise le téléchargement instantané ou différé par compte à rebours.
// @description:en This script automate instant or delayed by countdown download.
// ==/UserScript==

(() => {
  'use strict'

  //----------------------------------------General Variables---------------------------------------

  const delayBeforeReload = 300000 // 5 min  300000ms (300s) / 60000ms ==> (60s) = 5 min
  const localLangage = (navigator.language || navigator.userLanguage)?.split('-')[0] === "fr" ? "fr" : "en"

  const messages = {
    fr: {
      downloadStart: "Votre téléchargement commencera automatiquement à ",
      reloadMessage: "Un téléchargement est déjà en cours - Prochain rechargement à ",
      autoStartMessage: "Le téléchargement commencera automatiquement à la fin du compte à rebours",
      startSoonMessage: "🚀Téléchargement immminent🚀",
      remainingMinutes: "🚀",
      minutesLeft: "min restantes"
    },
    en: {
      downloadStart: "Your Download will automatically start at ",
      reloadMessage: "A download is already in progress - next Reload at ",
      autoStartMessage: "The download will start automatically at the end of the countdown",
      startSoonMessage: "🚀The download is about to start🚀",
      remainingMinutes: "🚀",
      minutesLeft: "min left"
    }
  }

  //------------------------------------------Functions----------------------------------------------

  function getLocalizedMessage(key) {
    return messages[localLangage][key]
  }

  function waitForElm(selector, all = false) {
    const elementDirect = all
      ? document.querySelectorAll(selector)
      : document.querySelector(selector)

    return new Promise(resolve => {
      if (elementDirect) {
        return resolve(elementDirect)
      }

      const observer = new MutationObserver(mutations => {
        const elementObserved = all
          ? document.querySelectorAll(selector)
          : document.querySelector(selector)

        if (elementObserved) {
          resolve(elementObserved)
          observer.disconnect()
        }
      })

      observer.observe(document.body, { childList: true, subtree: true })
    })
  }

  function moveMessage(parent, endTargetElement) {
    const newDiv = document.createElement('div')
    newDiv.className = 'moved-message'

    while (parent.firstChild !== endTargetElement) newDiv.appendChild(parent.firstChild)

    parent.prepend(newDiv)
    const lastNode = [...newDiv.childNodes].at(-1)
    const text = lastNode.nodeValue
    const minutes = text.match(/\d+/)[0]
    const beforeMinutes = text.match(/(.*?)\d+/)[1]
    const afterMinutes = text.match(/\d+(.*)/)[1]

    const formattedTimeNode = `
    <div class="time-container">
      <div class="time-node">${beforeMinutes}<span class="time-left">${minutes}</span>${afterMinutes}</div>
      <div class="time-node">${getLocalizedMessage('downloadStart')}<span class="dl-start-time">00:00</span></div>
    </div>`

    newDiv.removeChild(lastNode)
    newDiv.insertAdjacentHTML('beforeend', formattedTimeNode)

    return newDiv
  }

  function calculateEndTime(timeInMinutes, locale) {
    const date = new Date(Date.now() + timeInMinutes * 60000)
    const options = locale === 'en' ? { hour: 'numeric', minute: 'numeric', hour12: true } : { hour: '2-digit', minute: '2-digit' }
    return date.toLocaleTimeString(locale, options)
  }

  function updateTabTitle(time) {
    document.title = time >= 1
      ? `1fichier - ${time === 1 ? getLocalizedMessage('remainingMinutes') : '⏳'} ${time} ${getLocalizedMessage('minutesLeft')}`
      : getLocalizedMessage('startSoonMessage')
  }

  function updateValues(newValues, firstEl, lastEl) {
    const { remainingMinutes, endTime } = newValues
    updateTabTitle(remainingMinutes)
    firstEl.textContent = remainingMinutes
    lastEl.textContent = endTime
  }

  //----------------------------------------------Code------------------------------------------------

  waitForElm('.ok.btn-general.btn-orange').then(dlBtn => {
    const spanWarn = document.querySelector(".ct_warn span")
    // If "!" appears in the warning, this means that the clock is running or a download is already in progress.
    if (spanWarn && /!/gi.test(spanWarn.textContent)) {
      const spanWarnParent = spanWarn.parentNode

      // If there is a warning with no number in it, that means this is a "downloas in progress" message.
      if (!/\d/.test(spanWarnParent.innerText)) {
        const delayDisplayed = delayBeforeReload / 60000
        const message = getLocalizedMessage('reloadMessage')
        const endTime = calculateEndTime(delayDisplayed, localLangage)
        dlBtn.value = `${message} ${endTime}`
        dlBtn.disabled = true
        console.log("A download is already in progress")
        document.title = `1fichier: Auto reload - ${endTime}`
        setInterval(() => location.reload(), delayBeforeReload)
      } else {
        dlBtn.disabled = true

        waitForElm('.clock.flip-clock-wrapper').then(clockWrapper => {
          // Move all nodes before clockWrapper to a new div for convenience.
          const timeMessageContainer = moveMessage(spanWarnParent, clockWrapper)
          const timeToWaitEl = timeMessageContainer.querySelector('.time-left')
          const dlStartTimeEl = timeMessageContainer.querySelector('.dl-start-time')

          // Time information initialization part
          const initialTimeToWait = +timeToWaitEl.textContent
          const startTime = Date.now()
          const calculateRemainingMinutes = (startTime, initialTime) => Math.floor((startTime + (initialTime + 1) * 60000 - Date.now()) / 60000)
          const endTime = calculateEndTime(initialTimeToWait, localLangage)
          let remainingMinutes = calculateRemainingMinutes(startTime, initialTimeToWait)
          updateValues({ remainingMinutes, endTime }, timeToWaitEl, dlStartTimeEl)

          dlBtn.value = getLocalizedMessage('autoStartMessage')

          let allInn = clockWrapper.querySelectorAll('.inn')
          const allInLength = allInn.length
          const totalDisplayedNumber = allInLength / 4

          const countDownChecker = setInterval(() => {
            // Update remaining time message every 10s
            remainingMinutes = calculateRemainingMinutes(startTime, initialTimeToWait)

            const innTextContentArray = []

            for (const inn of allInn) {
              innTextContentArray.push(+inn.textContent)
            }

            const sum = innTextContentArray.reduce((acc, value) => acc + value, 0)

            if (+sum === totalDisplayedNumber * 2) {
              clearInterval(countDownChecker)
              dlBtn.disabled = false
              dlBtn.click()
            }

            // refresh new values
            allInn = clockWrapper.querySelectorAll('.inn')
            innTextContentArray.length = 0
            updateValues({ remainingMinutes, endTime }, timeToWaitEl, dlStartTimeEl)

            console.log('next check in 10s')
          }, 10000)
        })
      }
    } else {
      // The element below only appears on the first page, allowing us to differentiate page 1 from page 2 and to know when to automatically close the tab/window.
      const firstPageRefElement = document.querySelector('.CKBL')
      dlBtn.click()

      if (!firstPageRefElement) {
        setTimeout(() => window.close(), 1000)
      }
    }
  })

  //------------------------------------------------CSS-----------------------------------------------

  const style = `

    #dlw,
    #dlw1 {
      display: none !important;
    }

    #dlb {
      display: block !important;
      width: unset !important;
    }

    .time-container {
      display: flex;
      margin: auto;
      justify-content: center;
    }

    .time-left,
    .dl-start-time {
      color: red;
      text-decoration: underline;
      font-style: normal;
    }
  `
  GM_addStyle(style)
})()