Drawaria Data Library

Biblioteca de datos completa para userscripts de Drawaria

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/546201/1643750/Drawaria%20Data%20Library.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==
// @name         Drawaria Data Library
// @namespace    drawaria-toolkit
// @version      1.0
// @description  Biblioteca de datos completa para userscripts de Drawaria
// @author       DrawariaBot-Developer
// @license      MIT
// ==/UserScript==

(function() {
    'use strict';
    
    // DATOS CONVERTIDOS
    const DRAWARIA_COMMANDS = [
        {
            id: 1,
            name: "votetrack",
            description: "Votar por Pista de Música",
            params: ["trackid"],
            usage: "clientcmd, 1, [trackid]",
            category: "music"
        },
        {
            id: 101,
            name: "spawnavatar",
            description: "Generar Avatar",
            params: [],
            usage: "clientcmd, 101",
            category: "avatar"
        },
        {
            id: 321,
            name: "trackforwardvoting",
            description: "Votar para Adelantar Ronda",
            params: [],
            usage: "clientcmd, 321",
            category: "voting"
        },
        {
            id: 320,
            name: "startrollbackvoting",
            description: "Iniciar Votación para Revertir Lienzo",
            params: [],
            usage: "clientcmd, 320",
            category: "voting"
        },
        {
            id: 3,
            name: "setstatusflag",
            description: "Establecer Bandera de Estado",
            params: ["flagid", "isactive"],
            usage: "clientcmd, 3, [flagid, isactive]",
            category: "status"
        },
        {
            id: 10,
            name: "getinventory",
            description: "Obtener Inventario",
            params: ["true"],
            usage: "clientcmd, 10, [true]",
            category: "inventory"
        },
        {
            id: 11,
            name: "buyitem",
            description: "Comprar Ítem",
            params: ["itemid"],
            usage: "clientcmd, 11, [itemid]",
            category: "inventory"
        },
        {
            id: 12,
            name: "activateitem",
            description: "Activar/Desactivar Ítem",
            params: ["itemid", "isactive"],
            usage: "clientcmd, 12, [itemid, isactive]",
            category: "inventory"
        },
        {
            id: 115,
            name: "setavatarprop",
            description: "Cambiar Propiedad de Avatar",
            params: [],
            usage: "clientcmd, 115",
            category: "avatar"
        },
        {
            id: 102,
            name: "getspawnsstate",
            description: "Obtener Estado de Avatares Generados",
            params: [],
            usage: "clientcmd, 102",
            category: "avatar"
        },
        {
            id: 103,
            name: "moveavatar",
            description: "Mover Avatar",
            params: ["packedPosition", "isTeleport"],
            usage: "clientcmd, 103, [packedPosition, isTeleport]",
            category: "avatar"
        },
        {
            id: 230,
            name: "canvasobj_setposition",
            description: "Establecer Posición de Objeto en Lienzo",
            params: ["itemid", "positionX", "positionY", "options"],
            usage: "clientcmd, 230, [itemid, positionX, positionY, options]",
            category: "canvas"
        },
        {
            id: 231,
            name: "canvasobj_setrotation",
            description: "Establecer Rotación de Objeto en Lienzo",
            params: ["itemid", "rotation"],
            usage: "clientcmd, 231, [itemid, rotation]",
            category: "canvas"
        },
        {
            id: 232,
            name: "canvasobj_remove",
            description: "Eliminar Objeto de Lienzo",
            params: ["itemid"],
            usage: "clientcmd, 232, [itemid]",
            category: "canvas"
        },
        {
            id: 233,
            name: "canvasobj_getobjects",
            description: "Obtener Objetos de Lienzo",
            params: [],
            usage: "clientcmd, 233",
            category: "canvas"
        },
        {
            id: 234,
            name: "canvasobj_changeattr",
            description: "Cambiar Atributo de Objeto en Lienzo",
            params: ["itemid", "target", "value"],
            usage: "clientcmd, 234, [itemid, target, value]",
            category: "canvas"
        },
        {
            id: 301,
            name: "customvoting_setvote",
            description: "Emitir Voto Personalizado",
            params: ["value"],
            usage: "clientcmd, 301, [value]",
            category: "voting"
        },
        {
            id: 901,
            name: "getfpid",
            description: "Obtener FPID",
            params: ["value"],
            usage: "clientcmd, 901, [value]",
            category: "system"
        },
        {
            id: 330,
            name: "snapchatmessage",
            description: "Enviar Mensaje Temporal",
            params: ["playerid", "value"],
            usage: "clientcmd, 330, [playerid, value]",
            category: "communication"
        },
        {
            id: 2,
            name: "settoken",
            description: "Otorgar Emblema/Token",
            params: ["playerid", "tokenid"],
            usage: "clientcmd, 2, [playerid, tokenid]",
            category: "social"
        }
    ];

    const DRAWARIA_API_FUNCTIONS = [
        "chatmsg", "passturn", "pgdrawvote", "pgswtichroom", "playerafk", 
        "playerrated", "sendgesture", "sendvote", "sendvotekick", "wordselected",
        "activateitem", "buyitem", "canvasobj_changeattr", "canvasobj_getobjects",
        "canvasobj_remove", "canvasobj_setposition", "canvasobj_setrotation",
        "customvoting_setvote", "getfpid", "getinventory", "getspawnsstate",
        "moveavatar", "setavatarprop", "setstatusflag", "settoken",
        "snapchatmessage", "spawnavatar", "startrollbackvoting", 
        "trackforwardvoting", "votetrack", "startplay", "requestcanvas",
        "respondcanvas", "galleryupload", "warning", "mute", "hide",
        "report", "line", "erase", "flood", "undo", "clear"
    ];

    const DRAWARIA_LINKS = [
        'https://discord.gg/XeVKWWs', 'mailto:[email protected]', 
        'https://drawaria.online/', '/avatar/builder/', '/scoreboards/', 
        '/gallery/', '/auth/google', '/auth/facebook', '/auth/discord', 
        '/auth/reddit', '/auth/vk', '/login', 
        'https://play.google.com/store/apps/details?id=com.gmail.at.ixevixe.cordovaapp',
        'https://discord.gg/team-megu', 'https://erisly.com/', 
        'https://www.youtube.com/watch?v=-dWnF9kVELE', '/event',
        'https://twitter.com/intent/tweet?text=Amazing%20online%20drawing%20game&url=https%3A%2F%2Fdrawaria.online&hashtags=drawaria',
        'https://igroutka.net/', 'http://www.obfog.com/', 
        'https://iogames.live/aquapark-io/', 'https://www.crazygames.com/c/io',
        'https://www.silvergames.com/en/t/drawing', 'http://www.era-igr.ru',
        'http://brogames.space', 'https://gamasexual.com/', 
        'https://www.miniplay.com/', 'https://multoigri.ru',
        'https://gaminguides.com', 'https://moar.games', 
        'https://www.freegames.com/', 'https://iogames.space',
        'http://io-games.zone', '/links', '/privacy', '/terms',
        'https://drawaria.online/rules', '/palettes/'
    ];

    const ALL_DATA = {
        commands: DRAWARIA_COMMANDS,
        functions: DRAWARIA_API_FUNCTIONS,
        links: DRAWARIA_LINKS
    };

    // FUNCIONES DE UTILIDAD
    window.LIBRERIA_DATOS = {
        /**
         * Obtiene todos los datos disponibles
         * @returns {Object} Objeto con todos los datos organizados
         */
        getData: function() {
            try {
                return JSON.parse(JSON.stringify(ALL_DATA));
            } catch (error) {
                console.error('Error al obtener datos:', error);
                return null;
            }
        },

        /**
         * Filtra y busca en los datos usando una función de filtro o regex
         * @param {Function|RegExp|string} filter - Función de filtro, regex o string de búsqueda
         * @param {string} dataType - Tipo de datos: 'commands', 'functions', 'links', 'all'
         * @returns {Array} Array filtrado
         */
        parseData: function(filter, dataType = 'all') {
            try {
                let targetData = [];
                
                if (dataType === 'all') {
                    targetData = [...DRAWARIA_COMMANDS, ...DRAWARIA_API_FUNCTIONS, ...DRAWARIA_LINKS];
                } else if (dataType === 'commands') {
                    targetData = DRAWARIA_COMMANDS;
                } else if (dataType === 'functions') {
                    targetData = DRAWARIA_API_FUNCTIONS;
                } else if (dataType === 'links') {
                    targetData = DRAWARIA_LINKS;
                }

                if (typeof filter === 'function') {
                    return targetData.filter(filter);
                } else if (filter instanceof RegExp) {
                    return targetData.filter(item => {
                        const searchString = typeof item === 'string' ? item : JSON.stringify(item);
                        return filter.test(searchString);
                    });
                } else if (typeof filter === 'string') {
                    return targetData.filter(item => {
                        const searchString = typeof item === 'string' ? item : JSON.stringify(item);
                        return searchString.toLowerCase().includes(filter.toLowerCase());
                    });
                }
                
                return targetData;
            } catch (error) {
                console.error('Error al filtrar datos:', error);
                return [];
            }
        },

        /**
         * Obtiene un elemento aleatorio de los datos
         * @param {string} dataType - Tipo de datos: 'commands', 'functions', 'links'
         * @returns {*} Elemento aleatorio
         */
        getRandomItem: function(dataType = 'commands') {
            try {
                let targetData = [];
                
                switch(dataType) {
                    case 'commands':
                        targetData = DRAWARIA_COMMANDS;
                        break;
                    case 'functions':
                        targetData = DRAWARIA_API_FUNCTIONS;
                        break;
                    case 'links':
                        targetData = DRAWARIA_LINKS;
                        break;
                    default:
                        targetData = DRAWARIA_COMMANDS;
                }

                if (targetData.length === 0) return null;
                
                const randomIndex = Math.floor(Math.random() * targetData.length);
                return targetData[randomIndex];
            } catch (error) {
                console.error('Error al obtener elemento aleatorio:', error);
                return null;
            }
        },

        /**
         * Busca un comando por su ID
         * @param {number} id - ID del comando a buscar
         * @returns {Object|null} Comando encontrado o null
         */
        findById: function(id) {
            try {
                const command = DRAWARIA_COMMANDS.find(cmd => cmd.id === parseInt(id));
                return command || null;
            } catch (error) {
                console.error('Error al buscar por ID:', error);
                return null;
            }
        },

        /**
         * Busca comandos por categoría
         * @param {string} category - Categoría a buscar
         * @returns {Array} Array de comandos de la categoría
         */
        findByCategory: function(category) {
            try {
                return DRAWARIA_COMMANDS.filter(cmd => 
                    cmd.category && cmd.category.toLowerCase() === category.toLowerCase()
                );
            } catch (error) {
                console.error('Error al buscar por categoría:', error);
                return [];
            }
        },

        /**
         * Obtiene estadísticas de los datos
         * @returns {Object} Objeto con estadísticas
         */
        getStats: function() {
            try {
                return {
                    totalCommands: DRAWARIA_COMMANDS.length,
                    totalFunctions: DRAWARIA_API_FUNCTIONS.length,
                    totalLinks: DRAWARIA_LINKS.length,
                    categories: [...new Set(DRAWARIA_COMMANDS.map(cmd => cmd.category))],
                    commandsByCategory: DRAWARIA_COMMANDS.reduce((acc, cmd) => {
                        if (cmd.category) {
                            acc[cmd.category] = (acc[cmd.category] || 0) + 1;
                        }
                        return acc;
                    }, {})
                };
            } catch (error) {
                console.error('Error al obtener estadísticas:', error);
                return {};
            }
        }
    };
    
    // Hacer datos disponibles globalmente
    window.DATA_ARRAY = ALL_DATA;
    window.DRAWARIA_COMMANDS = DRAWARIA_COMMANDS;
    window.DRAWARIA_API_FUNCTIONS = DRAWARIA_API_FUNCTIONS;
    window.DRAWARIA_LINKS = DRAWARIA_LINKS;
    
    // Validación de datos
    try {
        JSON.stringify(ALL_DATA);
        console.log('📚 Biblioteca de datos de Drawaria cargada exitosamente:', {
            comandos: DRAWARIA_COMMANDS.length,
            funciones: DRAWARIA_API_FUNCTIONS.length,
            enlaces: DRAWARIA_LINKS.length
        });
    } catch (error) {
        console.error('❌ Error al validar datos de la biblioteca:', error);
    }
    
})();