uns0urce

Autotype and auto choose target for s0urce.io

// ==UserScript==
// @name         uns0urce
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  Autotype and auto choose target for s0urce.io
// @author       You
// @match        https://s0urce.io/
// @icon         https://www.google.com/s2/favicons?sz=64&domain=s0urce.io
// @grant        none
// @license      MIT
// ==/UserScript==

(function () {
    'use strict'

    const adblock = document.getElementById('window-msg2')
    adblock.style.display = 'none'

    const desktopWrapper = document.getElementById('desktop-wrapper')
    const customDesktopSettings = document.createElement('div')
    customDesktopSettings.classList.add('desktop-element')
    customDesktopSettings.id = 'desktop-settings'
    customDesktopSettings.style.position = 'absolute'
    customDesktopSettings.style.top = '255px'
    customDesktopSettings.style.left = '130px'
    const customDesktopSettingsImage = document.createElement('img')
    customDesktopSettingsImage.src = 'https://cdn.discordapp.com/attachments/1121687891404406815/1125611167843352617/tampermonkey.png'
    customDesktopSettingsImage.classList.add('desktop-element-img')
    const customDesktopSettingsTitle = document.createElement('div')
    customDesktopSettingsTitle.classList.add('desktop-element-title')
    customDesktopSettingsTitle.innerText = 'uns0urce'
    customDesktopSettings.appendChild(customDesktopSettingsImage)
    customDesktopSettings.appendChild(customDesktopSettingsTitle)
    desktopWrapper.appendChild(customDesktopSettings)
    const windowWrapper = document.getElementsByClassName('window-wrapper')[0]
    const customWindow = document.createElement('div')
    customWindow.classList.add('window')
    customWindow.id = 'window-autotype'
    customWindow.style.top = '234px'
    customWindow.style.left = '291px'
    customWindow.style.borderColor = 'rgb(77, 100, 122)'
    customWindow.style.zIndex = '10'
    customWindow.style.display = 'none'
    const customWindowTitle = document.createElement('div')
    customWindowTitle.classList.add('window-title')
    customWindowTitle.style.backgroundColor = 'rgb(77, 100, 122)'
    const customWindowTitleImage = document.createElement('img')
    customWindowTitleImage.src = 'https://cdn.discordapp.com/attachments/1121687891404406815/1125611167843352617/tampermonkey.png'
    customWindowTitleImage.classList.add('icon-small')
    customWindowTitleImage.classList.add('window-title-icon')
    const customWindowClose = document.createElement('span')
    customWindowClose.classList.add('window-close-style')
    customWindowClose.classList.add('window-close')
    const customWindowCloseImage = document.createElement('img')
    customWindowCloseImage.src = '../client/img/icon-close.png'
    customWindowCloseImage.classList.add('window-close-img')
    customWindowClose.appendChild(customWindowCloseImage)
    customWindowTitle.appendChild(customWindowTitleImage)
    customWindowTitle.appendChild(customWindowClose)
    const customWindowContent = document.createElement('div')
    customWindowContent.classList.add('window-content')
    customWindowContent.style.width = '360px'
    customWindowContent.style.height = '160px'
    customWindow.appendChild(customWindowTitle)
    customWindow.appendChild(customWindowContent)
    windowWrapper.appendChild(customWindow)

    // Open window from desktop
    customDesktopSettings.addEventListener('click', function () {
        if (customWindow.style.display === 'none') {
            customWindow.style.display = ''
        } else {
            customWindow.style.display = 'none'
        }
    })

    // Close window
    customWindowClose.addEventListener('click', function () {
        customWindow.style.display = 'none'
    })

    // Drag window
    let isDragging = false
    let dragX = 0
    let dragY = 0
    customWindowTitle.addEventListener('mousedown', function (event) {
        isDragging = true
        dragX = event.clientX
        dragY = event.clientY
    })

    document.addEventListener('mousemove', function (event) {
        if (isDragging) {
            const deltaX = event.clientX - dragX
            const deltaY = event.clientY - dragY
            const currentX = parseInt(customWindow.style.left)
            const currentY = parseInt(customWindow.style.top)
            customWindow.style.left = `${currentX + deltaX}px`
            customWindow.style.top = `${currentY + deltaY}px`
            dragX = event.clientX
            dragY = event.clientY
        }
    })

    document.addEventListener('mouseup', function () {
        isDragging = false
    })

    // Settings
    // Autotype toggle button
    const enableButton = document.createElement('div')
    enableButton.classList.add('button')
    enableButton.id = 'settings-button-autotype'
    enableButton.innerText = 'AutoType: On'
    customWindowContent.appendChild(enableButton)

    enableButton.addEventListener('click', function () {
        if (enableButton.innerText === 'AutoType: On') {
            enableButton.innerText = 'AutoType: Off'
            autoTypeEnabled = false
        } else {
            enableButton.innerText = 'AutoType: On'
            autoTypeEnabled = true
        }
    })

    // Line break
    const br = document.createElement('br')
    const br2 = document.createElement('br')
    customWindowContent.appendChild(br)
    customWindowContent.appendChild(br2)

    // Speed input in MS
    const speedLabel = document.createElement('label')
    speedLabel.innerText = 'Speed (MS)'
    customWindowContent.appendChild(speedLabel)

    const speedInput = document.createElement('input')
    speedInput.type = 'number'
    speedInput.min = '1'
    speedInput.max = '1000'
    speedInput.value = '350'
    speedInput.style.width = '50px'
    speedInput.style.marginLeft = '10px'
    speedInput.style.marginRight = '10px'
    customWindowContent.appendChild(speedInput)

    // Line break
    const br3 = document.createElement('br')
    const br4 = document.createElement('br')
    customWindowContent.appendChild(br3)
    customWindowContent.appendChild(br4)

    // Auto choose target
    const autoChooseTarget = document.createElement('div')
    autoChooseTarget.classList.add('button')
    autoChooseTarget.id = 'settings-button-autotype'
    autoChooseTarget.innerText = 'Auto Choose Target: Off'
    customWindowContent.appendChild(autoChooseTarget)

    autoChooseTarget.addEventListener('click', function () {
        if (autoChooseTarget.innerText === 'Auto Choose Target: On') {
            autoChooseTarget.innerText = 'Auto Choose Target: Off'
            autoChooseTargetEnabled = false
        } else {
            autoChooseTarget.innerText = 'Auto Choose Target: On'
            autoChooseTargetEnabled = true

            const toolTypeImage = document.getElementsByClassName('tool-type-img')[0]
            const loadEvent = new Event('load')
            toolTypeImage.dispatchEvent(loadEvent)
        }
    })


    const targetMessageInput = document.getElementById('targetmessage-input')
    targetMessageInput.value = 'smacked by uns0urce autotype'

    // --- //

    let autoTypeEnabled = true
    let autoChooseTargetEnabled = false
    async function autoType() {
        const toolTypeForm = document.getElementById('tool-type-form')
        const toolTypeInput = document.getElementById('tool-type-word')
        const toolTypeImage = document.getElementsByClassName('tool-type-img')[0]

        const knownWordsFetch = await fetch('https://raw.githubusercontent.com/Lozarth/outs0urce/main/words.json')
        const knownWords = await knownWordsFetch.json()

        toolTypeImage.addEventListener('load', function () {
            if (!autoTypeEnabled) return

            if (toolTypeImage.src === 'https://s0urce.io/client/img/words/template.png' && autoChooseTargetEnabled) {
                const playerList = document.getElementById('player-list')
                const playerListRows = playerList.getElementsByTagName('tr')

                const randomPlayer = playerListRows[Math.floor(Math.random() * playerListRows.length)]
                randomPlayer.click()

                const hackButton = document.getElementById('window-other-button')
                hackButton.click()

                const portButton1 = document.getElementById('window-other-port1')
                const portButton2 = document.getElementById('window-other-port2')
                const portButton3 = document.getElementById('window-other-port3')

                const randomPort = Math.floor(Math.random() * 3)

                if (randomPort === 0) {
                    portButton1.click()
                } else if (randomPort === 1) {
                    portButton2.click()
                } else {
                    portButton3.click()
                }
            }

            const wordObject = knownWords.find(knownWord => knownWord.image === toolTypeImage.src)

            if (wordObject) {
                toolTypeInput.value = wordObject.word

                let delay = parseInt(speedInput.value)
                let randomVariation = Math.floor(Math.random() * 100)

                delay += randomVariation

                setTimeout(function () {
                    toolTypeForm.requestSubmit()
                }, delay)
            }
        })

        // toolTypeInput.addEventListener('keydown', function (event) {
        //     if (event.key === 'Enter') {
        //         const enteredWord = toolTypeInput.value
        //         const wordImage = toolTypeImage.src
        //         const wordObject = knownWords.find(knownWord => knownWord.word === enteredWord)

        //         if (!wordObject || wordObject.image !== wordImage) {
        //             // Push to custom known words local storage

        //         }

        //     }
        // })
    }

    autoType()
})()