UserScript Automated Button Text Notifier

This script is intended to work with @require only. Provides class AutomatedButtonTextNotifier

Per 19-01-2022. Zie de nieuwste versie.

Dit script moet niet direct worden geïnstalleerd - het is een bibliotheek voor andere scripts om op te nemen met de meta-richtlijn // @require https://update.greasyfork.org/scripts/438801/1010217/UserScript%20Automated%20Button%20Text%20Notifier.js

Voor het installeren van scripts heb je een extensie nodig, zoals Tampermonkey, Greasemonkey of Violentmonkey.

Voor het installeren van scripts heb je een extensie nodig, zoals Tampermonkey of Violentmonkey.

Voor het installeren van scripts heb je een extensie nodig, zoals Tampermonkey of Violentmonkey.

Voor het installeren van scripts heb je een extensie nodig, zoals Tampermonkey of Userscripts.

Voor het installeren van scripts heb je een extensie nodig, zoals {tampermonkey_link:Tampermonkey}.

Voor het installeren van scripts heb je een gebruikersscriptbeheerder nodig.

(Ik heb al een user script manager, laat me het downloaden!)

Voor het installeren van gebruikersstijlen heb je een extensie nodig, zoals {stylus_link:Stylus}.

Voor het installeren van gebruikersstijlen heb je een extensie nodig, zoals {stylus_link:Stylus}.

Voor het installeren van gebruikersstijlen heb je een extensie nodig, zoals {stylus_link:Stylus}.

Voor het installeren van gebruikersstijlen heb je een gebruikersstijlbeheerder nodig.

Voor het installeren van gebruikersstijlen heb je een gebruikersstijlbeheerder nodig.

Voor het installeren van gebruikersstijlen heb je een gebruikersstijlbeheerder nodig.

(Ik heb al een beheerder - laat me doorgaan met de installatie!)

// ==UserScript==
// @namespace    Xortrox/UserScripts/AutomatedButtonTextNotifier
// @name         UserScript Automated Button Text Notifier
// @version      0.2
// @description  This script is intended to work with @require only. Provides class AutomatedButtonTextNotifier
// @author       Xortrox,
// @match        *
// @esversion:   6
// @license MIT
// ==/UserScript==

class AutomatedButtonTextNotifier {
    constructor(options) {
        this.icon = options.icon || '';
        this.title = options.title || 'No Title Specified';

        /** Looks for this pattern: <button class="button"><label></label></button */
        this.selector = options.selector;

        /** How frequently to scan for changes on the website (in milliseconds) */
        this.notificationInterval = options.interval;
        this.scanConfiguration = options.config;

        if (!this.selector) {
            this.error('Error: No selector specified for AutomatedButtonTextNotifier');
        }
    }

    async init() {
        await window.UserScript.Notifications.askPermission();

        this.interval = setInterval(this.scan, this.notificationInterval);
    }

    scan() {
        const notificationElements = document.querySelectorAll(this.selector);

        /** We send notification only once if any adventures are claimable */
        if (notificationElements && notificationElements.length > 0) {
            for (let element of notificationElements) {
                const text = element.innerText;

                const textLower = text.toLowerCase();

                for (const config of this.scanConfiguration) {
                    let includesText = false;
                    let excludesText = false;

                    for (const includeText of config.includes) {
                        if (textLower.includes[includeText]) {
                            includesText = true;
                            break;
                        }
                    }

                    if (config.excludes?.length > 0) {
                        for (const excludeText of config.includes) {
                            if (!textLower.includes[excludeText]) {
                                excludesText = true;
                                break;
                            }
                        }
                    }

                    let canShowNotification = includesText;

                    if (config.excludes?.length > 0) {
                        canShowNotification = canShowNotification && excludesText;
                    }

                    if (canShowNotification) {
                        window.UserScript.Notifications.notify(this.title, config.notificationText, this.icon);
                        break;
                    }
                }
            }
        }
    }

    error(error) {
        alert(error);
        console.error(new Error(error));
    }
}