MatchBlocker

Block the annoying 'match'-challange

ही स्क्रिप्ट इंस्टॉल करण्यासाठी तुम्हाला Tampermonkey, Greasemonkey किंवा Violentmonkey यासारखे एक्स्टेंशन इंस्टॉल करावे लागेल.

You will need to install an extension such as Tampermonkey to install this script.

ही स्क्रिप्ट इंस्टॉल करण्यासाठी तुम्हाला Tampermonkey किंवा Violentmonkey यासारखे एक्स्टेंशन इंस्टॉल करावे लागेल..

You will need to install an extension such as Tampermonkey or Userscripts to install this script.

ही स्क्रिप्ट इंस्टॉल करण्यासाठी तुम्हाला Tampermonkey यासारखे एक्स्टेंशन इंस्टॉल करावे लागेल..

ही स्क्रिप्ट इंस्टॉल करण्यासाठी तुम्हाला एक युझर स्क्रिप्ट व्यवस्थापक एक्स्टेंशन इंस्टॉल करावे लागेल.

(माझ्याकडे आधीच युझर स्क्रिप्ट व्यवस्थापक आहे, मला इंस्टॉल करू द्या!)

ही स्टाईल इंस्टॉल करण्यासाठी तुम्हाला Stylus सारखे एक्स्टेंशन इंस्टॉल करावे लागेल.

ही स्टाईल इंस्टॉल करण्यासाठी तुम्हाला Stylus सारखे एक्स्टेंशन इंस्टॉल करावे लागेल.

ही स्टाईल इंस्टॉल करण्यासाठी तुम्हाला Stylus सारखे एक्स्टेंशन इंस्टॉल करावे लागेल.

ही स्टाईल इंस्टॉल करण्यासाठी तुम्हाला एक युझर स्टाईल व्यवस्थापक इंस्टॉल करावे लागेल.

ही स्टाईल इंस्टॉल करण्यासाठी तुम्हाला एक युझर स्टाईल व्यवस्थापक इंस्टॉल करावे लागेल.

ही स्टाईल इंस्टॉल करण्यासाठी तुम्हाला एक युझर स्टाईल व्यवस्थापक इंस्टॉल करावे लागेल.

(माझ्याकडे आधीच युझर स्टाईल व्यवस्थापक आहे, मला इंस्टॉल करू द्या!)

// ==UserScript==
// @license WTFPL
// @name         MatchBlocker
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  Block the annoying 'match'-challange
// @author       Me
// @match        https://www.duolingo.com/*
// @icon         https://www.google.com/s2/favicons?domain=duolingo.com
// @grant        none
// ==/UserScript==
(function(send, open) {
    'use strict';
    let blockedTypes = ["match"]
    // Override send() method to change request body
    XMLHttpRequest.prototype.send = function(body) {
        let modifiedBody = body;
        // Is game session. Modify
        if (this.url.endsWith("sessions")) {
            let parsedBody = JSON.parse(modifiedBody);
            blockedTypes.forEach(type => {
                let typeIndex = parsedBody.challengeTypes.indexOf(type);
                if (typeIndex != -1) {
                    console.log("Blocking " + type, parsedBody.challengeTypes);
                    parsedBody.challengeTypes.splice(typeIndex, 1);
                }
            });
            modifiedBody = JSON.stringify(parsedBody);
        }
        send.apply(this, [modifiedBody]);
    };
    // Override open() method to intercept request URL
    XMLHttpRequest.prototype.open = function(method, url) {
        this.url = url;
        open.apply(this, arguments);
    }
})(XMLHttpRequest.prototype.send, XMLHttpRequest.prototype.open);