// ==UserScript== // @name Duolingo PRO // @namespace http://tampermonkey.net/ // @version 3.0BETA.02 // @description The fastest Duolingo XP farmer, working as of July 2024. // @author anonymousHackerIV // @match https://*.duolingo.com/* // @icon https://github.com/anonymoushackerIV/Duolingo-Pro-BETA/blob/main/assets/duolingo-pro-logo-square-round.png.png?raw=true // @grant GM_log // @downloadURL none // ==/UserScript== let storageLocal; let storageSession; let limits; let versionNumber = "02"; let storageLocalVersion = "02"; let storageSessionVersion = "02"; let versionName = "BETA.02"; let versionFullname = "3.0BETA.02"; let serverURL = "https://www.duolingopro.net"; let greasyfork = true; let hidden = false; let lastPage; let currentPage = 1; let legacyMode = false; let solvingIntervalId; let isAutoMode; let findReactMainElementClass = '_3yE3H'; let reactTraverseUp = 1; const debug = false; if (localStorage.getItem("DLP_Local_Storage") == null || JSON.parse(localStorage.getItem("DLP_Local_Storage")).storageVersion !== storageLocalVersion) { localStorage.setItem("DLP_Local_Storage", JSON.stringify({ "version": versionNumber, "terms": "00", "pins": { "home": [1, 2], "legacy": [1, 2] }, "legacy": { "solveSpeed": 0.9 }, "settings": { "autoUpdate": greasyfork, "solveSpeed": 0.9 }, "notifications": [ { "id": "0001" } ], "tips": { "seeMore1": false }, "onboarding": false, "storageVersion": storageLocalVersion })); storageLocal = JSON.parse(localStorage.getItem("DLP_Local_Storage")); } else { storageLocal = JSON.parse(localStorage.getItem("DLP_Local_Storage")); } function saveStorageLocal() { localStorage.setItem("DLP_Local_Storage", JSON.stringify(storageLocal)); } if (sessionStorage.getItem("DLP_Session_Storage") == null || JSON.parse(sessionStorage.getItem("DLP_Session_Storage")).storageVersion !== storageSessionVersion) { sessionStorage.setItem("DLP_Session_Storage", JSON.stringify({ "legacy": { "page": 0, "status": false, "path": { "type": "lesson", "amount": 0 }, "practice": { "type": "lesson", "amount": 0 }, "listen": { "type": "lesson", "amount": 0 }, "lesson": { "unit": 1, "lesson": 1, "type": "lesson", "amount": 0 } }, "notifications": [ { "id": "0001" } ], "storageVersion": storageSessionVersion })); storageSession = JSON.parse(sessionStorage.getItem("DLP_Session_Storage")); } else { storageSession = JSON.parse(sessionStorage.getItem("DLP_Session_Storage")); } function saveStorageSession() { sessionStorage.setItem("DLP_Session_Storage", JSON.stringify(storageSession)); } let CSS1 = ` @font-face { font-family: 'Duolingo Pro Rounded'; src: url(${serverURL}/static/3.0/assets/fonts/Duolingo-Pro-Rounded-Semibold.woff) format('woff'); } `; let HTML2 = `
Switch to Legacy
Show
Connecting
Donate
Feedback
Settings
Release Notes
Duolingo
PRO 3.0
${versionName}
How much XP would you like to get?
GET
How many Gems would you like to get?
GET
Terms & Conditions
See more
${warning.head}
${warning.body}
${warning.head}
${warning.body}
${warning.head}
${warning.body}