# 🚀 Guía Completa - Amayo Bot Editor ## 📋 Resumen del Proyecto He creado una **aplicación desktop completa** con Tauri, TypeScript y Vue que funciona como un **editor estilo VS Code** específicamente diseñado para gestionar tu bot de Discord "Amayo". ## ✨ Funcionalidades Implementadas ### 1. ✅ Creación de Comandos via GUI La aplicación permite crear tanto **comandos de mensaje** (prefix-based) como **comandos slash** con una interfaz gráfica intuitiva: #### Características: - **Formulario visual** para metadatos: - Nombre del comando - Descripción - Tipo (message/slash) - Categoría - Cooldown - Aliases (para comandos de mensaje) - Uso/sintaxis - **Editor Monaco integrado** con: - Sintaxis highlighting para TypeScript - Autocompletado - Snippets predefinidos para Discord.js - Shortcuts de teclado (Ctrl+S) - **Sistema de rutas automático**: - Sugerencia inteligente de ruta basada en categoría y tipo - Guardado en las carpetas correctas del proyecto #### Tipos de Comandos Soportados: **Comandos de Mensaje:** ```typescript { name: "ping", type: 'message', description: "Comando de latencia", aliases: ["p", "latencia"], category: "Utilidad", cooldown: 5, usage: "!ping" } ``` **Comandos Slash:** ```typescript { name: "userinfo", type: 'slash', description: "Información del usuario", cooldown: 10 } ``` ### 2. ✅ Creación de Eventos via GUI Soporte completo para crear y editar eventos de Discord.js: #### Tipos de Eventos: **A) Eventos Estándar:** - ready - messageCreate - interactionCreate - guildCreate/guildDelete - guildMemberAdd/guildMemberRemove - messageDelete/messageUpdate - channelCreate/channelDelete - Y más... **B) Eventos Custom/Extras:** Los eventos extras son funciones que detecta la aplicación en `src/events/extras/`. Estos son ejecutados desde eventos principales (como `messageCreate`). Ejemplo detectado: `alliance.ts` - Función custom que maneja las alianzas del servidor. #### Características: - **Selector de eventos** de Discord.js - **Editor Monaco** con snippets específicos - **Detección automática** de eventos extras existentes - **Validación** de nombres y rutas ### 3. ✅ Editor de Código con Monaco El mismo editor usado en VS Code, con: - **Tema oscuro personalizado** estilo VS Code - **Autocompletado** de TypeScript - **Detección de cambios** con indicador visual - **Guardado rápido** con Ctrl+S - **Minimap** y números de línea - **Sintaxis highlighting** completo ### 4. ✅ Dashboard con Estadísticas Panel lateral que muestra en tiempo real: ``` 📝 Comandos Mensaje: X ⚡ Comandos Slash: Y 🎯 Eventos Estándar: Z ✨ Eventos Custom: W ━━━━━━━━━━━━━━━━━━ Total Comandos: X+Y Total Eventos: Z+W ``` La aplicación **escanea automáticamente** tu proyecto y cuenta: - Comandos por mensaje - Comandos slash - Eventos estándar (archivos .ts en `src/events/`) - Eventos custom (archivos en `src/events/extras/`) ### 5. ✅ Explorador de Archivos Navegación visual por todos los comandos y eventos: **Comandos:** - Icono 📝 para comandos de mensaje - Icono ⚡ para comandos slash - Organizado por categorías **Eventos:** - Icono 🎯 para eventos estándar - Icono ✨ para eventos custom - Lista alfabética ## 🏗️ Arquitectura de la Aplicación ### Frontend (Vue + TypeScript) ``` src/ ├── components/ │ ├── Sidebar.vue # Panel lateral con stats y navegación │ ├── MonacoEditor.vue # Editor de código principal │ ├── CommandCreator.vue # Creador de comandos │ └── EventCreator.vue # Creador de eventos ├── types/ │ └── bot.ts # Tipos TypeScript del bot ├── App.vue # Componente principal └── main.ts # Entry point ``` ### Backend (Rust + Tauri) ``` src-tauri/src/ └── lib.rs # Comandos Rust expuestos a Vue ``` #### Comandos Tauri Implementados: 1. **`get_project_root()`** - Obtiene la ruta raíz del proyecto Amayo - Navega desde AEditor hacia arriba un nivel 2. **`scan_commands(projectRoot: String)`** - Escanea recursivamente `src/commands/` - Detecta comandos de mensaje y slash - Retorna lista de archivos con metadatos 3. **`scan_events(projectRoot: String)`** - Escanea `src/events/` (eventos estándar) - Escanea `src/events/extras/` (eventos custom) - Diferencia entre ambos tipos 4. **`get_project_stats(projectRoot: String)`** - Analiza todos los archivos - Cuenta comandos por tipo - Cuenta eventos por tipo - Lee contenido para determinar tipo exacto 5. **`read_file_content(filePath: String)`** - Lee archivos .ts del proyecto - Permite edición en el editor 6. **`write_file_content(filePath: String, content: String)`** - Guarda archivos modificados - Crea directorios si no existen - Mantiene estructura del proyecto ## 🎨 Interfaz de Usuario ### Diseño Estilo VS Code La aplicación replica el look & feel de Visual Studio Code: **Colores:** - Background principal: `#1e1e1e` - Paneles: `#252526`, `#2d2d30` - Bordes: `#3e3e42` - Texto: `#cccccc`, `#ffffff` - Acentos: `#0e639c` (azul VS Code) - Success: `#4ec9b0` (verde teal) **Componentes:** - Sidebar fijo a la izquierda - Área principal responsive - Headers con acciones - Botones con hover effects - Scrollbars personalizados ### Pantalla de Bienvenida Cuando no hay archivo seleccionado: ``` 🤖 Amayo Bot Editor Editor estilo VS Code para tu bot de Discord [Estadísticas grandes] X Comandos Totales | Y Eventos Totales [➕ Crear Comando] [➕ Crear Evento] 💡 Tip: Selecciona un archivo del panel izquierdo ``` ## 📝 Flujo de Trabajo ### Crear un Comando Nuevo 1. Click en **"➕ Nuevo Comando"** 2. Se abre `CommandCreator.vue` 3. Completa el formulario: - Selecciona tipo (message/slash) - Ingresa nombre y descripción - Configura metadatos opcionales 4. Escribe código en Monaco Editor 5. Usa botón "📝 Insertar Snippet" si necesitas código común 6. Click en "➕ Crear Comando" 7. El archivo se guarda en la ruta correcta 8. Las estadísticas se actualizan automáticamente ### Editar un Comando Existente 1. Navega al comando en el sidebar 2. Click en el archivo 3. Se carga en `MonacoEditor.vue` 4. Edita el código 5. Guarda con Ctrl+S o botón "💾 Guardar" 6. Indicador "●" muestra cambios no guardados ### Crear un Evento Nuevo 1. Click en **"➕ Nuevo Evento"** 2. Se abre `EventCreator.vue` 3. Selecciona tipo (estándar/custom) 4. Si es estándar: elige el evento de Discord 5. Ingresa nombre de archivo 6. Escribe la lógica 7. Click en "➕ Crear Evento" 8. Se guarda en `src/events/` o `src/events/extras/` ### Editar un Evento Existente Similar a editar comandos, pero con eventos del sidebar. ## 🔧 Integración con el Bot ### Estructura de Comandos Generados **Comando de Mensaje:** ```typescript import type { Message } from "discord.js"; import type Amayo from "../../core/client"; export default { name: "ejemplo", description: "Comando de ejemplo", type: 'message' as const, category: "Utilidad", aliases: ["ej", "test"], cooldown: 5, async run(message: Message, args: string[], client: Amayo) { // Código generado aquí await message.reply("¡Ejemplo!"); } } ``` **Comando Slash:** ```typescript import type { ChatInputCommandInteraction } from "discord.js"; import type Amayo from "../../core/client"; export default { name: "ejemplo", description: "Comando slash de ejemplo", type: 'slash' as const, cooldown: 5, async run(interaction: ChatInputCommandInteraction, client: Amayo) { // Código generado aquí await interaction.reply({ content: "¡Ejemplo!", ephemeral: true }); } } ``` ### Estructura de Eventos Generados **Evento Estándar:** ```typescript import { bot } from "../main"; import { Events } from "discord.js"; import logger from "../core/lib/logger"; bot.on(Events.MessageCreate, async (message) => { if (message.author.bot) return; // Tu código aquí logger.info(`Mensaje de ${message.author.tag}`); }); ``` **Evento Custom:** ```typescript import { Message } from "discord.js"; import logger from "../../core/lib/logger"; export async function myCustomHandler(message: Message) { try { // Tu lógica custom } catch (error) { logger.error({ err: error }, "Error en handler custom"); } } ``` ## 📦 Snippets Disponibles ### Para Comandos de Mensaje: - **Basic Reply**: `await message.reply("respuesta");` - **Embed**: Estructura completa de embed - **Error Handling**: Try-catch con reply de error ### Para Comandos Slash: - **Basic Reply**: Con ephemeral - **Embed Reply**: Embed en interacción - **Defer Reply**: Para comandos que tardan ### Para Eventos: - **Logger**: Mensajes de log - **Try-Catch**: Error handling - **Message Checks**: Validaciones comunes - **Guild Checks**: Verificar guild - **Prisma**: Ejemplo de uso de base de datos ## 🚀 Instalación y Ejecución ### Requisitos Previos ```bash # Node.js 18+ node --version # Rust (para Tauri) rustc --version # npm o yarn npm --version ``` ### Instalación ```bash cd AEditor npm install ``` ### Desarrollo ```bash # Iniciar en modo desarrollo npm run dev # En otra terminal (si Tauri no inicia automáticamente) npm run tauri dev ``` ### Compilación ```bash # Compilar aplicación desktop npm run tauri build # El ejecutable estará en: # src-tauri/target/release/aeditor.exe (Windows) ``` ## 🎯 Características Técnicas ### Monaco Editor - **Versión**: Latest - **Lenguaje**: TypeScript configurado - **Tema**: Custom dark theme (basado en VS Code) - **Features**: - IntelliSense - Error checking - Auto-formatting - Multi-cursor - Find/Replace - Command palette ### Tauri - **Versión**: 2.x - **Características usadas**: - Invoke commands (comunicación Rust ↔ Vue) - File system access - Path manipulation - Recursive directory scanning ### Vue 3 - **Composition API** con `