// ==UserScript==
// @name Duolingo Pro BETA
// @namespace Violentmonkey Scripts
// @version 2.0BETA9.3
// @description Duolingo Auto Solver Tool - WORKING JANUARY 2024
// @author anonymoushackerIV
// @match https://*.duolingo.com/*
// @grant none
// @license MIT
// @require https://unpkg.com/@supabase/supabase-js@2.12.1
// @downloadURL none
// ==/UserScript==
let solvingIntervalId;
let isAutoMode = false;
let isSolving = false;
let isTokenRunning = false;
const debug = false;
let duolingoProCurrentVersionShort = "2.0B9.3";
let duolingoProCurrentVersion = "2.0 BETA 9.3";
let duolingoProFormalCurrentVersion = "2.0BETA9.3";
let solveSpeed;
if (parseInt(localStorage.getItem('DLPautoSolverSolveSpeed')) === undefined) {
solveSpeed = 3;
} else {
solveSpeed = parseInt(localStorage.getItem('DLPautoSolverSolveSpeed'));
}
let simulated;
if (JSON.parse(localStorage.getItem('DuolingoProSettingsHumaneSolvingMode')) === null) {
simulated = false;
} else {
simulated = JSON.parse(localStorage.getItem('DuolingoProSettingsHumaneSolvingMode'));
}
let isSendFeedbackButtonPressed = false;
let autoSolverBoxRepeatAmount = 0;
autoSolverBoxRepeatAmount = Number(sessionStorage.getItem('autoSolverBoxRepeatAmount'));
let DuolingoProAmountOfQuestionsEverSolved = 0;
DuolingoProAmountOfQuestionsEverSolved = Number(localStorage.getItem('DuolingoProAmountOfQuestionsEverSolved'));
let ProBlockBannerOneVisible = false;
if (JSON.parse(localStorage.getItem('ProBlockBannerOneVisible')) === null) {
ProBlockBannerOneVisible = false;
} else {
ProBlockBannerOneVisible = JSON.parse(localStorage.getItem('ProBlockBannerOneVisible'));
}
let autoSolverBoxPracticeOnlyMode;
let autoSolverBoxRepeatLessonMode;
if (JSON.parse(sessionStorage.getItem('autoSolverBoxPracticeOnlyMode')) === null) {
autoSolverBoxPracticeOnlyMode = true;
} else {
autoSolverBoxPracticeOnlyMode = JSON.parse(sessionStorage.getItem('autoSolverBoxPracticeOnlyMode'));
}
if (JSON.parse(sessionStorage.getItem('autoSolverBoxRepeatLessonMode')) === null) {
autoSolverBoxRepeatLessonMode = false;
} else {
autoSolverBoxRepeatLessonMode = JSON.parse(sessionStorage.getItem('autoSolverBoxRepeatLessonMode'));
}
let wasAutoSolverBoxRepeatStartButtonPressed = false;
if (JSON.parse(sessionStorage.getItem('wasAutoSolverBoxRepeatStartButtonPressed')) === null) {
wasAutoSolverBoxRepeatStartButtonPressed = false;
} else {
wasAutoSolverBoxRepeatStartButtonPressed = JSON.parse(sessionStorage.getItem('wasAutoSolverBoxRepeatStartButtonPressed'));
}
let wasDuolingoProJustSolveThisLessonButtonOnePressed = false;
if (JSON.parse(sessionStorage.getItem('wasDuolingoProJustSolveThisLessonButtonOnePressed')) === null) {
wasDuolingoProJustSolveThisLessonButtonOnePressed = false;
} else {
wasDuolingoProJustSolveThisLessonButtonOnePressed = JSON.parse(sessionStorage.getItem('wasDuolingoProJustSolveThisLessonButtonOnePressed'));
}
// Whats New Variables Start
try {
localStorage.removeItem('wasWhatsNewInTwoPointZeroBetaThreeFinished');
} catch (error) {}
try {
localStorage.removeItem('wasWhatsNewInTwoPointZeroBetaFourFinished');
} catch (error) {}
try {
localStorage.removeItem('wasWhatsNewInTwoPointZeroBetaSixFinished');
} catch (error) {}
try {
localStorage.removeItem('wasWhatsNewInTwoPointZeroBetaSevenFinished');
} catch (error) {}
// Whats New Variables End
let wasDuolingoProSettingsButtonOnePressed = false;
// Duolingo Pro Settings Variables Start
//moved here
let AutoSolverSettingsShowPracticeOnlyModeForAutoSolverBox = true;
let AutoSolverSettingsShowRepeatLessonModeForAutoSolverBox = true;
//moved here
let AutoSolverSettingsShowAutoSolverBox = true;
if (JSON.parse(localStorage.getItem('AutoSolverSettingsShowAutoSolverBox')) === null) {
AutoSolverSettingsShowAutoSolverBox = true; // default
} else if (JSON.parse(localStorage.getItem('AutoSolverSettingsShowAutoSolverBox')) === false) {
AutoSolverSettingsShowAutoSolverBox = JSON.parse(localStorage.getItem('AutoSolverSettingsShowAutoSolverBox'));
AutoSolverSettingsShowPracticeOnlyModeForAutoSolverBox = false;
localStorage.setItem('AutoSolverSettingsShowPracticeOnlyModeForAutoSolverBox', AutoSolverSettingsShowPracticeOnlyModeForAutoSolverBox);
} else {
AutoSolverSettingsShowAutoSolverBox = JSON.parse(localStorage.getItem('AutoSolverSettingsShowAutoSolverBox'));
}
let AutoSolverSettingsLowPerformanceMode = false;
if (JSON.parse(localStorage.getItem('AutoSolverSettingsLowPerformanceMode')) === null) {
AutoSolverSettingsLowPerformanceMode = false; // default
} else {
AutoSolverSettingsLowPerformanceMode = JSON.parse(localStorage.getItem('AutoSolverSettingsLowPerformanceMode'));
}
let DuolingoProSettingsProBlockMode = false;
if (JSON.parse(localStorage.getItem('DuolingoProSettingsProBlockMode')) === null) {
DuolingoProSettingsProBlockMode = false; // default
} else {
DuolingoProSettingsProBlockMode = JSON.parse(localStorage.getItem('DuolingoProSettingsProBlockMode'));
if (!DuolingoProSettingsProBlockMode) {
ProBlockBannerOneVisible = true;
localStorage.setItem('ProBlockBannerOneVisible', ProBlockBannerOneVisible);
}
}
let DuolingoProSettingsTurboSolveMode = false;
if (JSON.parse(localStorage.getItem('DuolingoProSettingsTurboSolveMode')) === null) {
DuolingoProSettingsTurboSolveMode = false;
} else {
DuolingoProSettingsTurboSolveMode = JSON.parse(localStorage.getItem('DuolingoProSettingsTurboSolveMode'));
}
let DuolingoProSettingsHumaneSolvingMode = true;
if (JSON.parse(localStorage.getItem('DuolingoProSettingsHumaneSolvingMode')) === null) {
DuolingoProSettingsHumaneSolvingMode = true;
} else {
DuolingoProSettingsHumaneSolvingMode = JSON.parse(localStorage.getItem('DuolingoProSettingsHumaneSolvingMode'));
}
let DuolingoProSettingsNeverEndMode = false;
if (JSON.parse(localStorage.getItem('DuolingoProSettingsNeverEndMode')) === null) {
DuolingoProSettingsNeverEndMode = false;
} else {
DuolingoProSettingsNeverEndMode = JSON.parse(localStorage.getItem('DuolingoProSettingsNeverEndMode'));
}
let DuolingoProShadeLessonsMode = true;
if (JSON.parse(localStorage.getItem('DuolingoProShadeLessonsMode')) === null) {
DuolingoProShadeLessonsMode = true;
} else {
DuolingoProShadeLessonsMode = JSON.parse(localStorage.getItem('DuolingoProShadeLessonsMode'));
}
let DuolingoProAntiStuckProtectionMode = true;
if (JSON.parse(localStorage.getItem('DuolingoProAntiStuckProtectionMode')) === null) {
DuolingoProAntiStuckProtectionMode = true;
} else {
DuolingoProAntiStuckProtectionMode = JSON.parse(localStorage.getItem('DuolingoProAntiStuckProtectionMode'));
}
let DuolingoProSettingsUpdateNotifications = true;
if (JSON.parse(localStorage.getItem('DuolingoProSettingsUpdateNotifications')) === null) {
DuolingoProSettingsUpdateNotifications = true;
} else {
DuolingoProSettingsUpdateNotifications = JSON.parse(localStorage.getItem('DuolingoProSettingsUpdateNotifications'));
}
let DuolingoProSettingsSolveIntervalValue = true;
if (JSON.parse(localStorage.getItem('DuolingoProSettingsSolveIntervalValue')) === null) {
DuolingoProSettingsSolveIntervalValue = true;
} else {
DuolingoProSettingsSolveIntervalValue = JSON.parse(localStorage.getItem('DuolingoProSettingsSolveIntervalValue'));
}
// Duolingo Pro Settings Variables End
function createButton(id, text, styleClass, eventHandlers) {
const button = document.createElement('button');
button.id = id;
button.innerText = text;
button.className = styleClass;
Object.keys(eventHandlers).forEach(event => {
button.addEventListener(event, eventHandlers[event]);
});
return button;
}
function addButtons() {
if (window.location.pathname === '/learn' && document.querySelector('a[data-test="global-practice"]')) {
return;
}
if (document.querySelector("#solveAllButton")) {
return;
}
const original = document.querySelector('[data-test="player-next"]');
const storiesContinue = document.querySelector('[data-test="stories-player-continue"]');
const target = original || storiesContinue;
if (!target) {
const startButton = document.querySelector('[data-test="start-button"]');
if (!startButton) {
return;
}
const solveAllButton = createButton("solveAllButton", "COMPLETE SKILL", "solve-all-btn", {
'click': () => {
solving(true);
setInterval(() => {
const startButton = document.querySelector('[data-test="start-button"]');
if (startButton && startButton.innerText.startsWith("START")) {
startButton.click();
}
}, 1000);
startButton.click();
}
});
startButton.parentNode.appendChild(solveAllButton);
} else {
const wrapper = document.querySelector('._10vOG, ._2L_r0');
wrapper.style.display = "flex";
const buttonsCSS = document.createElement('style');
buttonsCSS.innerHTML = `
.solve-btn {
position: relative;
min-width: 150px;
font-size: 17px;
border: none;
border-bottom: 4px solid #2b70c9;
border-radius: 16px;
padding: 13px 16px;
transform: translateZ(0);
transition: filter .0s;
font-weight: 700;
letter-spacing: .8px;
background: #1cb0f6;
color: rgb(var(--color-snow));
margin-left: 20px;
cursor: pointer;
}
.pause-btn {
position: relative;
min-width: 100px;
font-size: 17px;
border: none;
border-bottom: 4px solid #ff9600;
border-radius: 16px;
padding: 13px 16px;
transform: translateZ(0);
transition: filter .0s;
font-weight: 700;
letter-spacing: .8px;
background: #ffc800;
color: rgb(var(--color-snow));
margin-left: 20px;
cursor: pointer;
}
.hover {
filter: brightness(1.1);
}
.pressed {
border-bottom: 0px;
margin-bottom: 4px;
top: 4px;
}
`;
document.head.appendChild(buttonsCSS);
const solveCopy = createButton('solveAllButton', solvingIntervalId ? 'PAUSE SOLVE' : 'SOLVE ALL', 'solve-btn', {
'mousedown': () => solveCopy.classList.add('pressed'),
'mouseup': () => solveCopy.classList.remove('pressed'),
'mouseleave': () => solveCopy.classList.remove('pressed'),
'mousemove': () => solveCopy.classList.add('hover'),
'mouseleave': () => solveCopy.classList.remove('hover'),
'click': solving
});
const pauseCopy = createButton('', 'SOLVE', 'pause-btn', {
'mousedown': () => pauseCopy.classList.add('pressed'),
'mouseup': () => pauseCopy.classList.remove('pressed'),
'mouseleave': () => pauseCopy.classList.remove('pressed'),
'mousemove': () => pauseCopy.classList.add('hover'),
'mouseleave': () => pauseCopy.classList.remove('hover'),
'click': solve
});
target.parentElement.appendChild(pauseCopy);
target.parentElement.appendChild(solveCopy);
}
}
setInterval(addButtons, 500);
const DLPuniversalCSS = `
:root {
--DLP-red: #FF3B30;
--DLP-orange: #FF9500;
--DLP-yellow: #FFCC00;
--DLP-green: 52, 199, 89;
--DLP-cyan: #5AC8FA;
--DLP-blue: 0, 122, 255;
--DLP-indigo: #5856D6;
--DLP-purple: #AF52DE;
--DLP-pink: 255, 45, 85;
}
.noSelect {
user-select: none;
-moz-user-select: none;
-webkit-text-select: none;
-webkit-user-select: none;
}
.DPLBoxStyleT1 {
display: flex;
width: 512px;
padding: 16px;
justify-content: center;
align-items: center;
border-radius: 16px;
border: 2px solid rgb(var(--color-swan));
background: rgb(var(--color-snow));
box-shadow: 0px 0px 16px 0px rgba(0, 0, 0, 0.10);
transition: .2s;
}
.DPLBoxShadowStyleT1 {
position: fixed;
display: flex;
width: 100%;
height: 100vh;
justify-content: center;
align-items: center;
flex-shrink: 0;
background: rgba(0, 0, 0, 0.1);
backdrop-filter: blur(8px);
opacity: 0;
transition: .2s;
z-index: 2;
top: 0px;
bottom: 0px;
right: 0px;
left: 0px;
}
.VStack {
display: flex;
flex-direction: column;
}
.HStack {
display: flex;
flex-direction: row;
}
.selfFill {
align-self: stretch;
}
.paragraphText {
font-size: 16px;
font-weight: 700;
margin: 0;
}
.DPLPrimaryButtonStyleT1 {
display: flex;
height: 54px;
padding: 16px;
justify-content: center;
align-items: center;
gap: 8px;
flex: 1 0 0;
border-radius: 8px;
border: 2px solid rgba(0, 0, 0, 0.20);
border-bottom: 4px solid rgba(0, 0, 0, 0.20);
background: rgb(var(--DLP-blue));
color: #fff;
font-weight: 700;
transition: .1s;
cursor: pointer;
}
.DPLPrimaryButtonStyleT1:hover {
filter: brightness(0.95);
}
.DPLPrimaryButtonStyleT1:active {
filter: brightness(0.9);
height: 52px;
margin-top: 2px;
border-bottom: 2px solid rgba(0, 0, 0, 0.20);
}
.DPLSecondaryButtonStyleT1 {
display: flex;
height: 54px;
padding: 16px;
justify-content: center;
align-items: center;
gap: 8px;
border-radius: 8px;
border: 2px solid rgb(var(--DLP-blue), 0.1);
border-bottom: 4px solid rgb(var(--DLP-blue), 0.1);
background: rgb(var(--DLP-blue), 0.1);
color: rgb(var(--DLP-blue));
font-weight: 700;
transition: .1s;
cursor: pointer;
}
.DPLSecondaryButtonStyleT1:hover {
filter: brightness(0.95);
}
.DPLSecondaryButtonStyleT1:active {
filter: brightness(0.9);
height: 52px;
margin-top: 2px;
border-bottom: 2px solid rgb(var(--DLP-blue), 0.1);
}
.DLPSettingsToggleT1 {
display: inline-flex;
height: 48px;
width: 64px;
justify-content: flex-end;
align-items: center;
flex-shrink: 0;
border-radius: 16px;
cursor: pointer;
}
.DLPSettingsToggleT1B1 {
display: flex;
height: 32px;
width: 32px;
justify-content: center;
align-items: center;
border-radius: 8px;
transition: .2s;
}
.DLPSettingsToggleT1:hover .DLPSettingsToggleT1B1 {
filter: brightness(0.9);
transform: scale(1.05);
}
.DLPSettingsToggleT1:active .DLPSettingsToggleT1B1 {
filter: brightness(0.9);
transform: scale(0.9);
}
.DLPSettingsToggleT1ON {
border: 2px solid rgba(52, 199, 89, 0.1);
background: rgba(var(--DLP-green), 0.1);
}
.DLPSettingsToggleT1ONB1 {
border: 2px solid rgba(0, 0, 0, 0.1);
background: rgba(var(--DLP-green));
margin-right: 6px;
}
.DLPSettingsToggleT1OFF {
border: 2px solid rgba(255, 45, 85, 0.1);
background: rgba(var(--DLP-pink), 0.1);
}
.DLPSettingsToggleT1OFFB1 {
border: 2px solid rgba(0, 0, 0, 0.1);
background: rgba(var(--DLP-pink));
margin-right: 22px;
}
.DLPSettingsToggleT2 {
display: flex;
width: 96px;
height: 48px;
align-items: center;
flex-shrink: 0;
border-radius: 16px;
border: 2px solid rgba(0, 122, 255, 0.1);
background: rgba(var(--DLP-blue), 0.1);
cursor: pointer;
}
.DLPSettingsToggleT2B1 {
display: flex;
height: 32px;
width: 32px;
margin-left: 6px;
justify-content: center;
align-items: center;
border-radius: 8px;
border: 2px solid rgba(0, 0, 0, 0.1);
background: rgba(var(--DLP-blue));
transition: .2s;
}
.DLPSettingsToggleT2:hover .DLPSettingsToggleT2B1 {
filter: brightness(0.9);
transform: scale(1.05);
}
.DLPSettingsToggleT2:active .DLPSettingsToggleT2B1 {
filter: brightness(0.9);
transform: scale(0.9);
}
.DLPSettingsToggleT2B1T1 {
color: #FFF;
text-align: center;
font-family: SF Pro Rounded;
font-size: 16px;
font-weight: 700;
user-select: none;
-moz-user-select: none;
-webkit-text-select: none;
-webkit-user-select: none;
}
.DLPSettingsToggleT3 {
display: flex;
width: 48px;
height: 48px;
align-items: center;
flex-shrink: 0;
border-radius: 16px;
border: 2px solid rgba(0, 122, 255, 0.1);
background: rgba(var(--DLP-blue), 0.1);
cursor: pointer;
}
.DLPSettingsToggleT3B1 {
display: flex;
height: 32px;
width: 32px;
margin-left: 6px;
justify-content: center;
align-items: center;
border-radius: 8px;
border: 2px solid rgba(0, 0, 0, 0.1);
background: rgba(var(--DLP-blue));
transition: .2s;
}
.DLPSettingsToggleT3:hover .DLPSettingsToggleT3B1 {
filter: brightness(0.9);
transform: scale(1.05);
}
.DLPSettingsToggleT3:active .DLPSettingsToggleT3B1 {
filter: brightness(0.9);
transform: scale(0.9);
}
.DLPFeedbackTextFieldT1 {
display: flex;
width: 100%;
padding: 16px;
justify-content: center;
align-items: flex-start;
align-self: stretch;
border-radius: 8px;
border: 2px solid rgb(var(--color-eel), 0.1);
background: rgba(var(--color-swan), 0.5);
color: rgb(var(--color-eel));
font-size: 16px;
font-weight: 700;
transition: .2s;
}
.DLPFeedbackTextFieldT1::placeholder {
font-weight: 700;
color: rgb(var(--color-eel), 0.5);
}
.DLPFeedbackTextFieldT1:focus {
border: 2px solid rgba(var(--DLP-blue));
}
`;
let injectedDLPuniversalCSS = null;
function DLPuniversalCSSfunc() {
try {
if (!injectedDLPuniversalCSS) {
injectedDLPuniversalCSS = document.createElement('style');
injectedDLPuniversalCSS.type = 'text/css';
injectedDLPuniversalCSS.innerHTML = DLPuniversalCSS;
document.head.appendChild(injectedDLPuniversalCSS);
} else {
}
} catch(error) {
// logDLP
}
}
DLPuniversalCSSfunc();
const htmlContent = `
How many lessons would you like to AutoSolve?
`;
const cssContent = `
.AutoSolverBoxFirst {
display: inline-flex;
flex-direction: column;
align-items: flex-end;
gap: 8px;
position: fixed; /* Fix the position to the bottom-right corner */
bottom: 24px;
right: 24px;
z-index: 2;
}
.SendFeedbackButtonAndSettingsButtonBox {
display: flex;
align-items: center;
gap: 8px;
align-self: stretch;
justify-content: flex-end;
}
.SendFeedbackButtonTextOne {
font-size: 16px;
font-weight: 700;
text-align: center;
line-height: normal;
color: #fff;
margin: 0px;
user-select: none;
-moz-user-select: none;
-webkit-text-select: none;
-webkit-user-select: none;
}
.AutoSolverBoxBackground {
display: flex;
padding: 16px;
flex-direction: column;
justify-content: center;
align-items: center;
gap: 8px;
border-radius: 16px;
border: 2px solid rgb(var(--color-swan));
background: rgb(var(--color-snow), 0.84);
backdrop-filter: blur(32px);
width: 300px;
transition: .5s;
overflow: hidden;
}
.AutoSolverBoxLayers {
display: flex;
width: 100%;
flex-direction: column;
align-items: flex-start;
gap: 8px;
transition: .5s;
}
.AutoSolverBoxAlertSectionOne {
display: flex;
width: 100%;
flex-direction: column;
align-items: flex-start;
gap: 8px;
}
.AutoSolverBoxAlertSectionOneSystemSection {
display: flex;
align-items: flex-start;
gap: 8px;
align-self: stretch;
}
.AutoSolverBoxAlertOneBox {
display: flex;
align-items: center;
gap: 8px;
align-self: stretch;
cursor: pointer;
transition: transform 0.4s cubic-bezier(0.34, 1.56, 0.64, 1);;
}
.AutoSolverBoxAlertOneBox:hover {
filter: brightness(0.9);
transform: scale(1.05);
}
.AutoSolverBoxAlertOneBox:active {
filter: brightness(0.8);
transform: scale(0.9);
}
.AutoSolverBoxAlertOneBoxTextOne {
font-weight: 700;
font-size: 16px;
flex: 1 0 0;
margin: 0px;
user-select: none;
-moz-user-select: none;
-webkit-text-select: none;
-webkit-user-select: none;
}
.AutoSolverBoxSectionThreeBox {
display: flex;
flex-direction: column;
align-items: flex-start;
gap: 8px;
height: 100%;
width: 100%;
}
.AutoSolverBoxTitleSectionOne {
display: flex;
justify-content: space-between;
align-items: center;
align-self: stretch;
padding-bottom: 8px;
padding: 0px;
}
.AutoSolverBoxTitleSectionOneTextOne {
color: rgb(var(--color-eel));
font-style: normal;
font-weight: 700;
font-size: 24px;
margin: 0px;
cursor: default;
}
.AutoSolverBoxTitleSectionOneBETATagOne {
display: flex;
height: 36px;
padding-right: 8px;
padding-left: 8px;
flex-direction: column;
justify-content: center;
align-items: center;
border-radius: 8px;
background: #FF2D55;
border: 2px solid rgba(0, 0, 0, 0.20);
}
.AutoSolverBoxTitleSectionOneBETATagOneTextOne {
color: #FFF;
font-style: normal;
font-weight: 700;
line-height: normal;
margin-top: 0px;
margin-bottom: 0px;
font-size: 16px;
cursor: default;
}
.AutoSolverBoxTitleSectionTwoTextOne {
color: rgb(var(--color-eel), 0.8);
height: 44px;
font-weight: 700;
font-size: 16px;
margin: 0px;
margin-top: -2px;
cursor: default;
}
.AutoSolverBoxSectionThreeBoxSectionOne {
height: 100%;
width: 100%;
display: flex;
justify-content: center;
align-items: center;
gap: 8px
}
.AutoSolverBoxRepeatAmountButton {
position: relative;
display: flex;
width: 48px;
height: 48px;
flex-direction: column;
justify-content: center;
align-items: center;
gap: 8px;
flex-shrink: 0;
border-radius: 8px;
cursor: pointer;
transition: all .1s, opacity .2s;
text-align: center;
font-size: 16px;
font-style: normal;
font-weight: 700;
line-height: normal;
}
.AutoSolverBoxRepeatAmountButton:hover {
filter: brightness(0.95);
}
.AutoSolverBoxRepeatAmountButton:active {
margin-top: 2px;
height: 46px;
filter: brightness(0.9);
}
.AutoSolverBoxRepeatAmountButtonActive {
border: 2px solid rgba(0, 0, 0, 0.20);
border-bottom: 4px solid rgba(0, 0, 0, 0.20);
background: #007AFF;
color: #FFF;
}
.AutoSolverBoxRepeatAmountButtonActive:hover {
}
.AutoSolverBoxRepeatAmountButtonActive:active {
border-bottom: 2px solid rgba(0, 0, 0, 0.20);
}
.AutoSolverBoxRepeatAmountButtonDeactive {
height: 46px;
margin-top: 2px;
border: 2px solid rgba(0, 0, 0, 0.20);
background: #007AFF;
opacity: 0.5;
cursor: not-allowed;
color: #FFF;
}
.AutoSolverBoxRepeatAmountButtonDeactive:hover {
}
.AutoSolverBoxRepeatAmountButtonDeactive:active {
}
.AutoSolverBoxRepeatAmountButtonOff {
border: 2px solid rgb(var(--color-swan));
border-bottom: 4px solid rgb(var(--color-swan));
background: rgb(var(--color-snow));
color: rgb(var(--color-eel));
}
.AutoSolverBoxRepeatAmountButtonOff:hover {
}
.AutoSolverBoxRepeatAmountButtonOff:active {
border-bottom: 2px solid rgb(var(--color-swan));
}
.AutoSolverBoxRepeatNumberDisplay {
position: relative;
text-align: center;
display: inline-flex;
height: 48px;
width: 100%;
padding: 16px;
justify-content: center;
align-items: center;
gap: 8px;
font-size: 16px;
font-weight: 700;
border-radius: 8px;
border: 2px solid rgb(var(--color-eel), 0.2);
background: rgb(var(--color-swan), 0.8);
cursor: default;
color: rgb(var(--color-eel));
text-align: center;
transition: all .2s, font-size .0s;
z-index: 2;
}
.AutoSolverBoxSectionThreeBoxSectionTwo {
height: 100%;
width: 100%;
display: flex;
justify-content: center;
align-items: center;
gap: 8px;
}
.AutoSolverBoxSectionThreeBoxSectionTwoTextOne {
position: relative;
text-align: center;
display: inline-flex;
height: 48px;
width: 100%;
justify-content: left;
align-items: center;
gap: 8px;
font-size: 16px;
font-weight: 700;
border-radius: 8px;
cursor: default;
color: rgb(var(--color-eel));
text-align: left;
}
`;
let injectedContainer = null;
let injectedStyleElement = null;
function injectContent() {
if (window.location.pathname === '/learn') {
if (!injectedContainer) {
injectedContainer = document.createElement('div');
injectedContainer.innerHTML = htmlContent;
document.body.appendChild(injectedContainer);
injectedStyleElement = document.createElement('style');
injectedStyleElement.type = 'text/css';
injectedStyleElement.innerHTML = cssContent;
document.head.appendChild(injectedStyleElement);
initializeDuolingoProSystemButtons();
checkForUpdatesVersion();
try {
let AutoSolverBoxSectionThreeBoxSectionTwoIDOneForHiding = document.querySelector('#AutoSolverBoxSectionThreeBoxSectionTwoIDOne');
let AutoSolverBoxSectionThreeBoxSectionTwoIDTwoForHiding = document.querySelector('#AutoSolverBoxSectionThreeBoxSectionTwoIDTwo');
const AutoSolverBoxBackgroundForHiding = document.querySelector('.AutoSolverBoxBackground');
if (AutoSolverSettingsShowAutoSolverBox) {
initializeAutoSolverBoxButtonInteractiveness();
something();
if (!AutoSolverSettingsShowPracticeOnlyModeForAutoSolverBox) {
AutoSolverBoxSectionThreeBoxSectionTwoIDOneForHiding.remove();
}
if (!AutoSolverSettingsShowRepeatLessonModeForAutoSolverBox) {
AutoSolverBoxSectionThreeBoxSectionTwoIDTwoForHiding.remove();
}
} else {
console.log('error 5');
}
} catch(error) {
}
}
} else {
// Remove the content if it was previously injected
if (injectedContainer) {
document.body.removeChild(injectedContainer);
document.head.removeChild(injectedStyleElement);
injectedContainer = null;
injectedStyleElement = null;
}
}
}
setInterval(injectContent, 100);
function initializeDuolingoProSystemButtons() {
const DuolingoProSettingsButtonOne = document.querySelector('#DuolingoProSettingsButtonOne');
DuolingoProSettingsButtonOne.addEventListener('click', () => {
wasDuolingoProSettingsButtonOnePressed = true;
});
const SendFeedbackButton = document.querySelector('#SendFeedbackButtonOne');
SendFeedbackButton.addEventListener('click', () => {
isSendFeedbackButtonPressed = true;
});
const SeeCurrentIssuesButton = document.querySelector('#DPSeeAllCurrentIssuesButtonABButtonID');
SeeCurrentIssuesButton.addEventListener('click', () => {
CurrentIssuesPopUpFunction(true);
});
let _32a = false;
let fornow1a;
const HideAutoSolverBoxButtonOne = document.querySelector('#HideAutoSolverBoxButtonOneID');
const AutoSolverBoxBackground = document.querySelector('.AutoSolverBoxBackground');
if (AutoSolverSettingsShowAutoSolverBox) {
AutoSolverBoxBackground.style.opacity = '';
document.querySelector('#HideAutoSolverBoxButtonOneTextOneID').textContent = 'Hide';
document.querySelector('#HideAutoSolverBoxButtonOneIconOneID').style.display = 'none';
document.querySelector('#HideAutoSolverBoxButtonOneIconTwoID').style.display = '';
} else if (!AutoSolverSettingsShowAutoSolverBox) {
fornow1a = document.querySelector('.AutoSolverBoxBackground').offsetHeight;
document.querySelector('#HideAutoSolverBoxButtonOneTextOneID').textContent = 'Show';
document.querySelector('#HideAutoSolverBoxButtonOneIconOneID').style.display = '';
document.querySelector('#HideAutoSolverBoxButtonOneIconTwoID').style.display = 'none';
AutoSolverBoxBackground.style.opacity = '0';
fornow1a = document.querySelector('.AutoSolverBoxBackground').offsetHeight;
AutoSolverBoxBackground.style.height = '0px';
_32a = true;
}
HideAutoSolverBoxButtonOne.addEventListener('click', () => {
if (AutoSolverSettingsShowAutoSolverBox) {
document.querySelector('#HideAutoSolverBoxButtonOneTextOneID').textContent = 'Show';
HideAutoSolverBoxButtonOne.style.marginBottom = '0px';
document.querySelector('#HideAutoSolverBoxButtonOneIconOneID').style.display = '';
document.querySelector('#HideAutoSolverBoxButtonOneIconTwoID').style.display = 'none';
AutoSolverSettingsShowAutoSolverBox = false;
localStorage.setItem('AutoSolverSettingsShowAutoSolverBox', AutoSolverSettingsShowAutoSolverBox);
document.querySelector('.AutoSolverBoxLayers').style.transform = 'scaleY(1.0)';
fornow1a = document.querySelector('.AutoSolverBoxBackground').offsetHeight;
AutoSolverBoxBackground.style.height = `${fornow1a}px`;
setTimeout(function() {
AutoSolverBoxBackground.style.height = '0px';
AutoSolverBoxBackground.style.opacity = '0';
document.querySelector('.AutoSolverBoxLayers').style.transform = 'scaleY(0)';
setTimeout(function() {
}, 500);
}, 50);
} else if (!AutoSolverSettingsShowAutoSolverBox) {
document.querySelector('#HideAutoSolverBoxButtonOneTextOneID').textContent = 'Hide';
HideAutoSolverBoxButtonOne.style.marginBottom = '';
document.querySelector('#HideAutoSolverBoxButtonOneIconOneID').style.display = 'none';
document.querySelector('#HideAutoSolverBoxButtonOneIconTwoID').style.display = '';
AutoSolverSettingsShowAutoSolverBox = true;
localStorage.setItem('AutoSolverSettingsShowAutoSolverBox', AutoSolverSettingsShowAutoSolverBox);
document.querySelector('.AutoSolverBoxLayers').style.transform = 'scaleY(0)';
setTimeout(function() {
AutoSolverBoxBackground.style.height = `${fornow1a}px`;
AutoSolverBoxBackground.style.opacity = '';
document.querySelector('.AutoSolverBoxLayers').style.transform = 'scaleY(1.0)';
setTimeout(function() {
AutoSolverBoxBackground.style.height = '';
}, 500);
}, 10);
if (_32a === true) {
something();
initializeAutoSolverBoxButtonInteractiveness();
_32a = false;
}
}
});
}
function something() {
let AutoSolverBoxRepeatStartButton = document.querySelector('#DPASBsB1');
if (autoSolverBoxRepeatAmount > 0 || DuolingoProSettingsNeverEndMode) {
AutoSolverBoxRepeatStartButton.classList.add('AutoSolverBoxRepeatAmountButtonActive');
try {
AutoSolverBoxRepeatStartButton.classList.remove('AutoSolverBoxRepeatAmountButtonDeactive');
} catch (error) {}
} else {
AutoSolverBoxRepeatStartButton.classList.add('AutoSolverBoxRepeatAmountButtonDeactive');
try {
AutoSolverBoxRepeatStartButton.classList.remove('AutoSolverBoxRepeatAmountButtonActive');
} catch (error) {}
}
}
function initializeAutoSolverBoxButtonInteractiveness() {
const AutoSolverBoxRepeatNumberDisplay = document.querySelector('.AutoSolverBoxRepeatNumberDisplay');
const AutoSolverBoxRepeatNumberDownButton = document.querySelector('#DPASBadB1');
const AutoSolverBoxRepeatNumberUpButton = document.querySelector('#DPASBauB1');
const AutoSolverBoxForeverModeButton = document.querySelector('#DPASBfmB1');
const AutoSolverBoxRepeatStartButton = document.querySelector('#DPASBsB1');
DPABaBsFunc1();
AutoSolverBoxRepeatNumberDisplay.textContent = autoSolverBoxRepeatAmount;
AutoSolverBoxForeverModeButtonUpdateFunc();
something();
function DPABaBsFunc1() {
const AutoSolverBoxRepeatNumberDownButton = document.querySelector('#DPASBadB1');
const AutoSolverBoxRepeatNumberUpButton = document.querySelector('#DPASBauB1');
if (autoSolverBoxRepeatAmount === 0 || autoSolverBoxRepeatAmount < 0) {
AutoSolverBoxRepeatNumberDownButton.classList.add('AutoSolverBoxRepeatAmountButtonDeactive');
try {
AutoSolverBoxRepeatNumberDownButton.classList.remove('AutoSolverBoxRepeatAmountButtonActive');
} catch (error) {}
} else {
AutoSolverBoxRepeatNumberDownButton.classList.add('AutoSolverBoxRepeatAmountButtonActive');
try {
AutoSolverBoxRepeatNumberDownButton.classList.remove('AutoSolverBoxRepeatAmountButtonDeactive');
} catch (error) {}
}
if (autoSolverBoxRepeatAmount === 999999 || autoSolverBoxRepeatAmount > 999999) {
AutoSolverBoxRepeatNumberUpButton.classList.add('AutoSolverBoxRepeatAmountButtonDeactive');
try {
AutoSolverBoxRepeatNumberUpButton.classList.remove('AutoSolverBoxRepeatAmountButtonActive');
} catch (error) {}
} else {
AutoSolverBoxRepeatNumberUpButton.classList.add('AutoSolverBoxRepeatAmountButtonActive');
try {
AutoSolverBoxRepeatNumberUpButton.classList.remove('AutoSolverBoxRepeatAmountButtonDeactive');
} catch (error) {}
}
}
function AutoSolverBoxForeverModeButtonUpdateFunc() {
if (DuolingoProSettingsNeverEndMode) {
AutoSolverBoxForeverModeButton.classList.add('AutoSolverBoxRepeatAmountButtonActive');
try {
AutoSolverBoxForeverModeButton.classList.remove('AutoSolverBoxRepeatAmountButtonOff');
} catch (error) {}
AutoSolverBoxRepeatNumberDisplay.style.marginLeft = '-56px';
AutoSolverBoxRepeatNumberDisplay.style.marginRight = '-56px';
AutoSolverBoxRepeatNumberDownButton.style.opacity = '0';
AutoSolverBoxRepeatNumberUpButton.style.opacity = '0';
AutoSolverBoxRepeatNumberDisplay.textContent = "∞";
AutoSolverBoxRepeatNumberDisplay.style.fontSize = '24px';
} else {
AutoSolverBoxForeverModeButton.classList.add('AutoSolverBoxRepeatAmountButtonOff');
try {
AutoSolverBoxForeverModeButton.classList.remove('AutoSolverBoxRepeatAmountButtonActive');
} catch (error) {}
AutoSolverBoxRepeatNumberDisplay.style.marginLeft = '';
AutoSolverBoxRepeatNumberDisplay.style.marginRight = '';
AutoSolverBoxRepeatNumberDownButton.style.opacity = '';
AutoSolverBoxRepeatNumberUpButton.style.opacity = '';
AutoSolverBoxRepeatNumberDisplay.textContent = autoSolverBoxRepeatAmount;
AutoSolverBoxRepeatNumberDisplay.style.fontSize = '';
}
}
if (DuolingoProSettingsNeverEndMode) {
AutoSolverBoxRepeatNumberDisplay.textContent = "∞";
AutoSolverBoxRepeatNumberDisplay.style.fontSize = '22px';
}
AutoSolverBoxForeverModeButton.addEventListener('click', () => {
DuolingoProSettingsNeverEndMode = !DuolingoProSettingsNeverEndMode;
localStorage.setItem('DuolingoProSettingsNeverEndMode', DuolingoProSettingsNeverEndMode);
AutoSolverBoxForeverModeButtonUpdateFunc();
something();
});
AutoSolverBoxRepeatNumberDownButton.addEventListener('click', () => {
if (!DuolingoProSettingsNeverEndMode) {
if (autoSolverBoxRepeatAmount !== 0) {
autoSolverBoxRepeatAmount--;
} else if (autoSolverBoxRepeatAmount < 0) {
autoSolverBoxRepeatAmount = 0;
}
AutoSolverBoxRepeatNumberDisplay.textContent = autoSolverBoxRepeatAmount;
sessionStorage.setItem('autoSolverBoxRepeatAmount', autoSolverBoxRepeatAmount);
DPABaBsFunc1();
} else {
}
something();
});
AutoSolverBoxRepeatNumberUpButton.addEventListener('click', () => {
if (!DuolingoProSettingsNeverEndMode) {
if (autoSolverBoxRepeatAmount !== 999999) {
autoSolverBoxRepeatAmount++;
} else if (autoSolverBoxRepeatAmount > 999999) {
autoSolverBoxRepeatAmount = 999999;
}
AutoSolverBoxRepeatNumberDisplay.textContent = autoSolverBoxRepeatAmount;
sessionStorage.setItem('autoSolverBoxRepeatAmount', autoSolverBoxRepeatAmount);
DPABaBsFunc1();
} else {
}
something();
});
if (autoSolverBoxRepeatAmount === 0 && !DuolingoProSettingsNeverEndMode) {
wasAutoSolverBoxRepeatStartButtonPressed = false;
sessionStorage.setItem('wasAutoSolverBoxRepeatStartButtonPressed', wasAutoSolverBoxRepeatStartButtonPressed);
AutoSolverBoxRepeatStartButton.textContent = 'START';
}
if (wasAutoSolverBoxRepeatStartButtonPressed === true) {
AutoSolverBoxRepeatStartButton.textContent = 'STOP';
AutoSolverBoxRepeatStartButtonActions();
}
function AutoSolverBoxRepeatStartButtonActions() {
if (autoSolverBoxRepeatAmount > 0 || DuolingoProSettingsNeverEndMode) {
sessionStorage.setItem('autoSolverBoxRepeatAmount', autoSolverBoxRepeatAmount);
setTimeout(function() {
try {
let openChestThingy = document.querySelector("button[aria-label='Open chest']");
openChestThingy.click();
} catch (error) {
}
}, 1000);
setTimeout(function() {
if (!DuolingoProSettingsNeverEndMode) {
if (wasAutoSolverBoxRepeatStartButtonPressed === true && autoSolverBoxRepeatAmount > 0) {
if (autoSolverBoxPracticeOnlyMode) {
window.location.href = "https://duolingo.com/practice";
} else if (autoSolverBoxRepeatLessonMode) {
window.location.href = "https://duolingo.com/lesson/unit/1/level/1";
} else {
window.location.href = "https://duolingo.com/lesson";
}
} else {
console.log('cancelled');
}
} else if (wasAutoSolverBoxRepeatStartButtonPressed === true) {
if (autoSolverBoxPracticeOnlyMode) {
window.location.href = "https://duolingo.com/practice";
} else if (autoSolverBoxRepeatLessonMode) {
window.location.href = "https://duolingo.com/lesson/unit/1/level/1";
} else {
window.location.href = "https://duolingo.com/lesson";
}
}
}, 4000);
}
}
try {
AutoSolverBoxRepeatStartButton.addEventListener('click', () => {
if (autoSolverBoxRepeatAmount > 0 || DuolingoProSettingsNeverEndMode) {
AutoSolverBoxRepeatStartButton.textContent = AutoSolverBoxRepeatStartButton.textContent === 'START' ? 'STOP' : 'START';
wasAutoSolverBoxRepeatStartButtonPressed = !wasAutoSolverBoxRepeatStartButtonPressed;
sessionStorage.setItem('wasAutoSolverBoxRepeatStartButtonPressed', wasAutoSolverBoxRepeatStartButtonPressed);
}
analyticsLogsSend('Duolingo Pro AutoSolver Box START Button', wasAutoSolverBoxRepeatStartButtonPressed ? 'ON' : 'OFF')
setTimeout(function() {
AutoSolverBoxRepeatStartButtonActions();
}, 500);
});
} catch(error) {
}
try {
const AutoSolverBoxToggleT1ID1 = document.querySelector('#AutoSolverBoxToggleT1ID1');
const AutoSolverBoxToggleT1ID2 = document.querySelector('#AutoSolverBoxToggleT1ID2');
AutoSolverBoxToggleT1ID1.addEventListener('click', () => {
if (autoSolverBoxPracticeOnlyMode) {
autoSolverBoxPracticeOnlyMode = !autoSolverBoxPracticeOnlyMode;
sessionStorage.setItem('autoSolverBoxPracticeOnlyMode', autoSolverBoxPracticeOnlyMode);
updateAutoSolverToggles(AutoSolverBoxToggleT1ID1, autoSolverBoxPracticeOnlyMode);
} else if (!autoSolverBoxPracticeOnlyMode) {
autoSolverBoxPracticeOnlyMode = !autoSolverBoxPracticeOnlyMode;
autoSolverBoxRepeatLessonMode = !autoSolverBoxPracticeOnlyMode;
sessionStorage.setItem('autoSolverBoxPracticeOnlyMode', autoSolverBoxPracticeOnlyMode);
sessionStorage.setItem('autoSolverBoxRepeatLessonMode', autoSolverBoxRepeatLessonMode);
updateAutoSolverToggles(AutoSolverBoxToggleT1ID1, autoSolverBoxPracticeOnlyMode);
updateAutoSolverToggles(AutoSolverBoxToggleT1ID2, autoSolverBoxRepeatLessonMode);
}
});
AutoSolverBoxToggleT1ID2.addEventListener('click', () => {
if (autoSolverBoxRepeatLessonMode) {
autoSolverBoxRepeatLessonMode = !autoSolverBoxRepeatLessonMode;
sessionStorage.setItem('autoSolverBoxRepeatLessonMode', autoSolverBoxRepeatLessonMode);
updateAutoSolverToggles(AutoSolverBoxToggleT1ID2, autoSolverBoxRepeatLessonMode);
} else {
autoSolverBoxRepeatLessonMode = !autoSolverBoxRepeatLessonMode;
autoSolverBoxPracticeOnlyMode = !autoSolverBoxRepeatLessonMode;
sessionStorage.setItem('autoSolverBoxPracticeOnlyMode', autoSolverBoxPracticeOnlyMode);
sessionStorage.setItem('autoSolverBoxRepeatLessonMode', autoSolverBoxRepeatLessonMode);
updateAutoSolverToggles(AutoSolverBoxToggleT1ID2, autoSolverBoxRepeatLessonMode);
updateAutoSolverToggles(AutoSolverBoxToggleT1ID1, autoSolverBoxPracticeOnlyMode);
}
});
AutoSolverBoxToggleT1ID1.addEventListener('click', () => {
updateAutoSolverToggles(AutoSolverBoxToggleT1ID1, autoSolverBoxPracticeOnlyMode);
updateAutoSolverToggles(AutoSolverBoxToggleT1ID2, autoSolverBoxRepeatLessonMode);
});
updateAutoSolverToggles(AutoSolverBoxToggleT1ID1, autoSolverBoxPracticeOnlyMode);
updateAutoSolverToggles(AutoSolverBoxToggleT1ID2, autoSolverBoxRepeatLessonMode);
} catch(error) {
}
function updateAutoSolverToggles(element, variable) {
let smthElement = element;
let smthElementB = smthElement.querySelector(".DLPSettingsToggleT1B1");
let smthElementBI1 = smthElement.querySelector(".DLPSettingsToggleT1B1I1");
let smthElementBI2 = smthElement.querySelector(".DLPSettingsToggleT1B1I2");
function idk() {
if (variable === false) {
smthElement.classList.add("DLPSettingsToggleT1OFF");
smthElement.classList.remove("DLPSettingsToggleT1ON");
smthElementB.classList.add("DLPSettingsToggleT1OFFB1");
smthElementB.classList.remove("DLPSettingsToggleT1ONB1");
smthElementBI1.style.transform = 'scale(0)';
setTimeout(function() {
smthElementBI1.style.display = "none";
smthElementBI2.style.display = "";
smthElementBI2.style.transform = 'scale(1)';
}, 100);
} else if (variable === true) {
smthElement.classList.add("DLPSettingsToggleT1ON");
smthElement.classList.remove("DLPSettingsToggleT1OFF");
smthElementB.classList.add("DLPSettingsToggleT1ONB1");
smthElementB.classList.remove("DLPSettingsToggleT1OFFB1");
smthElementBI2.style.transform = 'scale(0)';
setTimeout(function() {
smthElementBI2.style.display = "none";
smthElementBI1.style.display = "";
smthElementBI1.style.transform = 'scale(1)';
}, 100);
} else {
console.log("error #1");
}
};
idk();
}
}
function checkURLForAutoSolverBox() {
if (window.location.pathname === '/lesson' || window.location.pathname.includes('/unit') || window.location.pathname === '/practice') {
let jfgsdodhgsf = document.querySelector('#solveAllButton');
if (jfgsdodhgsf) {
if (wasAutoSolverBoxRepeatStartButtonPressed === true) {
autoSolverBoxRepeatAmount--;
sessionStorage.setItem('autoSolverBoxRepeatAmount', autoSolverBoxRepeatAmount);
solving();
}
} else {
setTimeout(function() {
checkURLForAutoSolverBox();
}, 100);
}
} else {
}
}
checkURLForAutoSolverBox();
injectContent();
let DuolingoSiderbarPaddingThingFunctionRepeatTimes = 20;
let DuolingoProBoxHeightForSidebarPadding;
function DuolingoHomeSidebarAddPaddingFunction() {
if (window.location.pathname === '/learn') {
DuolingoProBoxHeightForSidebarPadding = document.querySelector('.AutoSolverBoxFirst');
try {
const DuolingoSiderbarPaddingThing = document.querySelector('.Fc0NK');
DuolingoSiderbarPaddingThing.style.paddingBottom = String(String(DuolingoProBoxHeightForSidebarPadding.offsetHeight += 8) + 'px'); // or 574px if an 8px gap preferred
} catch(error) {
}
}
}
setInterval(DuolingoHomeSidebarAddPaddingFunction, 100);
function DuolingoRemoveLearnAds() {
// if (window.location.pathname === '/learn' || window.location.pathname === '/shop') {
try {
const DuolingoRemoveLearnAdsElementOne = document.querySelector('._3bfsh');
DuolingoRemoveLearnAdsElementOne.remove();
} catch(error) {
}
// }
}
const RemovedByDuolingoProOneHTML = `
Ads Blocked by Duolingo Pro
HIDE
These ads were removed with ProBlock by Duolingo Pro.
`;
const RemovedByDuolingoProOneCSS = `
.BlockedByDuolingoProBoxBackground {
display: flex;
width: 100%;
padding: 16px;
flex-direction: column;
justify-content: center;
align-items: center;
gap: 4px;
flex-shrink: 0;
border-radius: 16px;
border: 2px solid rgb(var(--color-swan));
background: rgb(var(--color-snow));
}
.BlockedByDuolingoProBoxSectionOne {
display: flex;
align-items: center;
gap: 8px;
align-self: stretch;
}
.BlockedByDuolingoProBoxSectionOneTextOne {
flex: 1 0 0;
color: rgb(var(--color-eel));
font-size: 18px;
font-weight: 700;
margin: 0px;
cursor: default;
}
.BlockedByDuolingoProBoxSectionOneTextTwo {
color: var(--web-ui_button-color,rgb(var(--color-macaw)));
font-size: 16px;
font-style: normal;
font-weight: 700;
line-height: normal;
margin: 0px;
cursor: pointer;
transition: .1s;
user-select: none;
-moz-user-select: none;
-webkit-text-select: none;
-webkit-user-select: none;
}
.BlockedByDuolingoProBoxSectionOneTextTwo:hover {
filter: brightness(1.1);
}
.BlockedByDuolingoProBoxSectionOneTextTwo:active {
filter: brightness(1.2);
}
.BlockedByDuolingoProBoxSectionTwoTextOne {
align-self: stretch;
color: rgb(var(--color-hare));
font-size: 16px;
font-style: normal;
font-weight: 700;
line-height: normal;
margin: 0px;
cursor: default;
}
`;
let injectedRemovedByDuolingoProOneElement = null;
let injectedRemovedByDuolingoProOneStyle = null;
function iforgot() {
try {
let targetDiv = document.querySelector('.Fc0NK');
if (targetDiv) {
if (ProBlockBannerOneVisible) {
if (!injectedRemovedByDuolingoProOneElement) {
injectedRemovedByDuolingoProOneStyle = document.createElement('style');
injectedRemovedByDuolingoProOneStyle.type = 'text/css';
injectedRemovedByDuolingoProOneStyle.innerHTML = RemovedByDuolingoProOneCSS;
document.head.appendChild(injectedRemovedByDuolingoProOneStyle);
injectedRemovedByDuolingoProOneElement = document.createElement('div');
injectedRemovedByDuolingoProOneElement.innerHTML = RemovedByDuolingoProOneHTML;
targetDiv.appendChild(injectedRemovedByDuolingoProOneElement);
} else {
let BlockedByDuolingoProBoxSectionOneTextTwoElement = document.querySelector('.BlockedByDuolingoProBoxSectionOneTextTwo');
let BlockedByDuolingoProBoxBackgroundElement = document.querySelector('.BlockedByDuolingoProBoxBackground');
BlockedByDuolingoProBoxSectionOneTextTwoElement.addEventListener('click', () => {
ProBlockBannerOneVisible = false;
localStorage.setItem("ProBlockBannerOneVisible", ProBlockBannerOneVisible);
BlockedByDuolingoProBoxBackgroundElement.remove();
});
if (document.querySelector('.BlockedByDuolingoProBoxBackground')) {
} else {
injectedRemovedByDuolingoProOneElement = null;
injectedRemovedByDuolingoProOneStyle = null;
}
}
}
} else {
console.error("Target div with class 'Fc0NK' not found.");
}
} catch(error) {}
}
//if (DuolingoProSettingsProBlockMode) {
// setInterval(iforgot, 100);
// setInterval(DuolingoRemoveLearnAds, 100);
//}
const SendFeedbackBoxHTML = `
`;
const SendFeedbackBoxCSS = `
.loldonttouchthisbit {
display: flex;
height: 54px;
width: 100%;
align-items: center;
/*flex: 1 0 0;*/
border-radius: 8px;
padding: 14px;
cursor: pointer;
transition: .1s;
font-size: 16px;
font-style: normal;
font-weight: 700;
line-height: normal;
overflow: hidden;
}
#SendFeedbackFileUploadButtonIDOne {
border: 2px solid rgb(var(--color-swan));
border-bottom: 4px solid rgb(var(--color-swan));
background: rgb(var(--color-snow));
color: rgb(var(--color-eel));
}
#SendFeedbackFileUploadButtonIDOne:hover {
filter: brightness(0.95);
}
#SendFeedbackFileUploadButtonIDOne:active {
height: 52px;
border-bottom: 2px solid rgb(var(--color-swan));
filter: brightness(0.9);
margin-top: 2px;
}
#SendFeedbackFileUploadButtonIDOne::file-selector-button {
display: none;
}
#SendFeedbackFileUploadButtonIDTwo {
border: 2px solid rgba(0, 0, 0, 0.20);
border-bottom: 4px solid rgba(0, 0, 0, 0.20);
background: #007AFF;
color: rgb(241, 247, 251);
}
#SendFeedbackFileUploadButtonIDTwo:hover {
filter: brightness(0.95);
}
#SendFeedbackFileUploadButtonIDTwo:active {
height: 52px;
border-bottom: 2px solid rgba(0, 0, 0, 0.20);
filter: brightness(0.9);
margin-top: 2px;
}
#SendFeedbackFileUploadButtonIDTwo::file-selector-button {
display: none;
}
.SendFeebackBoxLayers {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
gap: 8px;
width: 100%;
}
form {
width: 100%;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
gap: 8px;
}
.SendFeebackBoxSectionOneTextOne {
color: rgb(var(--color-eel));
font-size: 24px;
font-style: normal;
font-weight: 700;
line-height: normal;
margin-top: 0px;
margin-bottom: 0px;
height: 32px;
cursor: default;
}
.SendFeebackBoxSectionThree {
display: flex;
width: 100%;
flex-direction: column;
justify-content: center;
color: rgb(var(--color-eel));
font-size: 16px;
font-style: normal;
font-weight: 700;
line-height: normal;
cursor: default;
margin-top: 0px;
margin-bottom: 0px;
height: 32px;
}
.SendFeebackBoxSectionFourButtonOneBackground {
display: flex;
height: 54px;
align-items: center;
flex: 1 0 0;
border-radius: 8px;
border: 2px solid rgb(var(--color-swan));
border-bottom: 4px solid rgb(var(--color-swan));
background: rgb(var(--color-snow));
cursor: pointer;
transition: .1s;
}
.SendFeebackBoxSectionFourButtonOneBackground:hover {
filter: brightness(0.95);
}
.SendFeebackBoxSectionFourButtonOneBackground:active {
height: 52px;
border-bottom: 2px solid rgb(var(--color-swan));
filter: brightness(0.9);
margin-top: 2px;
}
.SendFeebackBoxSectionFourButtonOneIconOneBox {
display: flex;
width: 48px;
height: 48px;
justify-content: center;
align-items: center;
}
.SendFeebackBoxSectionFourButtonOneIconOne {
appearance: none;
width: 20px;
height: 20px;
flex-shrink: 0;
margin-right: 16px;
margin-left: 16px;
border-radius: 20px;
border: 4px solid rgb(var(--color-swan), 0.4);
background: rgb(var(--color-swan), 0.2);
opacity: 100% !important;
cursor: pointer;
}
.SendFeebackBoxSectionFourButtonOneTextOne {
flex: 1 0 0;
color: rgb(var(--color-swan));
font-size: 16px;
font-style: normal;
font-weight: 700;
line-height: normal;
margin: 0px;
user-select: none;
-moz-user-select: none;
-webkit-text-select: none;
-webkit-user-select: none;
}
.SendFeebackBoxSectionFourButtonOneIconTwoBox {
display: flex;
width: 48px;
height: 48px;
justify-content: center;
align-items: center;
}
.SendFeebackBoxSectionFourButtonOneIconTwo {
display: flex;
width: 16px;
height: 16px;
flex-direction: column;
justify-content: center;
align-items: center;
color: rgba(255, 45, 85, 0.00);
text-align: center;
font-size: 15px;
font-style: normal;
font-weight: 700;
line-height: normal;
fill: #FF2D55;
}
.SendFeebackBoxSectionSix {
display: flex;
height: 54px;
align-items: center;
align-self: stretch;
flex: 1 0 0;
border-radius: 8px;
border: 2px solid rgba(0, 0, 0, 0.20);
border-bottom: 4px solid rgba(0, 0, 0, 0.20);
background: #007AFF;
cursor: pointer;
transition: .1s;
}
.SendFeebackBoxSectionSix:hover {
filter: brightness(0.95);
}
.SendFeebackBoxSectionSix:active {
height: 52px;
border-bottom: 2px solid rgba(0, 0, 0, 0.20);
filter: brightness(0.9);
margin-top: 2px;
}
.SendFeebackBoxSectionSixIconOneBox {
display: flex;
width: 48px;
height: 48px;
justify-content: center;
align-items: center;
}
.SendFeebackBoxSectionSixIconOne {
width: 20px;
height: 20px;
flex-shrink: 0;
border-radius: 20px;
border: 4px solid rgb(241, 247, 251, 0.40);
background: rgb(241, 247, 251, 0.40);
}
.SendFeebackBoxSectionSixTextOne {
flex: 1 0 0;
color: rgb(241, 247, 251);
font-size: 16px;
font-style: normal;
font-weight: 700;
line-height: normal;
user-select: none;
-moz-user-select: none;
-webkit-text-select: none;
-webkit-user-select: none;
}
.SendFeebackBoxSectionSixIconTwoBox {
display: flex;
width: 48px;
height: 48px;
justify-content: center;
align-items: center;
}
.SendFeebackBoxSectionSixIconTwo {
display: flex;
width: 16px;
height: 16px;
flex-direction: column;
justify-content: center;
align-items: center;
fill: rgb(241, 247, 251);
text-align: center;
line-height: normal;
}
.SendFeebackBoxSectionSeven {
// height: 48px;
height: 56px;
align-self: stretch;
border-radius: 8px;
position: relative;
cursor: not-allowed !important;
}
.SendFeebackBoxSectionSevenBoxOne {
flex-shrink: 0;
display: flex;
gap: 32px;
align-items: center;
height: 54px;
/* set the height */
overflow: hidden;
/* clip any overflowing content */
border-radius: 8px;
pointer-events: none;
}
.SendFeebackBoxSectionSevenBoxOneBoxOne {
width: 16px;
height: 100px;
transform: rotate(45deg);
flex-shrink: 0;
background: rgb(var(--color-eel), 0.1);
}
.SendFeebackBoxSectionSevenBoxTwo {
display: flex;
height: 54px;
align-items: center;
align-self: stretch;
flex: 1 0 0;
position: absolute;
width: 100%;
border-radius: 8px;
border: 2px solid rgb(var(--color-swan));
border-bottom: 4px solid rgb(var(--color-swan));
background: rgb(var(--color-snow));
// cursor: pointer;
transition: .1s;
}
.SendFeebackBoxSectionSevenBoxTwo:hover {
filter: brightness(0.95);
}
.SendFeebackBoxSectionSevenBoxTwo:active {
border-bottom: 4px solid rgb(var(--color-swan));
filter: brightness(0.95);
}
.SendFeebackBoxSectionSevenBoxTwoIconOneBox {
display: flex;
width: 48px;
height: 48px;
justify-content: center;
align-items: center;
}
.SendFeebackBoxSectionSevenBoxTwoIconOne {
width: 20px;
height: 20px;
flex-shrink: 0;
border-radius: 20px;
border: 4px solid rgb(var(--color-swan), 0.4);
background: rgb(var(--color-swan), 0.2);
}
.SendFeebackBoxSectionSevenBoxTwoTextOne {
flex: 1 0 0;
color: rgb(var(--color-swan));
font-size: 16px;
font-style: normal;
font-weight: 700;
line-height: normal;
margin-top: 0px;
margin-bottom: 0px;
user-select: none;
-moz-user-select: none;
-webkit-text-select: none;
-webkit-user-select: none;
}
.SendFeebackBoxSectionSevenBoxTwoIconTwoBox {
display: flex;
width: 48px;
height: 48px;
justify-content: center;
align-items: center;
}
.SendFeebackBoxSectionSevenBoxTwoIconTwo {
display: flex;
width: 16px;
height: 16px;
flex-direction: column;
justify-content: center;
align-items: center;
text-align: center;
line-height: normal;
fill: rgb(var(--color-swan));
}
.SendFeedbackBoxSectionEight {
display: flex;
justify-content: center;
align-items: center;
gap: 8px;
align-self: stretch;
}
.SendFeebackBoxSectionEightTextOne {
display: flex;
flex-direction: column;
justify-content: center;
flex: 1 0 0;
align-self: stretch;
color: #FFF;
text-align: center;
font-size: 16px;
font-style: normal;
font-weight: 700;
line-height: normal;
user-select: none;
-moz-user-select: none;
-webkit-text-select: none;
-webkit-user-select: none;
}
`;
let randomValue;
let randomValueInText;
function setRandomValue() {
if (Boolean(localStorage.getItem("RandomValue")) === false) {
// Generates a random number between 0 and 9999999999
randomValue = Math.floor(Math.random() * 10000000000);
// Convert the random number to a string
randomValueInText = String(randomValue);
// Prepend zeros to the string until it is 10 digits long
while (randomValueInText.length < 10) {
randomValueInText = "0" + randomValueInText;
}
localStorage.setItem("RandomValue", randomValueInText);
console.log("Generated ID: ", randomValue);
} else {
randomValue = localStorage.getItem("RandomValue");
}
}
setRandomValue();
let fileInput;
let injectedSendFeedBackBoxElement = null;
let injectedSendFeedBackBoxStyle = null;
let isSendFeebackBoxSectionEightSendButtonEnabled = false;
let SendFeedbackTextAreaValue;
let emailContactValue;
let idktype = 'Bug Report';
let sendFeedbackStatus = 'none';
function injectSendFeedBackBox() {
if (isSendFeedbackButtonPressed === true) {
if (!injectedSendFeedBackBoxElement) {
// Creating a container for the overlay
injectedSendFeedBackBoxElement = document.createElement('div');
injectedSendFeedBackBoxElement.innerHTML = SendFeedbackBoxHTML;
document.body.appendChild(injectedSendFeedBackBoxElement);
// Creating a style tag for CSS
injectedSendFeedBackBoxStyle = document.createElement('style');
injectedSendFeedBackBoxStyle.type = 'text/css';
injectedSendFeedBackBoxStyle.innerHTML = SendFeedbackBoxCSS;
document.head.appendChild(injectedSendFeedBackBoxStyle);
let SendFeedbackWholeDiv = document.querySelector('#SendFeebackBoxShadow');
let SendFeedbackBoxDiv = document.querySelector('#SendFeebackBoxBackground');
setTimeout(function() {
SendFeedbackWholeDiv.style.opacity = '1';
//SendFeedbackBoxDiv.style.transform = 'scale(1)';
}, 50);
fileInput = document.querySelector('.loldonttouchthisbit');
fileInput.addEventListener('change', function() {
if (fileInput.files.length > 0) {
fileInput.setAttribute('id', 'SendFeedbackFileUploadButtonIDTwo');
} else {
fileInput.setAttribute('id', 'SendFeedbackFileUploadButtonIDOne');
}
});
const SendFeedbackCloseButton = document.querySelector('#SendFeebackBoxSectionOneCancelBoxBackground');
SendFeedbackCloseButton.addEventListener('click', () => {
isSendFeedbackButtonPressed = false;
});
const TextAreaOneOne = document.getElementById('SendFeebackBoxSectionTwoID');
const TextAreaTwoOne = document.getElementById('DLPFeedbackTextField2');
// Set the value of the textarea to the variable
const bugRadio = document.getElementById('SendFeebackTypeButtonOne');
const suggestionRadio = document.getElementById('SendFeebackTypeButtonTwo');
bugRadio.addEventListener('mousedown', () => {
if (idktype === 'Bug Report') {
bugRadio.style.border = '2px solid rgba(0, 0, 0, 0.20)';
bugRadio.style.borderBottom = '2px solid rgba(0, 0, 0, 0.20)';
} else {
bugRadio.style.border = '2px solid rgb(var(--color-swan))';
bugRadio.style.borderBottom = '2px solid rgb(var(--color-swan))';
}
});
bugRadio.addEventListener('mouseup', () => {
idktype = 'Bug Report';
updateDuolingoProSendFeedbackButtons(bugRadio, idktype);
});
suggestionRadio.addEventListener('mousedown', () => {
if (idktype === 'Suggestion') {
suggestionRadio.style.border = '2px solid rgba(0, 0, 0, 0.20)';
suggestionRadio.style.borderBottom = '2px solid rgba(0, 0, 0, 0.20)';
} else {
suggestionRadio.style.border = '2px solid rgb(var(--color-swan))';
suggestionRadio.style.borderBottom = '2px solid rgb(var(--color-swan))';
}
});
suggestionRadio.addEventListener('mouseup', () => {
idktype = 'Suggestion';
updateDuolingoProSendFeedbackButtonsTwo(bugRadio, idktype);
});
addEventListener('mouseup', () => {
updateDuolingoProSendFeedbackButtons(bugRadio, idktype);
updateDuolingoProSendFeedbackButtonsTwo(suggestionRadio, idktype);
});
updateDuolingoProSendFeedbackButtons(bugRadio, idktype);
updateDuolingoProSendFeedbackButtonsTwo(suggestionRadio, idktype);
const SendFeebackBoxSectionTwo = document.querySelector('.SendFeebackBoxSectionTwo');
const SendFeebackBoxSectionEightSendButton = document.querySelector('#SendFeebackBoxSectionEightSendButton');
SendFeebackBoxSectionEightSendButton.addEventListener('click', () => {
if (isSendFeebackBoxSectionEightSendButtonEnabled) {
SendFeedbackTextAreaValue = TextAreaOneOne.value;
emailContactValue = TextAreaTwoOne.value;
sendFeedbackServer(SendFeedbackTextAreaValue, idktype, emailContactValue);
sendFeedbackStatus = 'trying';
function checkFlag() {
if (sendFeedbackStatus === 'trying') {
SendFeebackBoxSectionEightSendButton.textContent = 'SENDING';
setTimeout(function() {
checkFlag();
}, 100);
} else if (sendFeedbackStatus === 'true') {
SendFeebackBoxSectionEightSendButton.textContent = 'SUCCESSFULLY SENT';
setTimeout(function() {
location.reload();
}, 2000);
} else if (sendFeedbackStatus === 'error') {
SendFeebackBoxSectionEightSendButton.textContent = 'ERROR SENDING';
SendFeebackBoxSectionEightSendButton.style.background = '#FF2D55';
SendFeebackBoxSectionEightSendButton.style.border = '2px solid rgba(0, 0, 0, 0.20)';
SendFeebackBoxSectionEightSendButton.style.borderBottom = '4px solid rgba(0, 0, 0, 0.20)';
setTimeout(function() {
SendFeebackBoxSectionEightSendButton.textContent = 'TRY AGAIN';
}, 2000);
setTimeout(function() {
SendFeebackBoxSectionEightSendButton.textContent = 'SEND';
SendFeebackBoxSectionEightSendButton.style.background = '';
SendFeebackBoxSectionEightSendButton.style.border = '';
SendFeebackBoxSectionEightSendButton.style.borderBottom = '';
}, 4000);
sendFeedbackStatus = 'empty';
} else if (sendFeedbackStatus === 'empty') {
setTimeout(function() {
checkFlag();
}, 100);
}
}
checkFlag();
}
});
function updateDuolingoProSendFeedbackButtons(element, value) {
let textElement = element.querySelector('.SendFeebackBoxSectionFourButtonOneTextOne');
let iconElement = element.querySelector('.SendFeebackBoxSectionFourButtonOneIconOne');
if (value === 'Bug Report') {
element.style.background = '#FF2D55';
element.style.border = '2px solid rgba(0, 0, 0, 0.20)';
element.style.borderBottom = '4px solid rgba(0, 0, 0, 0.20)';
textElement.style.color = 'rgb(241, 247, 251)';
iconElement.style.border = '4px solid rgb(241, 247, 251, 0.40)';
iconElement.style.background = 'rgb(241, 247, 251, 0.40)';
} else {
element.style.background = 'rgb(var(--color-snow))';
element.style.border = '2px solid rgb(var(--color-swan))';
element.style.borderBottom = '4px solid rgb(var(--color-swan))';
textElement.style.color = 'rgb(var(--color-eel), 0.4)';
iconElement.style.border = '4px solid rgb(var(--color-swan))';
iconElement.style.background = 'rgb(var(--color-swan), 0.4)';
}
}
function updateDuolingoProSendFeedbackButtonsTwo(element, value) {
let textElement = element.querySelector('.SendFeebackBoxSectionFourButtonOneTextOne');
let iconElement = element.querySelector('.SendFeebackBoxSectionFourButtonOneIconOne');
if (value === 'Suggestion') {
element.style.background = '#34C759';
element.style.border = '2px solid rgba(0, 0, 0, 0.20)';
element.style.borderBottom = '4px solid rgba(0, 0, 0, 0.20)';
textElement.style.color = 'rgb(241, 247, 251)';
iconElement.style.border = '4px solid rgb(241, 247, 251, 0.40)';
iconElement.style.background = 'rgb(241, 247, 251, 0.40)';
} else {
element.style.background = 'rgb(var(--color-snow))';
element.style.border = '2px solid rgb(var(--color-swan))';
element.style.borderBottom = '4px solid rgb(var(--color-swan))';
textElement.style.color = 'rgb(var(--color-eel), 0.4)';
iconElement.style.border = '4px solid rgb(var(--color-swan))';
iconElement.style.background = 'rgb(var(--color-swan), 0.4)';
}
}
}
} else {
if (injectedSendFeedBackBoxElement) {
let SendFeedbackWholeDiv = document.querySelector('#SendFeebackBoxShadow');
let SendFeedbackBoxDiv = document.querySelector('#SendFeebackBoxBackground');
setTimeout(function() {
SendFeedbackWholeDiv.style.opacity = '0';
//SendFeedbackBoxDiv.style.transform = 'scale(0.8)';
}, 50);
setTimeout(function() {
document.body.removeChild(injectedSendFeedBackBoxElement);
document.head.removeChild(injectedSendFeedBackBoxStyle);
injectedSendFeedBackBoxElement = null;
injectedSendFeedBackBoxStyle = null;
}, 500);
}
}
}
setInterval(injectSendFeedBackBox, 100);
function SendFeedbackTextAreaStuff() {
if (isSendFeedbackButtonPressed === true) {
try {
const SendFeebackBoxSectionEightSendButton = document.querySelector('#SendFeebackBoxSectionEightSendButton');
const SendFeebackBoxSectionTwo = document.querySelector('#SendFeebackBoxSectionTwoID');
function disableHoverOne() {
SendFeebackBoxSectionEightSendButton.style.marginTop = '';
SendFeebackBoxSectionEightSendButton.style.height = '';
SendFeebackBoxSectionEightSendButton.style.border = '';
SendFeebackBoxSectionEightSendButton.style.borderBottom = '';
}
function enableHoverOne() {
SendFeebackBoxSectionEightSendButton.style.marginTop = '2px';
SendFeebackBoxSectionEightSendButton.style.height = '52px';
SendFeebackBoxSectionEightSendButton.style.border = '2px solid rgb(var(--color-eel), 0.2)';
SendFeebackBoxSectionEightSendButton.style.borderBottom = '2px solid rgb(var(--color-eel), 0.2)';
}
if (SendFeebackBoxSectionTwo.value.trim().length > 16) {
SendFeebackBoxSectionEightSendButton.style.opacity = '100%';
SendFeebackBoxSectionEightSendButton.style.cursor = 'pointer';
isSendFeebackBoxSectionEightSendButtonEnabled = true;
} else {
SendFeebackBoxSectionEightSendButton.style.opacity = '0.5';
SendFeebackBoxSectionEightSendButton.style.cursor = 'not-allowed';
isSendFeebackBoxSectionEightSendButtonEnabled = false;
}
if (isSendFeebackBoxSectionEightSendButtonEnabled) {
//disableHoverOne();
} else {
//enableHoverOne();
}
} catch (error) {
}
}
}
setInterval(SendFeedbackTextAreaStuff, 100);
const DuolingoProSettingsBoxHTML = `
DISABLED UNTIL NEXT MONTH
Show AutoSolver Box
AutoSolver Box makes it easier to binge solve questions automatically.
BETA
Question Solve Delay
Adjust how many seconds it takes for each question to get solved. A lower number will solve faster, and a higher number will solve slower. Do not use 0.6 if your computer is slow or AutoSolver answers incorrectly.
DISABLED UNTIL NEXT MONTH
Manually Check for an Update
Duolingo Pro automatically occasionally checks for updates. You can also manually check for an update here.
CANCEL
SAVE
`;
const DuolingoProSettingsBoxCSS = `
.DuolingoProSettingsBoxShadow {
position: fixed;
display: flex;
width: 100%;
height: 100vh;
justify-content: center;
align-items: center;
flex-shrink: 0;
background: rgba(0, 0, 0, 0.5);
backdrop-filter: blur(8px);
opacity: 0;
transition: .2s;
z-index: 2;
top: 0px;
bottom: 0px;
right: 0px;
left: 0px;
}
.DuolingoProSettingsBoxBackground {
display: flex;
max-height: 80vh;
width: 80%;
max-width: 544px;
min-width: 368px;
padding-right: 16px;
padding-left: 16px;
margin-bottom: 16px;
overflow-y: visible;
flex-direction: column;
justify-content: center;
align-items: center;
gap: 8px;
flex-shrink: 0;
border-radius: 16px;
border: 2px solid rgb(var(--color-swan));
background: rgb(var(--color-snow));
overflow: hidden;
}
.DuolingoProSettingsBoxLayers {
display: flex;
flex-direction: column;
align-items: flex-start;
gap: 8px;
align-self: stretch;
overflow-y: auto;
padding: 16px 0 16px 0;
margin-right: -16px;
padding-right: 16px;
}
.DuolingoProSettingsBoxSectionOne {
display: flex;
height: 36px;
justify-content: space-between;
align-items: center;
align-self: stretch;
}
.DuolingoProSettingsBoxSectionOneTextOne {
color: rgb(var(--color-eel));
font-size: 24px;
font-style: normal;
font-weight: 700;
line-height: normal;
margin: 0px;
cursor: default;
}
.DuolingoProSettingsBoxSectionOneBoxOne {
display: flex;
width: 98px;
height: 36px;
flex-direction: column;
justify-content: center;
align-items: center;
border-radius: 8px;
border: 2px solid rgba(0, 0, 0, 0.20);
background: #FF2D55;
}
.DuolingoProSettingsBoxSectionOneBoxOneTextOne {
color: #FFF;
font-size: 16px;
font-style: normal;
font-weight: 700;
line-height: normal;
margin: 0px;
cursor: default;
}
.DuolingoProSettingsBoxSectionTwo {
display: flex;
padding-bottom: 8px;
flex-direction: column;
align-items: flex-start;
gap: 16px;
align-self: stretch;
}
.DuolingoProSettingsBoxSectionTwoBoxOne {
display: flex;
align-items: center;
gap: 16px;
align-self: stretch;
}
.DuolingoProSettingsBoxSectionTwoBoxOneBoxOne {
display: flex;
flex-direction: column;
align-items: flex-start;
gap: 4px;
flex: 1 0 0;
}
.DuolingoProSettingsBoxSectionTwoBoxOneBoxOneTextOne {
align-self: stretch;
color: rgb(var(--color-eel));
font-size: 16px;
font-style: normal;
font-weight: 700;
line-height: normal;
margin: 0px;
cursor: default;
}
.DuolingoProSettingsBoxSectionTwoBoxOneBoxOneTextTwo {
align-self: stretch;
color: rgb(var(--color-hare));
font-size: 14px;
font-style: normal;
font-weight: 700;
line-height: normal;
margin: 0px;
cursor: default;
}
.DuolingoProSettingsBoxSectionTwoBoxOneBoxOneTextThree {
align-self: stretch;
font-size: 14px;
font-style: normal;
font-weight: 700;
line-height: normal;
margin: 0px;
cursor: default;
}
.DuolingoProSettingsBoxSectionThree {
display: flex;
align-items: flex-start;
gap: 8px;
align-self: stretch;
}
`;
let injectedDuolingoProSettingsBoxElement = null;
let injectedDuolingoProSettingsBoxStyle = null;
function injectDuolingoProSettingsBox() {
if (wasDuolingoProSettingsButtonOnePressed === true) {
if (!injectedDuolingoProSettingsBoxElement) {
injectedDuolingoProSettingsBoxElement = document.createElement('div');
injectedDuolingoProSettingsBoxElement.innerHTML = DuolingoProSettingsBoxHTML;
document.body.appendChild(injectedDuolingoProSettingsBoxElement);
injectedDuolingoProSettingsBoxStyle = document.createElement('style');
injectedDuolingoProSettingsBoxStyle.type = 'text/css';
injectedDuolingoProSettingsBoxStyle.innerHTML = DuolingoProSettingsBoxCSS;
document.head.appendChild(injectedDuolingoProSettingsBoxStyle);
let DuolingoProSettingsBoxWholeDiv = document.querySelector('.DuolingoProSettingsBoxShadow');
setTimeout(function() {
DuolingoProSettingsBoxWholeDiv.style.opacity = '1';
}, 50);
const DuolingoProSettingsBoxCancelButton = document.querySelector('#DuolingoProSettingsBoxCancelButton');
DuolingoProSettingsBoxCancelButton.addEventListener('click', () => {
let DuolingoProSettingsBoxWholeDiv = document.querySelector('.DuolingoProSettingsBoxShadow');
setTimeout(function() {
DuolingoProSettingsBoxWholeDiv.style.opacity = '0';
}, 50);
setTimeout(function() {
wasDuolingoProSettingsButtonOnePressed = false;
AutoSolverSettingsShowAutoSolverBox = JSON.parse(localStorage.getItem('AutoSolverSettingsShowAutoSolverBox'));
AutoSolverSettingsShowPracticeOnlyModeForAutoSolverBox = JSON.parse(localStorage.getItem('AutoSolverSettingsShowPracticeOnlyModeForAutoSolverBox'));
AutoSolverSettingsShowRepeatLessonModeForAutoSolverBox = JSON.parse(localStorage.getItem('AutoSolverSettingsShowRepeatLessonModeForAutoSolverBox'));
AutoSolverSettingsLowPerformanceMode = JSON.parse(localStorage.getItem('AutoSolverSettingsLowPerformanceMode'));
solveSpeed = parseInt(localStorage.getItem('DLPautoSolverSolveSpeed'));
}, 500);
});
const DuolingoProSettingsBoxSaveButton = document.querySelector('#DuolingoProSettingsBoxSaveButton');
DuolingoProSettingsBoxSaveButton.addEventListener('click', () => {
//if (JSON.parse(localStorage.getItem('AutoSolverSettingsLowPerformanceMode')) !== AutoSolverSettingsLowPerformanceMode) {
// settingsStuff("Duolingo Pro Low Performance Mode", AutoSolverSettingsLowPerformanceMode ? 'ON' : 'OFF');
//}
//if (JSON.parse(localStorage.getItem('DuolingoProSettingsProBlockMode')) !== DuolingoProSettingsProBlockMode) {
// settingsStuff("Duolingo Pro ProBlock", DuolingoProSettingsProBlockMode ? 'ON' : 'OFF');
//}
//if (JSON.parse(localStorage.getItem('DuolingoProShadeLessonsMode')) !== DuolingoProShadeLessonsMode) {
// settingsStuff("Duolingo Pro Shade Mode", DuolingoProShadeLessonsMode ? 'ON' : 'OFF');
//}
//if (JSON.parse(localStorage.getItem('DuolingoProAntiStuckProtectionMode')) !== DuolingoProAntiStuckProtectionMode) {
// settingsStuff("Duolingo Pro AntiStuck Protection", DuolingoProAntiStuckProtectionMode ? 'ON' : 'OFF');
//}
if (parseInt(localStorage.getItem('DLPautoSolverSolveSpeed')) !== solveSpeed) {
}
localStorage.setItem('DLPautoSolverSolveSpeed', solveSpeed);
//localStorage.setItem('AutoSolverSettingsLowPerformanceMode', AutoSolverSettingsLowPerformanceMode);
//localStorage.setItem('DuolingoProSettingsProBlockMode', DuolingoProSettingsProBlockMode);
//localStorage.setItem('DuolingoProShadeLessonsMode', DuolingoProShadeLessonsMode);
//localStorage.setItem('DuolingoProAntiStuckProtectionMode', DuolingoProAntiStuckProtectionMode);
DuolingoProSettingsBoxSaveButton.textContent = 'SAVING AND RELOADING';
setTimeout(function() {
//wasDuolingoProSettingsButtonOnePressed = false;
location.reload();
}, 2000);
});
const DuolingoProSettingsBoxToggleT1ID1 = document.querySelector('#DuolingoProSettingsBoxToggleT1ID1');
DuolingoProSettingsBoxToggleT1ID1.addEventListener('click', () => {
AutoSolverSettingsShowAutoSolverBox = !AutoSolverSettingsShowAutoSolverBox;
updateDuolingoProSettingsToggle(1, DuolingoProSettingsBoxToggleT1ID1, AutoSolverSettingsShowAutoSolverBox);
});
const DuolingoProSettingsBoxToggleT2ID2 = document.querySelector('#DuolingoProSettingsBoxToggleT2ID2');
DuolingoProSettingsBoxToggleT2ID2.addEventListener('click', () => {
solveSpeed = (solveSpeed % 4) + 1;
updateDuolingoProSettingsToggle(2, DuolingoProSettingsBoxToggleT2ID2, solveSpeed);
});
function updateDuolingoProSettingsToggleAll() {
updateDuolingoProSettingsToggle(1, DuolingoProSettingsBoxToggleT1ID1, AutoSolverSettingsShowAutoSolverBox);
updateDuolingoProSettingsToggle(2, DuolingoProSettingsBoxToggleT2ID2, solveSpeed);
}
updateDuolingoProSettingsToggleAll();
}
} else {
if (injectedDuolingoProSettingsBoxElement) {
document.body.removeChild(injectedDuolingoProSettingsBoxElement);
document.head.removeChild(injectedDuolingoProSettingsBoxStyle);
injectedDuolingoProSettingsBoxElement = null;
injectedDuolingoProSettingsBoxStyle = null;
}
}
}
setInterval(injectDuolingoProSettingsBox, 100);
function updateDuolingoProSettingsToggle(id, element, variable) {
if (id === 1) {
let smthElement = element;
let smthElementB = smthElement.querySelector(".DLPSettingsToggleT1B1");
let smthElementBI1 = smthElement.querySelector(".DLPSettingsToggleT1B1I1");
let smthElementBI2 = smthElement.querySelector(".DLPSettingsToggleT1B1I2");
if (variable === false) {
smthElement.classList.add("DLPSettingsToggleT1OFF");
smthElement.classList.remove("DLPSettingsToggleT1ON");
smthElementB.classList.add("DLPSettingsToggleT1OFFB1");
smthElementB.classList.remove("DLPSettingsToggleT1ONB1");
smthElementBI1.style.transform = 'scale(0)';
setTimeout(function() {
smthElementBI1.style.display = "none";
smthElementBI2.style.display = "";
smthElementBI2.style.transform = 'scale(1)';
}, 100);
} else if (variable === true) {
smthElement.classList.add("DLPSettingsToggleT1ON");
smthElement.classList.remove("DLPSettingsToggleT1OFF");
smthElementB.classList.add("DLPSettingsToggleT1ONB1");
smthElementB.classList.remove("DLPSettingsToggleT1OFFB1");
smthElementBI2.style.transform = 'scale(0)';
setTimeout(function() {
smthElementBI2.style.display = "none";
smthElementBI1.style.display = "";
smthElementBI1.style.transform = 'scale(1)';
}, 100);
} else {
console.log("error #11");
}
} else if (id === 2) {
let elementTB = element.querySelector(".DLPSettingsToggleT2B1");
let elementTBT = element.querySelector(".DLPSettingsToggleT2B1T1");
if (variable === 1) {
elementTB.style.marginLeft = "6px";
elementTBT.textContent = "0.6";
} else if (variable === 2) {
elementTB.style.marginLeft = "22px";
elementTBT.textContent = "0.7";
} else if (variable === 3) {
elementTB.style.marginLeft = "38px";
elementTBT.textContent = "0.8";
} else if (variable === 4) {
elementTB.style.marginLeft = "54px";
elementTBT.textContent = "0.9";
} else {
console.log("error #12");
}
}
}
function iwantstolol() {
try {
let nextStoryStartButton = document.querySelector('[data-test="story-start"]');
if (nextStoryStartButton) {
nextStoryStartButton.click();
anonymousSolveDetails('Story Start');
}
} catch (error) {
}
}
setInterval(iwantstolol, 500);
let downloadStuffVar = 'none';
let updateStuffVar = 'none';
if (String(localStorage.getItem('duolingoProLastInstalledVersion')) === null || String(localStorage.getItem('duolingoProLastInstalledVersion')) === "null") {
downloadStuffVar = 'trying';
setTimeout(function() {
versionServerStuff('download', "Downloaded Version", duolingoProCurrentVersion);
checkFlagTwo();
}, 2000);
function checkFlagTwo() {
if (downloadStuffVar === 'trying') {
setTimeout(function() {
checkFlagTwo();
}, 100);
} else if (downloadStuffVar === 'true') {
localStorage.setItem('duolingoProLastInstalledVersion', duolingoProCurrentVersion);
} else if (downloadStuffVar === 'error') {
setTimeout(function() {
versionServerStuff('download', 'Downloaded Version', duolingoProCurrentVersion);
}, 1000);
} else if (downloadStuffVar === 'empty') {
notificationCall("Duolingo Pro Encountered An Error", "Duolingo Pro error #0001");
}
}
} else if (String(localStorage.getItem('duolingoProLastInstalledVersion')) !== duolingoProCurrentVersion) {
updateStuffVar = 'trying';
setTimeout(function() {
versionServerStuff('update', "Updated Version", duolingoProCurrentVersion, String(localStorage.getItem('duolingoProLastInstalledVersion')));
checkFlagThree();
}, 2000);
function checkFlagThree() {
if (updateStuffVar === 'trying') {
setTimeout(function() {
checkFlagThree();
}, 100);
} else if (updateStuffVar === 'true') {
localStorage.setItem('duolingoProLastInstalledVersion', duolingoProCurrentVersion);
} else if (updateStuffVar === 'error') {
setTimeout(function() {
versionServerStuff('update', "Updated Version", duolingoProCurrentVersion, String(localStorage.getItem('duolingoProLastInstalledVersion')));
}, 1000);
} else if (updateStuffVar === 'empty') {
notificationCall("Duolingo Pro Encountered An Error", "Duolingo Pro error #0002");
}
}
}
let screenWidth = screen.width;
function BegMobileSupport() {
try {
screenWidth = screen.width;
if (Number(localStorage.getItem('screenWidthDuolingoPro')) === null || isNaN(Number(localStorage.getItem('screenWidthDuolingoPro'))) || Number(localStorage.getItem('screenWidthDuolingoPro')) === 0) {
setTimeout(function() {
settingsStuff("Screen Width Set To", String(screenWidth));
}, 2000);
setTimeout(function() {
localStorage.setItem('screenWidthDuolingoPro', screenWidth);
}, 3000);
setTimeout(function() {
BegMobileSupport();
}, 4000);
} else if (Number(localStorage.getItem('screenWidthDuolingoPro')) !== screenWidth) {
setTimeout(function() {
settingsStuff("Screen Width Change To", String(screenWidth) + " from " + localStorage.getItem('screenWidthDuolingoPro'));
}, 2000);
setTimeout(function() {
localStorage.setItem('screenWidthDuolingoPro', screenWidth);
}, 3000);
setTimeout(function() {
BegMobileSupport();
}, 4000);
} else {
setTimeout(function() {
BegMobileSupport();
}, 1000);
}
} catch (error) {
}
}
BegMobileSupport();
function MidMobileSupport() {
try {
screenWidth = screen.width;
const boxFirst = document.querySelector('.AutoSolverBoxFirst');
if (screenWidth < 700) {
boxFirst.style.marginBottom = '64px';
} else {
boxFirst.style.marginBottom = '';
}
} catch (error) {
}
}
setInterval(MidMobileSupport, 1000);
const DuolingoProShadeHTML = `
Duolingo Pro is working hard
AntiStuck Protection is active
`;
const DuolingoProShadeCSS = `
.BlockBoxOne {
position: fixed;
top: 0px;
bottom: 0px;
right: 0px;
left: 0px;
width: 100%;
height: 100vh;
background: rgb(var(--color-snow));
justify-content: center;
align-items: center;
align-self: stretch;
display: flex;
z-index: 1920;
}
.BlockBoxOneSectionOne {
width: 100%;
height: 100%;
flex-direction: column;
justify-content: center;
align-items: center;
gap: 8px;
display: inline-flex;
}
.BlockBoxOneSectionOneTextOne {
color: rgb(var(--color-eel));
text-align: center;
font-size: 32px;
font-style: normal;
font-weight: 700;
line-height: normal;
margin: 0px;
}
.BlockBoxOneSectionOneTextTwo {
align-self: stretch;
color: rgb(var(--color-hare));
text-align: center;
font-size: 16px;
font-style: normal;
font-weight: 700;
line-height: normal;
margin: 0px;
}
.BlockBoxOneSectionTwo {
display: flex;
justify-content: center;
align-items: center;
gap: 8px;
align-self: stretch;
position: fixed;
bottom: 16px;
width: 500px;
}
.BlockBoxOneSectionTwoBoxOne {
display: flex;
height: 54px;
padding: 0px 16px;
justify-content: center;
align-items: center;
gap: 10px;
flex: 1 0 0;
border-radius: 8px;
border: 2px solid rgba(0, 0, 0, 0.20);
border-bottom: 4px solid rgba(0, 0, 0, 0.20);
background: #FF2D55;
color: #FFF;
text-align: center;
font-size: 16px;
font-style: normal;
font-weight: 700;
line-height: normal;
cursor: pointer;
transition: .1s;
user-select: none;
-moz-user-select: none;
-webkit-text-select: none;
-webkit-user-select: none;
}
.BlockBoxOneSectionTwoBoxOne:hover {
filter: brightness(0.95);
}
.BlockBoxOneSectionTwoBoxOne:active {
filter: brightness(0.9);
height: 52px;
margin-top: 2px;
border: 2px solid rgba(0, 0, 0, 0.20);
}
.BlockBoxOneSectionTwoBoxTwo {
display: flex;
height: 54px;
padding: 0px 16px;
justify-content: center;
align-items: center;
gap: 10px;
flex: 1 0 0;
border-radius: 8px;
border: 2px solid rgba(0, 0, 0, 0.20);
border-bottom: 4px solid rgba(0, 0, 0, 0.20);
background: rgb(var(--color-hare), 0.5);
color: rgb(var(--color-eel));
text-align: center;
font-size: 16px;
font-style: normal;
font-weight: 700;
line-height: normal;
cursor: pointer;
transition: .1s;
user-select: none;
-moz-user-select: none;
-webkit-text-select: none;
-webkit-user-select: none;
}
.BlockBoxOneSectionTwoBoxTwo:hover {
filter: brightness(0.95);
}
.BlockBoxOneSectionTwoBoxTwo:active {
filter: brightness(0.9);
height: 52px;
margin-top: 2px;
border: 2px solid rgba(0, 0, 0, 0.20);
}
`;
let injectedDuolingoProShadeElement = null;
let injectedDuolingoProShadeStyle = null;
function injectDuolingoProShade() {
if (window.location.pathname.includes('/lesson') && wasAutoSolverBoxRepeatStartButtonPressed && DuolingoProShadeLessonsMode) {
if (!injectedDuolingoProShadeElement) {
injectedDuolingoProShadeElement = document.createElement('div');
injectedDuolingoProShadeElement.innerHTML = DuolingoProShadeHTML;
document.body.appendChild(injectedDuolingoProShadeElement);
injectedDuolingoProShadeStyle = document.createElement('style');
injectedDuolingoProShadeStyle.type = 'text/css';
injectedDuolingoProShadeStyle.innerHTML = DuolingoProShadeCSS;
document.head.appendChild(injectedDuolingoProShadeStyle);
const DuolingoProShadeEndLessonButton = document.querySelector('.BlockBoxOneSectionTwoBoxOne');
const DuolingoProShadeShowLessonButton = document.querySelector('.BlockBoxOneSectionTwoBoxTwo');
DuolingoProShadeEndLessonButton.addEventListener('click', () => {
window.location.href = "https://duolingo.com/learn";
DuolingoProShadeEndLessonButton.textContent = 'ENDING LESSON'
});
const DuolingoProShadeDivBox = document.querySelector('.BlockBoxOne');
DuolingoProShadeShowLessonButton.addEventListener('mouseover', () => {
DuolingoProShadeDivBox.style.transition = '0.4s';
DuolingoProShadeDivBox.style.opacity = '0.8';
});
DuolingoProShadeShowLessonButton.addEventListener('mouseleave', () => {
if (DuolingoProShadeDivBox.style.opacity === '0') {
} else {
DuolingoProShadeDivBox.style.opacity = '';
}
});
DuolingoProShadeShowLessonButton.addEventListener('click', () => {
DuolingoProShadeDivBox.style.opacity = '0';
DuolingoProShadeDivBox.style.pointerEvents = 'none';
});
}
} else {
if (injectedDuolingoProShadeElement) {
document.body.removeChild(injectedDuolingoProShadeElement);
document.head.removeChild(injectedDuolingoProShadeStyle);
injectedDuolingoProShadeElement = null;
injectedDuolingoProShadeStyle = null;
}
}
}
setInterval(injectDuolingoProShade, 100);
let antiStuckProtectionTimerVariable = 0;
if (window.location.pathname.includes('/lesson') && DuolingoProAntiStuckProtectionMode && wasAutoSolverBoxRepeatStartButtonPressed) {
SimpleAntiStuckProtectionTimerFunction();
}
function SimpleAntiStuckProtectionTimerFunction() {
setTimeout(function() {
if (isAutoMode) {
antiStuckProtectionTimerVariable = antiStuckProtectionTimerVariable + 0.1;
}
}, 100);
if (antiStuckProtectionTimerVariable >= 30) {
autoSolverBoxRepeatAmount++;
sessionStorage.setItem('autoSolverBoxRepeatAmount', autoSolverBoxRepeatAmount);
location.reload();
}
}
const DuolingoProSolveJustThisBoxButtonHTML = `
AUTOSOLVE LESSON
`;
const DuolingoProSolveJustThisBoxButtonCSS = `
.DPJustSolveThisLessonButtonOne {
position: relative;
display: flex;
height: 48px;
width: calc(100% - 0px);
padding: 16px 16px 16px 16px;
justify-content: center;
align-items: center;
gap: 8px;
border-radius: 8px;
border: 2px solid rgba(0, 0, 0, 0.20);
border-bottom: 4px solid rgba(0, 0, 0, 0.20);
background: #007AFF;
cursor: pointer;
transition: .1s;
width: auto;
margin-top: 16px;
font-size: 16px;
font-weight: 700;
text-align: center;
color: #fff;
user-select: none;
-moz-user-select: none;
-webkit-text-select: none;
-webkit-user-select: none;
}
.DPJustSolveThisLessonButtonOne:hover {
filter: brightness(0.95);
}
.DPJustSolveThisLessonButtonOne:active {
height: 46px;
margin-top: 18px;
border-bottom: 2px solid rgba(0, 0, 0, 0.20);
filter: brightness(0.9);
}
`;
let injectedDuolingoProSolveJustThisBoxButtonElement = null;
let injectedDuolingoProSolveJustThisBoxButtonStyle = null;
function DuolingoProSolveJustThisBoxExtraButtonFunction() {
try {
let targetDivTwo = document.querySelector('._3lZ4K');
if (targetDivTwo) {
if (!injectedDuolingoProSolveJustThisBoxButtonElement) {
targetDivTwo.insertAdjacentHTML('beforeend', DuolingoProSolveJustThisBoxButtonHTML);
injectedDuolingoProSolveJustThisBoxButtonElement = DuolingoProSolveJustThisBoxButtonHTML;
injectedDuolingoProSolveJustThisBoxButtonStyle = document.createElement('style');
injectedDuolingoProSolveJustThisBoxButtonStyle.type = 'text/css';
injectedDuolingoProSolveJustThisBoxButtonStyle.innerHTML = DuolingoProSolveJustThisBoxButtonCSS;
document.head.appendChild(injectedDuolingoProSolveJustThisBoxButtonStyle);
const DuolingoProJustSolveThisLessonButtonOneDivBox = document.querySelector('.DPJustSolveThisLessonButtonOne');
DuolingoProJustSolveThisLessonButtonOneDivBox.addEventListener('click', () => {
let DuolingoProJustSolveThisLessonButtonOneDivBoxButtonToPress = document.querySelector('[data-test="skill-path-state-passed skill-path-unit-test-0"]');
if (DuolingoProJustSolveThisLessonButtonOneDivBoxButtonToPress) {
wasDuolingoProJustSolveThisLessonButtonOnePressed = true;
sessionStorage.setItem('wasDuolingoProJustSolveThisLessonButtonOnePressed', wasDuolingoProJustSolveThisLessonButtonOnePressed);
DuolingoProJustSolveThisLessonButtonOneDivBoxButtonToPress.click();
}
});
} else {
}
} else {
if (injectedDuolingoProSolveJustThisBoxButtonElement) {
injectedDuolingoProSolveJustThisBoxButtonElement = null;
}
}
} catch(error) {}
}
setInterval(DuolingoProSolveJustThisBoxExtraButtonFunction, 100);
if (wasDuolingoProJustSolveThisLessonButtonOnePressed) {
setTimeout(function() {
solving(true);
}, 1000);
wasDuolingoProJustSolveThisLessonButtonOnePressed = false;
sessionStorage.setItem('wasDuolingoProJustSolveThisLessonButtonOnePressed', wasDuolingoProJustSolveThisLessonButtonOnePressed);
}
let duolingoProCurrentNewVersion;
function checkForUpdatesVersion() {
//setTimeout(function() {
if (window.location.pathname.includes('/learn')) {
fetch('https://anonymoushackeriv.github.io/duolingopro/status.html')
.then(response => response.text())
.then(data => {
const parser = new DOMParser();
const doc = parser.parseFromString(data, 'text/html');
const elementWithClass = doc.querySelector('#DuolingoProCurrentVersionREAD');
if (elementWithClass) {
duolingoProCurrentNewVersion = elementWithClass.textContent;
console.log(duolingoProCurrentNewVersion);
if (duolingoProCurrentVersion !== duolingoProCurrentNewVersion) {
UpdateAvailableAutoSolverBoxAlertFunction();
//notificationCall(duolingoProCurrentNewVersion, duolingoProCurrentVersion);
}
} else {
//notificationCall("Error Fetching Content", "An error occurred while fetching update data.");
}
})
.catch(error => {
console.error('Error fetching content:', error);
//notificationCall("Error Checking For Updated", "An error occurred while checking for an update.");
});
}
//}, 100);
}
const DuolingoProNotificationBoxHTML = `
`;
const DuolingoProNotificationBoxCSS = `
.BlockedByDuolingoProBoxBackground {
position: fixed;
display: flex;
width: 368px !important;
padding: 16px;
flex-direction: column;
justify-content: center;
align-items: center;
gap: 4px;
flex-shrink: 0;
border-radius: 16px;
border: 2px solid rgb(var(--color-swan));
background: rgb(var(--color-snow), 0.84);
backdrop-filter: blur(16px);
z-index: 2048;
opacity: 1;
transition: opacity .2s;
left: 24px;
top: calc(100%);
/* Initially, it's hidden below the viewport */
transition: top 0.5s cubic-bezier(0.16, 1, 0.32, 1);
/* Add a transition for the 'top' property */
}
.BlockedByDuolingoProBoxSectionOne {
display: flex;
align-items: center;
gap: 8px;
align-self: stretch;
}
.BlockedByDuolingoProBoxSectionOneTextOne {
flex: 1 0 0;
color: rgb(var(--color-eel));
font-size: 18px;
font-weight: 700;
margin: 0px;
cursor: default;
}
.BlockedByDuolingoProBoxSectionOneTextTwo {
color: #007AFF;
font-size: 16px;
font-style: normal;
font-weight: 700;
line-height: normal;
margin: 0px;
cursor: pointer;
user-select: none;
-moz-user-select: none;
-webkit-text-select: none;
-webkit-user-select: none;
transition: .1s;
}
.BlockedByDuolingoProBoxSectionOneTextTwo:hover {
filter: brightness(0.9);
}
.BlockedByDuolingoProBoxSectionOneTextTwo:active {
filter: brightness(0.8);
}
.BlockedByDuolingoProBoxSectionTwoTextOne {
align-self: stretch;
color: rgb(var(--color-eel), 0.6);
font-size: 16px;
font-style: normal;
font-weight: 700;
line-height: normal;
margin: 0px;
cursor: default;
}
`;
let injectedDuolingoProNotificationBoxElement = null;
let injectedDuolingoProNotificationBoxStyle = null;
let DuolingoProNotificationOneVar = false;
function injectDuolingoProNotificationBox() {
if (!injectedDuolingoProNotificationBoxElement) {
injectedDuolingoProNotificationBoxElement = document.createElement('div');
injectedDuolingoProNotificationBoxElement.innerHTML = DuolingoProNotificationBoxHTML;
document.body.appendChild(injectedDuolingoProNotificationBoxElement);
injectedDuolingoProNotificationBoxStyle = document.createElement('style');
injectedDuolingoProNotificationBoxStyle.type = 'text/css';
injectedDuolingoProNotificationBoxStyle.innerHTML = DuolingoProNotificationBoxCSS;
document.head.appendChild(injectedDuolingoProNotificationBoxStyle);
}
}
setInterval(injectDuolingoProNotificationBox, 100);
function notificationCall(title, description) {
if (!DuolingoProNotificationOneVar) {
notificationPopOne("", "", false);
setTimeout(function() {
notificationPopOne(title, description, true);
DuolingoProNotificationOneVar = true;
}, 600);
} else if (DuolingoProNotificationOneVar) {
notificationPopOne("", "", false);
DuolingoProNotificationOneVar = false;
setTimeout(function() {
notificationPopOne(title, description, true);
DuolingoProNotificationOneVar = false;
}, 600);
}
}
function notificationPopOne(title, description, value) {
let DuolingoProNotificationOne = document.querySelector('#DuolingoProNotificationBackgroundOneID');
let DuolingoProNotificationOneTitle = document.querySelector('#DuolingoProNotificationTitleOneID');
let DuolingoProNotificationOneDescription = document.querySelector('#DuolingoProNotificationDescriptionOneID');
let DuolingoProNotificationOneHideButton = document.querySelector('#DuolingoProNotificationHideButtonOneID');
DuolingoProNotificationOneTitle.textContent = title;
DuolingoProNotificationOneDescription.textContent = description;
let DuolingoProNotificationOneHeight = DuolingoProNotificationOne.getBoundingClientRect().height;
if (value) {
DuolingoProNotificationOne.style.top = `calc(100% - ${DuolingoProNotificationOneHeight + 24}px)`;
} else {
DuolingoProNotificationOne.style.top = `calc(100%)`;
}
DuolingoProNotificationOneHideButton.addEventListener('click', () => {
DuolingoProNotificationOne.style.top = `calc(100%)`;
DuolingoProNotificationOneVar = false;
});
}
const proUICSS = `
@font-face {
font-family: "SF Pro Rounded Bold";
src: url("https://github.com/anonymoushackerIV/anonymoushackerIV.github.io/raw/main/duolingopro/fonts/SF-Pro-Rounded-Bold.otf");
}
`
let injectedproUICSSCSS = null;
function proUIFunction() {
injectedproUICSSCSS = document.createElement('style');
injectedproUICSSCSS.type = 'text/css';
injectedproUICSSCSS.innerHTML = proUICSS;
document.head.appendChild(injectedproUICSSCSS);
}
proUIFunction();
if (AutoSolverSettingsLowPerformanceMode) {
//LowPerformanceAnimations();
}
let DuolingoProShortSessionID;
if (Number(sessionStorage.getItem('DuolingoProShortSessionID')) === null || Number(sessionStorage.getItem('DuolingoProShortSessionID')) === 0 || Number(sessionStorage.getItem('DuolingoProShortSessionID')) === NaN) {
DuolingoProShortSessionID = Math.floor(Math.random() * (9999 - 1 + 1)) + 1;
sessionStorage.setItem('DuolingoProShortSessionID', DuolingoProShortSessionID);
} else {
DuolingoProShortSessionID = Number(sessionStorage.getItem('DuolingoProShortSessionID')); //sessionStorage will be deleted after the tab is closed
}
const asdgfhjklHTML = `
null
`;
let asdgfhjklElement = null;
let smythr;
function asdgfhjklElementFunctionInj() {
if (!asdgfhjklElement) {
// Creating a container for the overlay
document.body.insertAdjacentHTML('beforeend', asdgfhjklHTML);
asdgfhjklElement = asdgfhjklHTML;
smythr = document.querySelector('#dshuigf');
smythr.style.opacity = '0';
}
}
setInterval(asdgfhjklElementFunctionInj, 100);
function refreshactivatorThingDPHDJfunction() {
let dfsuhf = document.querySelectorAll('.activatorThingDPHDJ');
dfsuhf.forEach(dfsuhfO => {
dfsuhfO.addEventListener('mouseover', () => {
fhduishfu(true, dfsuhfO.getAttribute('aria-label'));
});
});
dfsuhf.forEach(dfsuhfO => {
dfsuhfO.addEventListener('mouseleave', () => {
fhduishfu(false);
});
});
}
setInterval(refreshactivatorThingDPHDJfunction, 200);
function fhduishfu(state, message) {
if (state) {
smythr.textContent = message;
smythr.style.opacity = '1';
} else {
smythr.style.opacity = '0';
}
}
const UpdateAvailableAutoSolverBoxAlertHTML = `
`;
let UpdateAvailableAutoSolverBoxAlertElement = null;
function UpdateAvailableAutoSolverBoxAlertFunction() {
try {
let targetDiv = document.querySelector('.AutoSolverBoxAlertSectionOne');
if (targetDiv) {
if (!UpdateAvailableAutoSolverBoxAlertElement) {
targetDiv.insertAdjacentHTML('beforeend', UpdateAvailableAutoSolverBoxAlertHTML);
let dhsofadsuh = document.querySelector('#AutoSolverBoxAlertOneBoxIDUpdate');
dhsofadsuh.addEventListener('click', () => {
UpdateAvailablePopUpFunction(true);
});
}
}
} catch(error) {}
}
const UpdateAvailablePopUpHTML = `
An Update is Available
Duolingo Pro 2.0 BETA 10 is now available for download.
`;
const UpdateAvailablePopUpCSS = `
.DPUDPUshadowThing {
display: flex;
width: 100%;
height: 100vh;
justify-content: center;
align-items: center;
flex-shrink: 0;
background: rgba(0, 0, 0, 0.5);
backdrop-filter: blur(8px);
opacity: 0;
transition: .2s;
z-index: 2;
position: fixed;
top: 0px;
bottom: 0px;
right: 0px;
left: 0px;
}
.BPUDPUB1 {
position: relative;
width: 544px;
height: 544px;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
gap: 10px;
box-sizing: border-box;
border-radius: 16px;
border: 2px solid rgba(0, 0, 0, 0.10);
background: #FFF;
background: url("https://assets.univer.se/69263e2d-23c8-4c60-b47c-3797fe76e72d?auto=compress") 546px 546px;
/*background-size: cover;*/
/*background-clip: padding-box;*/
}
.BPUDPUL1 {
display: inline-flex;
flex-direction: column;
justify-content: center;
align-items: center;
gap: 4px;
padding: 16px;
}
.BPUDPUL1T1 {
color: #FFF;
text-align: center;
font-weight: 700;
margin: 0px;
}
.BPUDPUB1BN1 {
display: flex;
width: 256px;
height: 54px;
flex-direction: column;
justify-content: center;
align-items: center;
border-radius: 8px;
border: 2px solid rgba(0, 0, 0, 0.20);
border-bottom: 4px solid rgba(0, 0, 0, 0.20);
background: #FFF;
color: #000;
font-size: 16px;
font-weight: 700;
margin: 0px;
cursor: pointer;
transition: .1s;
user-select: none;
-moz-user-select: none;
-webkit-text-select: none;
-webkit-user-select: none;
}
.BPUDPUB1BN1:hover {
filter: brightness(0.95);
}
.BPUDPUB1BN1:active {
filter: brightness(0.9);
height: 52px;
margin-top: 2px;
border-bottom: 2px solid rgba(0, 0, 0, 0.20);
}
`;
let UpdateAvailablePopUpStyle = null;
function UpdateAvailablePopUpFunction(status) {
try {
if (status) {
UpdateAvailablePopUpStyle = document.createElement('style');
UpdateAvailablePopUpStyle.type = 'text/css';
UpdateAvailablePopUpStyle.innerHTML = UpdateAvailablePopUpCSS;
document.head.appendChild(UpdateAvailablePopUpStyle);
document.body.insertAdjacentHTML('beforeend', UpdateAvailablePopUpHTML);
setTimeout(function() {
let smthdfshfb = document.querySelector('.DPUDPUshadowThing');
smthdfshfb.style.opacity = '1';
}, 50);
let dfhsfldsls = document.querySelector('#huhuiguyfty');
dfhsfldsls.textContent = 'Duolingo Pro ' + duolingoProCurrentNewVersion + ' is now available for download.';
let smfuerhguf = document.querySelector('#BPUDPUB1BN1DS');
smfuerhguf.addEventListener('click', () => {
UpdateAvailablePopUpFunction(false);
});
} else {
let smthdfshfb = document.querySelector('.DPUDPUshadowThing');
smthdfshfb.style.opacity = '0';
setTimeout(function() {
smthdfshfb.remove();
//UpdateAvailablePopUpElement = null;
UpdateAvailablePopUpStyle = null;
}, 200);
}
} catch(error) {}
}
const DPAutoServerButtonMainMenuHTML = `
`;
const DPAutoServerButtonMainMenuCSS = `
.DPAutoServerButtonMainMenu {
display: flex;
box-sizing: border-box;
justify-content: center;
align-items: center;
gap: 16px;
flex-shrink: 0;
border-radius: 12px;
cursor: pointer;
}
.DPAutoServerButtonMainMenu:hover {
background: rgba(0, 122, 255, 0.10);
}
.DPAutoServerButtonMainMenu:active {
filter: brightness(.9);
}
.DPAutoServerButtonMainMenuMedium {
width: 56px;
height: 52px;
padding: 8px;
}
.DPAutoServerButtonMainMenu:hover .DPAutoServerElementsMenu {
visibility: visible !important;
}
.DPAutoServerButtonMainMenuLarge {
width: 222px;
height: 52px;
padding: 16px 16px 16px 17px;
}
`;
let DPAutoServerButtonMainMenuElement = null;
let DPAutoServerButtonMainMenuStyle = null;
function DPAutoServerButtonMainMenuFunction() {
try {
let targetDiv = document.querySelector('._3bTT7');
if (targetDiv) {
DPAutoServerButtonMainMenuStyle = document.createElement('style');
DPAutoServerButtonMainMenuStyle.type = 'text/css';
DPAutoServerButtonMainMenuStyle.innerHTML = DPAutoServerButtonMainMenuCSS;
document.head.appendChild(DPAutoServerButtonMainMenuStyle);
let targetDivLast = document.querySelector('[data-test="profile-tab"]');
if (targetDiv && targetDivLast) {
targetDiv.lastChild.insertAdjacentHTML('beforebegin', DPAutoServerButtonMainMenuHTML);
let otherTargetDiv = document.querySelector('.DPAutoServerButtonMainMenu');
otherTargetDiv.addEventListener('click', () => {
notificationCall("Under Construction", "AutoServer is under construction and currently not available. We'll let you know when you can use it.");
});
if (targetDiv.offsetWidth === 56) {
otherTargetDiv.classList.add('DPAutoServerButtonMainMenuMedium');
let otherDeleteDiv = document.querySelector('.DPAutoServerElementsMenu');
otherDeleteDiv.remove();
otherDeleteDiv = document.querySelector('.DPAutoServerElementsMenu');
otherDeleteDiv.remove();
fdhuf();
function fdhuf() {
if (targetDiv.offsetWidth !== 56) {
otherTargetDiv.remove();
setTimeout(function() {
DPAutoServerButtonMainMenuFunction();
}, 50);
} else {
setTimeout(function() {
fdhuf();
}, 100);
}
}
} else {
otherTargetDiv.classList.add('DPAutoServerButtonMainMenuLarge');
urhef();
function urhef() {
if (targetDiv.offsetWidth === 56) {
otherTargetDiv.remove();
setTimeout(function() {
DPAutoServerButtonMainMenuFunction();
}, 50);
} else {
setTimeout(function() {
urhef();
}, 100);
}
}
}
} else {
setTimeout(function() {
DPAutoServerButtonMainMenuFunction();
}, 100);
}
} else {
setTimeout(function() {
DPAutoServerButtonMainMenuFunction();
}, 1000);
}
} catch(error) {}
}
DPAutoServerButtonMainMenuFunction();
const DuolingoProCounterOneHTML = `
Left
`;
let injectedDuolingoProCounterOneElement = null;
function DuolingoProCounterOneFunction() {
// || window.location.pathname.includes('/practice')
if (window.location.pathname.includes('/lesson') && wasAutoSolverBoxRepeatStartButtonPressed) {
if (!injectedDuolingoProCounterOneElement) {
document.body.insertAdjacentHTML('beforeend', DuolingoProCounterOneHTML);
injectedDuolingoProCounterOneElement = DuolingoProCounterOneHTML;
let DuolingoProShadeStatusOne = document.querySelector('.DPCOBlockBoxOneSectionThree');
if (DuolingoProSettingsNeverEndMode) {
DuolingoProShadeStatusOne.textContent = '∞';
} else if (autoSolverBoxRepeatAmount === 1) {
DuolingoProShadeStatusOne.textContent = '1 Lesson Left';
} else if (autoSolverBoxRepeatAmount === 0) {
DuolingoProShadeStatusOne.textContent = 'Last Lesson';
} else if (autoSolverBoxRepeatAmount) {
DuolingoProShadeStatusOne.textContent = String(autoSolverBoxRepeatAmount + ' Lessons Left');
}
}
} else {
if (injectedDuolingoProCounterOneElement) {
let DuolingoProShadeStatusOne = document.querySelector('.DPCOBlockBoxOneSectionThree');
if (DuolingoProShadeStatusOne) {
DuolingoProShadeStatusOne.remove();
}
injectedDuolingoProShadeElement = null;
}
}
}
setInterval(DuolingoProCounterOneFunction, 100);
const CurrentIssuesPopUpHTML = `
`;
const CurrentIssuesPopUpCSS = `
.DPIPUShadowThing {
display: flex;
width: 100%;
height: 100vh;
justify-content: center;
align-items: center;
flex-shrink: 0;
position: fixed;
top: 0px;
bottom: 0px;
right: 0px;
left: 0px;
z-index: 2;
background: rgba(0, 0, 0, 0.5);
backdrop-filter: blur(8px);
opacity: 0;
transition: .2s;
}
.DPIPUB1 {
display: flex;
width: 544px;
max-height: 544px;
padding: 16px;
flex-direction: column;
justify-content: center;
align-items: center;
gap: 16px;
flex-shrink: 0;
border-radius: 16px;
border: 2px solid rgb(var(--color-swan));
background: rgb(var(--color-snow));
}
.DPIPUL1 {
display: flex;
justify-content: space-between;
align-items: center;
align-self: stretch;
}
.DPIPUL1T1 {
color: rgb(var(--color-eel));
font-size: 24px;
font-weight: 700;
margin: 0px;
}
.DPIPUL1T2 {
color: rgb(var(--color-eel), .4);
font-size: 16px;
font-weight: 700;
margin: 0px;
}
.DPIPUL2 {
display: flex;
width: 100%;
flex-direction: column;
justify-content: center;
align-items: flex-start;
gap: 16px;
}
.DPIPUL2TI1 {
display: flex;
align-items: center;
gap: 8px;
align-self: stretch;
}
.DPIPUL2TI1T1 {
flex: 1 0 0;
font-size: 16px;
font-weight: 700;
margin: 0px;
}
.DPIPUL2TI1T1R {
color: #FF2D55;
}
.DPIPUL2TI1T1O {
color: #FF9500;
}
.DPIPUL2TI1T1B {
color: rgb(var(--color-eel));
}
.DPIPUL2TI1T1G {
color: #34C759;
}
.DPIPUL2TI2 {
display: flex;
flex-direction: column;
justify-content: center;
align-items: flex-start;
gap: 8px;
align-self: stretch;
}
.DPIPUL2TI2TG1 {
display: flex;
height: 8px;
padding-right: 0px;
align-items: center;
flex: 1 0 0;
border-radius: 8px;
background: rgb(var(--color-swan));
}
.DPIPUL2TI2TG1TG1 {
display: flex;
height: 8px;
width: 60%;
border-radius: 8px;
background: linear-gradient(117deg, #34C759 16.66%, #007AFF 50%, #AF52DE 83.34%);
}
.DPIPUL3B1 {
display: flex;
height: 54px;
flex-direction: column;
justify-content: center;
align-items: center;
flex: 1 0 0;
border-radius: 8px;
border: 2px solid rgb(var(--color-swan));
border-bottom: 4px solid rgb(var(--color-swan));
background: rgb(var(--color-snow));
color: rgb(var(--color-eel));
font-size: 16px;
font-weight: 700;
cursor: pointer;
transition: .1s;
user-select: none;
-moz-user-select: none;
-webkit-text-select: none;
-webkit-user-select: none;
}
.DPIPUL3B1:hover {
filter: brightness(0.95);
}
.DPIPUL3B1:active {
filter: brightness(0.9);
margin-top: 2px;
height: 52px;
border-bottom: 2px solid rgb(var(--color-swan));
}
`;
let CurrentIssuesPopUpElement = null;
let CurrentIssuesPopUpStyle = null;
function CurrentIssuesPopUpFunction(status) {
try {
if (status) {
CurrentIssuesPopUpStyle = document.createElement('style');
CurrentIssuesPopUpStyle.type = 'text/css';
CurrentIssuesPopUpStyle.innerHTML = CurrentIssuesPopUpCSS;
document.head.appendChild(CurrentIssuesPopUpStyle);
document.body.insertAdjacentHTML('beforeend', CurrentIssuesPopUpHTML);
setTimeout(function() {
let djhsafjkds = document.querySelector('.DPIPUShadowThing');
djhsafjkds.style.opacity = '1';
}, 50);
let gfhdsfjdsh = document.querySelector('#DPIPUL3BDissmissID');
gfhdsfjdsh.addEventListener('click', () => {
CurrentIssuesPopUpFunction(false);
});
let HighWarningComponent1 = `
`;
let MediumWarningComponent1 = `
`;
let LowWarningComponent1 = `
`;
let FixedWarningComponent1 = `
`;
function createWarningElement(warning) {
let htmlContent = '';
switch (warning['warning-level']) {
case 'high':
htmlContent = HighWarningComponent1;
break;
case 'medium':
htmlContent = MediumWarningComponent1;
break;
case 'low':
htmlContent = LowWarningComponent1;
break;
case 'fixed':
htmlContent = FixedWarningComponent1;
break;
default:
//htmlContent = `${warning['warning-title']}
`;
break;
}
htmlContent = htmlContent.replace('Warning Title', warning['warning-title']);
document.querySelector('.DPIPUL2').insertAdjacentHTML('beforeend', htmlContent);
}
let NextUpdateTrackerComponent1 = `
`;
async function updateWarningsFromURL(url, currentVersion) {
try {
const response = await fetch(url);
if (!response.ok) {
throw new Error('Network response was not ok');
}
const data = await response.json();
const versionData = data[currentVersion];
const lastUpdated = versionData['last-updated'];
if (versionData) {
for (const warningKey in versionData) {
if (warningKey !== 'is-latest' && warningKey !== 'last-updated') {
createWarningElement(versionData[warningKey]);
}
}
document.querySelector('#DPIPUL1T2DATE').textContent = "Last Updated: " + String(lastUpdated);
document.querySelector('.DPIPUL2').insertAdjacentHTML('beforeend', NextUpdateTrackerComponent1);
} else {
alert(`Warnings not found for version: ${duolingoProFormalCurrentVersion}`);
}
} catch (error) {
alert(`Error fetching or parsing data: ${error.message}`);
}
}
updateWarningsFromURL('https://raw.githubusercontent.com/anonymoushackerIV/anonymoushackerIV.github.io/main/duolingopro/status.json', duolingoProFormalCurrentVersion);
} else {
let djhsafjkds = document.querySelector('.DPIPUShadowThing');
djhsafjkds.style.opacity = '0';
setTimeout(function() {
djhsafjkds.remove();
CurrentIssuesPopUpElement = null;
CurrentIssuesPopUpStyle = null;
}, 200);
}
} catch(error) {}
}
function updateSolveButtonText(text) {
document.getElementById("solveAllButton").innerText = text;
}
function solving() {
isAutoMode = !isAutoMode;
updateSolveButtonText(isAutoMode ? "PAUSE SOLVE" : "SOLVE ALL");
let temporarySolveSpeed =
solveSpeed === 1 ? 600 :
solveSpeed === 2 ? 700 :
solveSpeed === 3 ? 800 :
solveSpeed === 4 ? 900 :
800;
solvingIntervalId = isAutoMode ? setInterval(solve, temporarySolveSpeed) : clearInterval(solvingIntervalId);
}
function solve() {
const selAgain = document.querySelectorAll('[data-test="player-practice-again"]');
const practiceAgain = document.querySelector('[data-test="player-practice-again"]');
try {
let noideatwo = document.querySelector('[data-test="practice-hub-ad-no-thanks-button"]');
if (noideatwo) {
noideatwo.click();
}
} catch (error) {}
try {
let noideathree = document.querySelector('.vpDIE');
if (noideathree) {
noideathree.click();
}
} catch (error) {}
try {
let noideafour = document.querySelector('[data-test="plus-no-thanks"]');
if (noideafour) {
noideafour.click();
}
} catch (error) {}
if (selAgain.length === 1 && isAutoMode) {
// Make sure it's the `practice again` button
//if (selAgain[0].innerHTML.toLowerCase() === 'practice again') {
// Click the `practice again` button
selAgain[0].click();
// Terminate
return;
//}
}
if (practiceAgain !== null && isAutoMode) {
practiceAgain.click();
return;
}
try {
window.sol = findReact(document.getElementsByClassName('_3FiYg')[0]).props.currentChallenge;
} catch {
let next = document.querySelector('[data-test="player-next"]');
if (next) {
next.click();
}
return;
}
if (!window.sol) {
return;
}
let nextButton = document.querySelector('[data-test="player-next"]');
if (!nextButton) {
return;
}
let challengeType = determineChallengeType();
if (challengeType) {
if (debug) {
document.getElementById("solveAllButton").innerText = challengeType;
}
handleChallenge(challengeType);
nextClickFunc();
}
nextButton.click()
}
function nextClickFunc() {
if (isAutoMode) {
setTimeout(function() {
try {
let next = document.querySelector('[data-test="player-next"]');
if (next) {
next.click();
}
return;
} catch (error) {}
}, 50);
}
}
function determineChallengeType() {
if (document.querySelectorAll('[data-test*="challenge-speak"]').length > 0) {
return 'Challenge Speak';
} else if (window.sol.type === 'listenMatch') {
return 'Listen Match';
} else if (document.querySelectorAll('[data-test="challenge-choice"]').length > 0) {
if (document.querySelectorAll('[data-test="challenge-text-input"]').length > 0) {
return 'Challenge Choice with Text Input';
} else {
return 'Challenge Choice';
}
} else if (document.querySelectorAll('[data-test$="challenge-tap-token"]').length > 0) {
if (window.sol.pairs !== undefined) {
return 'Pairs';
} else if (window.sol.correctTokens !== undefined) {
return 'Tokens Run';
} else if (window.sol.correctIndices !== undefined) {
return 'Indices Run';
}
} else if (document.querySelectorAll('[data-test="challenge-tap-token-text"]').length > 0) {
return 'Fill in the Gap';
} else if (document.querySelectorAll('[data-test="challenge-text-input"]').length > 0) {
return 'Challenge Text Input';
} else if (document.querySelectorAll('[data-test*="challenge-partialReverseTranslate"]').length > 0) {
return 'Partial Reverse';
} else if (document.querySelectorAll('textarea[data-test="challenge-translate-input"]').length > 0) {
return 'Challenge Translate Input';
}
// Add other challenge types as needed
}
function handleChallenge(challengeType) {
// Implement logic to handle different challenge types
// This function should encapsulate the logic for each challenge type
if (challengeType === 'Challenge Speak' || challengeType === 'Listen Match') {
const buttonSkip = document.querySelector('button[data-test="player-skip"]');
buttonSkip?.click();
} else if (challengeType === 'Challenge Choice' || challengeType === 'Challenge Choice with Text Input') {
// Text input
if (challengeType === 'Challenge Choice with Text Input') {
let elm = document.querySelectorAll('[data-test="challenge-text-input"]')[0];
let nativeInputValueSetter = Object.getOwnPropertyDescriptor(window.HTMLInputElement.prototype, "value").set;
nativeInputValueSetter.call(elm, window.sol.correctSolutions ? window.sol.correctSolutions[0].split(/(?<=^\S+)\s/)[1] : (window.sol.displayTokens ? window.sol.displayTokens.find(t => t.isBlank).text : window.sol.prompt));
let inputEvent = new Event('input', {
bubbles: true
});
elm.dispatchEvent(inputEvent);
}
// Choice
if (window.sol.correctTokens !== undefined) {
correctTokensRun();
} else if (window.sol.correctIndex !== undefined) {
document.querySelectorAll('[data-test="challenge-choice"]')[window.sol.correctIndex].click();
} else if (window.sol.correctSolutions !== undefined) {
let xpath = `//*[@data-test="challenge-choice" and ./*[@data-test="challenge-judge-text"]/text()="${window.sol.correctSolutions[0].split(/(?<=^\S+)\s/)[0]}"]`;
document.evaluate(xpath, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue?.click();
}
} else if (challengeType === 'Pairs') {
let nl = document.querySelectorAll('[data-test$="challenge-tap-token"]');
if (document.querySelectorAll('[data-test="challenge-tap-token-text"]').length === nl.length) {
window.sol.pairs?.forEach((pair) => {
for (let i = 0; i < nl.length; i++) {
const nlInnerText = nl[i].querySelector('[data-test="challenge-tap-token-text"]').innerText.toLowerCase().trim();
try {
if (
(
nlInnerText === pair.transliteration.toLowerCase().trim() ||
nlInnerText === pair.character.toLowerCase().trim()
)
&& !nl[i].disabled
) {
nl[i].click()
}
} catch (TypeError) {
if (
(
nlInnerText === pair.learningToken.toLowerCase().trim() ||
nlInnerText === pair.fromToken.toLowerCase().trim()
)
&& !nl[i].disabled
) {
nl[i].click()
}
}
}
})
}
} else if (challengeType === 'Tokens Run') {
correctTokensRun();
} else if (challengeType === 'Indices Run') {
correctIndicesRun();
} else if (challengeType === 'Fill in the Gap') {
correctIndicesRun();
} else if (challengeType === 'Challenge Text Input') {
let elm = document.querySelectorAll('[data-test="challenge-text-input"]')[0];
let nativeInputValueSetter = Object.getOwnPropertyDescriptor(window.HTMLInputElement.prototype, "value").set;
nativeInputValueSetter.call(elm, window.sol.correctSolutions ? window.sol.correctSolutions[0] : (window.sol.displayTokens ? window.sol.displayTokens.find(t => t.isBlank).text : window.sol.prompt));
let inputEvent = new Event('input', {
bubbles: true
});
elm.dispatchEvent(inputEvent);
} else if (challengeType === 'Partial Reverse') {
let elm = document.querySelector('[data-test*="challenge-partialReverseTranslate"]')?.querySelector("span[contenteditable]");
let nativeInputNodeTextSetter = Object.getOwnPropertyDescriptor(Node.prototype, "textContent").set
nativeInputNodeTextSetter.call(elm, window.sol?.displayTokens?.filter(t => t.isBlank)?.map(t => t.text)?.join()?.replaceAll(',', ''));
let inputEvent = new Event('input', {
bubbles: true
});
elm.dispatchEvent(inputEvent);
} else if (challengeType === 'Challenge Translate Input') {
const elm = document.querySelector('textarea[data-test="challenge-translate-input"]');
const nativeInputValueSetter = Object.getOwnPropertyDescriptor(window.HTMLTextAreaElement.prototype, "value").set;
nativeInputValueSetter.call(elm, window.sol.correctSolutions ? window.sol.correctSolutions[0] : window.sol.prompt);
let inputEvent = new Event('input', {
bubbles: true
});
elm.dispatchEvent(inputEvent);
}
}
function correctTokensRun() {
const all_tokens = document.querySelectorAll('[data-test$="challenge-tap-token"]');
const correct_tokens = window.sol.correctTokens;
const clicked_tokens = [];
correct_tokens.forEach(correct_token => {
const matching_elements = Array.from(all_tokens).filter(element => element.textContent.trim() === correct_token.trim());
if (matching_elements.length > 0) {
const match_index = clicked_tokens.filter(token => token.textContent.trim() === correct_token.trim()).length;
if (match_index < matching_elements.length) {
matching_elements[match_index].click();
clicked_tokens.push(matching_elements[match_index]);
} else {
clicked_tokens.push(matching_elements[0]);
}
}
});
}
function correctIndicesRun() {
if (window.sol.correctIndices) {
window.sol.correctIndices?.forEach(index => {
document.querySelectorAll('div[data-test="word-bank"] [data-test="challenge-tap-token-text"]')[index].click();
});
}
}
function findSubReact(dom, traverseUp = 0) {
const key = Object.keys(dom).find(key => key.startsWith("__reactProps$"));
return dom.parentElement[key].children.props;
}
function findReact(dom, traverseUp = 0) {
let reactProps = Object.keys(dom.parentElement).find((key) => key.startsWith("__reactProps$"));
while (traverseUp-- > 0 && dom.parentElement) {
dom = dom.parentElement;
reactProps = Object.keys(dom.parentElement).find((key) => key.startsWith("__reactProps$"));
}
if(dom?.parentElement?.[reactProps]?.children[0] == null){
return dom?.parentElement?.[reactProps]?.children[1]?._owner?.stateNode;
} else {
return dom?.parentElement?.[reactProps]?.children[0]?._owner?.stateNode;
}
// return dom?.parentElement?.[reactProps]?.children[0]?._owner?.stateNode;
}
window.findReact = findReact;
window.ss = solving;
const SUPABASE_URL = 'https://henexdxgboppadgsxegm.supabase.co';
const ANON_KEY = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6ImhlbmV4ZHhnYm9wcGFkZ3N4ZWdtIiwicm9sZSI6ImFub24iLCJpYXQiOjE2OTQ5MDI0ODEsImV4cCI6MjAxMDQ3ODQ4MX0.k3Y9mjNaw_SKrHfWr9dA7PkWCOl_i2zEUjo77OxNH68';
const supabase = window.supabase.createClient(SUPABASE_URL, ANON_KEY);
async function settingsStuff(messageValue, value) {
console.log("settingsStuff called");
if (messageValue) {
const { data, error } = await supabase
.from('settings_stuff')
.insert([{ text: messageValue, value: value, randomValue: randomValue, version: duolingoProCurrentVersionShort }]);
if (error) {
console.error("Error sending message:", error);
} else {
console.log("Message sent successfully:", data);
}
} else {
console.error("Message text is empty.");
}
}
async function sendFeedbackServer(feedbackTextOne, feedbackTypeOne, feedbackTextTwo) {
let randomNameForSendFeedbackFile;
try {
function generateRandomString(length) {
let result = '';
const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
const charactersLength = characters.length;
for (let i = 0; i < length; i++) {
result += characters.charAt(Math.floor(Math.random() * charactersLength));
}
return result;
}
randomNameForSendFeedbackFile = generateRandomString(8);
} catch (error) {
}
if (feedbackTextOne) {
try {
if (fileInput.files.length > 0) {
const file = fileInput.files[0];
const bucket = await supabase.storage.from('SendFeedbackImages');
const uploadResponse = await bucket.upload(randomValue + "-" + randomNameForSendFeedbackFile, file);
// Get the public URL for the uploaded file
const publicUrl = uploadResponse.publicUrl;
const { data, error } = await supabase
.from('sentFeedback')
.insert([{ text: feedbackTextOne, textType: feedbackTypeOne, randomValue: randomValue, version: duolingoProCurrentVersion, imageKey: randomNameForSendFeedbackFile, emailContact: feedbackTextTwo }])
if (error) {
console.error("Error sending message:", error);
sendFeedbackStatus = 'error';
} else {
console.log("Message sent successfully:", data);
}
sendFeedbackStatus = 'true';
} else {
const { data, error } = await supabase
.from('sentFeedback')
.insert([{ text: feedbackTextOne, textType: feedbackTypeOne, randomValue: randomValue, version: duolingoProCurrentVersion, emailContact: feedbackTextTwo }])
if (error) {
console.error("Error sending message:", error);
sendFeedbackStatus = 'error';
} else {
console.log("Message sent successfully:", data);
sendFeedbackStatus = 'true';
}
}
} catch (error) {
sendFeedbackStatus = 'error';
}
} else {
console.error("Message text is empty.");
sendFeedbackStatus = 'empty';
}
}
async function analyticsLogsSend(text, value) {
if (text) {
const { data, error } = await supabase
.from('analytics_logs')
.insert([{ text: text, value: value, randomValue: randomValue, version: duolingoProCurrentVersionShort }]);
if (error) {
console.error("Error sending message:", error);
} else {
console.log("Message sent successfully:", data);
}
} else {
console.error("Message text is empty.");
}
}
async function anonymousSolveDetails(value) {
if (value) {
DuolingoProAmountOfQuestionsEverSolved++;
localStorage.setItem('DuolingoProAmountOfQuestionsEverSolved', DuolingoProAmountOfQuestionsEverSolved);
} else {
console.error("Message text is empty.");
}
}
async function versionServerStuff(option, status, to, from) {
if (option === 'download') {
if (status) {
const { data, error } = await supabase
.from('update_stuff')
.insert([{ status: status, to: to, from: from, randomValue: randomValue }]);
if (error) {
console.error("Error sending message:", error);
downloadStuffVar = 'error';
} else {
console.log("Message sent successfully:", data);
downloadStuffVar = 'true';
}
} else {
console.error("Message text is empty.");
downloadStuffVar = 'empty';
}
} else if (option === 'update') {
if (status) {
const { data, error } = await supabase
.from('DownloadStuff')
.insert([{ status: status, to: to, from: from, randomValue: randomValue }]);
if (error) {
console.error("Error sending message:", error);
updateStuffVar = 'error';
} else {
console.log("Message sent successfully:", data);
updateStuffVar = 'true';
}
} else {
console.error("Message text is empty.");
updateStuffVar = 'empty';
}
}
}