feat: Implementar nuevas mejoras en Amayo Bot Editor
- Agregar selector de directorio multi-OS con validación y persistencia - Implementar preview en tiempo real del código generado en CommandCreator y EventCreator - Activar TypeScript strict mode y añadir snippets nativos para mejorar la experiencia de desarrollo - Crear documentación detallada sobre las nuevas funcionalidades y cambios realizados - Actualizar README con instrucciones de uso y solución de problemas comunes - Modificar archivos clave para integrar las nuevas características y mejorar la usabilidad
This commit is contained in:
598
README/DOCUMENTACION_COMPLETA.md
Normal file
598
README/DOCUMENTACION_COMPLETA.md
Normal file
@@ -0,0 +1,598 @@
|
||||
# 🚀 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 `<script setup>`
|
||||
- **TypeScript** strict mode
|
||||
- **Reactive state** con `ref()`
|
||||
- **Lifecycle hooks** (onMounted, onUnmounted)
|
||||
- **Props & Emits** tipados
|
||||
|
||||
## 🔍 Detección de Comandos y Eventos
|
||||
|
||||
### Cómo Detecta los Comandos
|
||||
|
||||
1. Escanea recursivamente `src/commands/messages/**` y `src/commands/splashcmd/**`
|
||||
2. Busca archivos `.ts`
|
||||
3. Lee el contenido
|
||||
4. Detecta el tipo buscando `type: 'message'` o `type: 'slash'`
|
||||
5. Extrae metadatos del código
|
||||
|
||||
### Cómo Detecta los Eventos
|
||||
|
||||
1. **Eventos Estándar**:
|
||||
- Busca archivos `.ts` directamente en `src/events/`
|
||||
- Excluye carpeta `extras/`
|
||||
- Cada archivo es un evento estándar
|
||||
|
||||
2. **Eventos Custom**:
|
||||
- Busca archivos `.ts` en `src/events/extras/`
|
||||
- Detecta funciones exportadas
|
||||
- Marca como evento custom
|
||||
|
||||
## 🎨 Personalización
|
||||
|
||||
### Cambiar Colores
|
||||
|
||||
Edita las variables CSS en `App.vue`:
|
||||
|
||||
```css
|
||||
--bg-primary: #1e1e1e;
|
||||
--bg-secondary: #252526;
|
||||
--border-color: #3e3e42;
|
||||
--text-primary: #cccccc;
|
||||
--accent-color: #0e639c;
|
||||
```
|
||||
|
||||
### Agregar Más Snippets
|
||||
|
||||
En `CommandCreator.vue` o `EventCreator.vue`, edita el objeto `snippets`:
|
||||
|
||||
```typescript
|
||||
const snippets = {
|
||||
mySnippet: `// Tu código aquí`,
|
||||
};
|
||||
```
|
||||
|
||||
### Agregar Más Eventos de Discord
|
||||
|
||||
En `EventCreator.vue`, agrega opciones al select:
|
||||
|
||||
```html
|
||||
<option value="voiceStateUpdate">voiceStateUpdate</option>
|
||||
```
|
||||
|
||||
## 🐛 Solución de Problemas
|
||||
|
||||
### "No se encontró el directorio de comandos"
|
||||
|
||||
**Causa**: La aplicación no encuentra `src/commands/`
|
||||
|
||||
**Solución**:
|
||||
1. Verifica que ejecutas desde `AEditor/`
|
||||
2. Confirma que existe `../src/commands/` relativo a AEditor
|
||||
3. Revisa la ruta en `get_project_root()` en `lib.rs`
|
||||
|
||||
### Monaco Editor no carga
|
||||
|
||||
**Causa**: Dependencias no instaladas
|
||||
|
||||
**Solución**:
|
||||
```bash
|
||||
npm install monaco-editor @vueuse/core
|
||||
```
|
||||
|
||||
### Errores de compilación de Rust
|
||||
|
||||
**Causa**: Rust no está instalado o desactualizado
|
||||
|
||||
**Solución**:
|
||||
```bash
|
||||
# Instalar Rust
|
||||
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
|
||||
|
||||
# Actualizar Rust
|
||||
rustup update
|
||||
```
|
||||
|
||||
### No se guardan los archivos
|
||||
|
||||
**Causa**: Permisos de escritura
|
||||
|
||||
**Solución**:
|
||||
1. Ejecuta la app con permisos adecuados
|
||||
2. Verifica que no hay archivos bloqueados
|
||||
3. Confirma que las rutas son correctas
|
||||
|
||||
## 📚 Recursos Adicionales
|
||||
|
||||
### Discord.js
|
||||
- [Documentación oficial](https://discord.js.org/)
|
||||
- [Guía de Discord.js](https://discordjs.guide/)
|
||||
|
||||
### Tauri
|
||||
- [Documentación de Tauri](https://tauri.app/)
|
||||
- [API Reference](https://tauri.app/reference/)
|
||||
|
||||
### Monaco Editor
|
||||
- [Monaco Editor API](https://microsoft.github.io/monaco-editor/docs.html)
|
||||
- [Playground](https://microsoft.github.io/monaco-editor/playground.html)
|
||||
|
||||
### Vue 3
|
||||
- [Documentación oficial](https://vuejs.org/)
|
||||
- [Composition API](https://vuejs.org/guide/extras/composition-api-faq.html)
|
||||
|
||||
## 🤝 Próximas Mejoras Sugeridas
|
||||
|
||||
1. **Validación de código**:
|
||||
- Lint en tiempo real
|
||||
- Verificación de sintaxis antes de guardar
|
||||
|
||||
2. **Git Integration**:
|
||||
- Ver cambios
|
||||
- Commit desde la app
|
||||
- Historial de versiones
|
||||
|
||||
3. **Testing**:
|
||||
- Ejecutar comandos en sandbox
|
||||
- Ver output en tiempo real
|
||||
|
||||
4. **Temas personalizables**:
|
||||
- Light theme
|
||||
- Más variantes de dark theme
|
||||
|
||||
5. **Multi-tab**:
|
||||
- Abrir múltiples archivos
|
||||
- Tabs estilo VS Code
|
||||
|
||||
6. **Search & Replace**:
|
||||
- Buscar en todos los archivos
|
||||
- Reemplazar en batch
|
||||
|
||||
7. **Terminal integrado**:
|
||||
- Ejecutar npm/node commands
|
||||
- Ver logs del bot
|
||||
|
||||
8. **Autocompletado mejorado**:
|
||||
- Sugerencias de Discord.js
|
||||
- IntelliSense de tu bot (client, prisma, etc.)
|
||||
|
||||
## 📄 Licencia
|
||||
|
||||
Este proyecto forma parte de Amayo Bot. Consulta la licencia del proyecto principal.
|
||||
|
||||
---
|
||||
|
||||
## 🎉 ¡Listo para Usar!
|
||||
|
||||
Tu editor está completamente funcional con todas las características solicitadas:
|
||||
|
||||
✅ Creación de comandos con GUI + Editor
|
||||
✅ Creación de eventos con GUI + Editor
|
||||
✅ Detección de eventos extras customizados
|
||||
✅ Contador de comandos mensaje/slash
|
||||
✅ Contador de eventos estándar/custom
|
||||
✅ Editor Monaco con snippets
|
||||
✅ Interfaz estilo VS Code
|
||||
✅ Sistema de guardado completo
|
||||
|
||||
**¡Disfruta de tu nuevo editor visual para Amayo Bot! 🚀**
|
||||
Reference in New Issue
Block a user