UserScript Automated Button Text Notifier

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

Versão de: 19/01/2022. Veja: a última versão.

Este script não deve ser instalado diretamente. Este script é uma biblioteca de outros scripts para incluir com o diretório meta // @require https://update.greasyfork.org/scripts/438801/1010219/UserScript%20Automated%20Button%20Text%20Notifier.js

Você precisará instalar uma extensão como Tampermonkey, Greasemonkey ou Violentmonkey para instalar este script.

Você precisará instalar uma extensão como Tampermonkey ou Violentmonkey para instalar este script.

Você precisará instalar uma extensão como Tampermonkey ou Violentmonkey para instalar este script.

Você precisará instalar uma extensão como Tampermonkey ou Userscripts para instalar este script.

Você precisará instalar uma extensão como o Tampermonkey para instalar este script.

Você precisará instalar um gerenciador de scripts de usuário para instalar este script.

(Eu já tenho um gerenciador de scripts de usuário, me deixe instalá-lo!)

Você precisará instalar uma extensão como o Stylus para instalar este estilo.

Você precisará instalar uma extensão como o Stylus para instalar este estilo.

Você precisará instalar uma extensão como o Stylus para instalar este estilo.

Você precisará instalar um gerenciador de estilos de usuário para instalar este estilo.

Você precisará instalar um gerenciador de estilos de usuário para instalar este estilo.

Você precisará instalar um gerenciador de estilos de usuário para instalar este estilo.

(Eu já possuo um gerenciador de estilos de usuário, me deixar fazer a instalação!)

// ==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;


        /**
         * Every includes/excludes does a check for buttonSelector matched element's "innerText" value
         * Each entry will be checked in priority from top to bottom and only the first match will send its notification
         * All configs must have an includes entry, while exclusion is optional.
         * */
        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));
    }
}