Implement code structure updates and remove redundant code blocks

This commit is contained in:
2025-10-10 00:33:28 -05:00
parent a7597cff75
commit 96fe80de5f
5 changed files with 294 additions and 3964 deletions

422
README.MD
View File

@@ -1,170 +1,336 @@
# Amayo Bot — Guía de Comandos para Discord
# 🤖 Amayo Bot — Guía de Comandos para Discord
> Nota: Para crear y editar Items, Mobs, Áreas, Niveles y Ofertas con los editores interactivos, consulta la guía: [CREACION_DE_CONTENIDO.md](./CREACION_DE_CONTENIDO.md)
<div align="center">
Bienvenido/a. Aquí tienes una guía lista para pegar en tu servidor de Discord con todos los comandos disponibles y lo que hacen.
![Version](https://img.shields.io/badge/version-2.0-blueviolet?style=for-the-badge)
![Discord](https://img.shields.io/badge/Discord-Bot-5865F2?style=for-the-badge&logo=discord&logoColor=white)
![AI](https://img.shields.io/badge/AI-Gemini-4285F4?style=for-the-badge&logo=google&logoColor=white)
- Prefix por defecto: `!` (puede cambiarse con `!configuracion`)
- Ayuda en Discord: `!ayuda`, `!ayuda <comando>`, `!ayuda <categoría>`
- Algunos comandos requieren permisos de Administrador; están marcados.
**Tu asistente definitivo para Discord con IA integrada** ⚡
## Comandos por categoría
[![Prefix](https://img.shields.io/badge/Prefix-!-success?style=for-the-badge)](https://github.com)
### IA
- `!ai <mensaje>`
- Aliases: `!chat`, `!gemini`
- Qué hace: Chatea con la IA (Gemini) directamente desde Discord.
- Ejemplo: `!ai ¿Cómo funciona JavaScript?`
</div>
### Utilidad
- `!ayuda [comando|categoría]`
- Aliases: `!help`, `!comandos`, `!cmds`
- Qué hace: Muestra la lista de comandos y detalles por categoría. Si pasas un nombre de comando o categoría, filtra el resultado.
---
### Red
- `!ping`
- Aliases: `!latency`, `!pong`
- Qué hace: Verifica la latencia y que el bot esté respondiendo.
> 📝 **Nota importante:** Para crear y editar Items, Mobs, Áreas, Niveles y Ofertas con los editores interactivos, consulta la guía: [CREACION_DE_CONTENIDO.md](./CREACION_DE_CONTENIDO.md)
### Configuración (Admin)
- `!configuracion`
- Aliases: `!config`, `!ajustes`, `!settings`
- Qué hace: Abre el panel de configuración del servidor (por ejemplo, cambiar el prefix).
- Permisos: Requiere Administrador.
---
### Administración (Owner)
- `!admin-comandos`
- Aliases: `!cmdadmin`, `!synccommands`, `!comandos-admin`
- Qué hace: Panel del dueño para registrar/limpiar comandos slash y revisar memoria.
- Permisos: Solo propietario del bot.
## 📚 Tabla de Contenidos
### Alianzas (Gestión de bloques y canales) — Admin
Bloques (presentaciones/embeds avanzados con Display Components):
- `!crear-embed <nombre>`
- Aliases: `!embed-crear`, `!nuevo-embed`, `!blockcreatev2`
- Qué hace: Crea un bloque/embedded nuevo con editor interactivo.
- Permisos: Administrador.
- `!editar-embed <nombre>`
- Aliases: `!embed-editar`, `!modificar-embed`, `!blockeditv2`
- Qué hace: Edita un bloque/embedded existente con herramientas interactivas.
- Permisos: Administrador.
- `!lista-embeds`
- Aliases: `!embeds`, `!ver-embeds`, `!embedlist`
- Qué hace: Lista los bloques existentes con paginación y acciones rápidas.
- Permisos: Administrador.
- `!eliminar-embed`
- Aliases: `!embed-eliminar`, `!borrar-embed`, `!embeddelete`
- Qué hace: Panel interactivo para eliminar bloques de forma segura.
- Permisos: Administrador.
- [🧠 Inteligencia Artificial](#-inteligencia-artificial)
- [🛠️ Utilidad](#-utilidad)
- [📡 Red](#-red)
- [⚙️ Configuración](#-configuración)
- [👑 Administración](#-administración)
- [🤝 Alianzas](#-alianzas)
- [📦 Gestión de Bloques/Embeds](#-gestión-de-bloquesembeds)
- [📢 Canales de Alianza](#-canales-de-alianza)
- [🎨 Demostración](#-demostración)
- [⚡ Slash Commands](#-slash-commands)
- [💡 Consejos Rápidos](#-consejos-rápidos)
- [📋 Bloque para tu Servidor](#-bloque-para-tu-servidor)
Canales de alianza (puntos por enlaces válidos, etc.):
- `!canal-alianza`
- Aliases: `!alchannel`, `!channelally`
- Qué hace: Abre el centro de configuración para asignar un bloque a un canal de texto y activarlo.
- Permisos: Administrador.
- `!listar-canales-alianza`
- Aliases: `!listchannels-alliance`, `!listalchannel`, `!channelsally`, `!alliancechannels`
- Qué hace: Muestra los canales de alianza configurados con estado y estadísticas.
- Permisos: Administrador recomendado.
- `!eliminar-canal-alianza`
- Aliases: `!removechannel-alliance`, `!removealchannel`, `!delalchannel`
- Qué hace: Elimina la configuración de alianza de un canal seleccionado (mantiene historial).
- Permisos: Administrador.
---
Demostración/ejemplos:
- `!displaydemo`
- Aliases: `!ddemo`, `!componentsdemo`
- Qué hace: Demostración de Display Components con accesorios y acciones.
- Permisos: Administrador.
- `!test1`
- Qué hace: Mensaje de ejemplo de componentes/embeds (demo interna).
## 🧠 Inteligencia Artificial
### Slash commands
- `/ping`
- Qué hace: Responde con “pong!” (prueba rápida de slash).
### `!ai <mensaje>`
> **Aliases:** `!chat`, `!gemini`
## Consejos rápidos
- Puede requerir permisos de Administrador o ser solo del dueño.
- Asegúrate de usarlo en un canal de texto compatible.
- Escribe `!ayuda <comando>` para ver el uso correcto.
💬 Chatea con la IA (Gemini) directamente desde Discord. Pregunta lo que quieras, desde programación hasta consejos generales.
## Bloque listo para copiar y pegar en tu server
**Ejemplo:**
```
!ai ¿Cómo funciona JavaScript?
```
Copia todo este bloque y pégalo en tu canal de información o bienvenida.
---
## 🛠️ Utilidad
### `!ayuda [comando|categoría]`
> **Aliases:** `!help`, `!comandos`, `!cmds`
📚 Muestra la lista completa de comandos y detalles por categoría. Puedes filtrar por comando específico o categoría.
**Ejemplos:**
```
!ayuda
!ayuda ai
!ayuda Alianzas
```
---
## 📡 Red
### `!ping`
> **Aliases:** `!latency`, `!pong`
🏓 Verifica la latencia del bot y confirma que está respondiendo correctamente.
---
## ⚙️ Configuración
> 🔒 **Requiere:** Permisos de Administrador
### `!configuracion`
> **Aliases:** `!config`, `!ajustes`, `!settings`
🔧 Abre el panel de configuración del servidor donde puedes personalizar el prefix y otras opciones.
---
## 👑 Administración
> 🔒 **Requiere:** Ser el propietario del bot
### `!admin-comandos`
> **Aliases:** `!cmdadmin`, `!synccommands`, `!comandos-admin`
🎛️ Panel exclusivo del dueño del bot para registrar/limpiar comandos slash y revisar el estado de memoria.
---
## 🤝 Alianzas
> 🔒 **Requiere:** Permisos de Administrador
Sistema completo de gestión de alianzas con bloques personalizados y canales configurables.
### 📦 Gestión de Bloques/Embeds
<table>
<tr>
<td width="30%"><b>Comando</b></td>
<td width="70%"><b>Descripción</b></td>
</tr>
<tr>
<td>
**`!crear-embed <nombre>`**
*Aliases:* `!embed-crear`, `!nuevo-embed`, `!blockcreatev2`
</td>
<td>
✨ Crea un bloque/embedded nuevo con editor interactivo avanzado y Display Components.
</td>
</tr>
<tr>
<td>
**`!editar-embed <nombre>`**
*Aliases:* `!embed-editar`, `!modificar-embed`, `!blockeditv2`
</td>
<td>
✏️ Edita un bloque/embedded existente con herramientas interactivas completas.
</td>
</tr>
<tr>
<td>
**`!lista-embeds`**
*Aliases:* `!embeds`, `!ver-embeds`, `!embedlist`
</td>
<td>
📋 Lista todos los bloques existentes con paginación y acciones rápidas.
</td>
</tr>
<tr>
<td>
**`!eliminar-embed`**
*Aliases:* `!embed-eliminar`, `!borrar-embed`, `!embeddelete`
</td>
<td>
🗑️ Panel interactivo para eliminar bloques de forma segura.
</td>
</tr>
</table>
### 📢 Canales de Alianza
<table>
<tr>
<td width="30%"><b>Comando</b></td>
<td width="70%"><b>Descripción</b></td>
</tr>
<tr>
<td>
**`!canal-alianza`**
*Aliases:* `!alchannel`, `!channelally`
</td>
<td>
🎯 Abre el centro de configuración para asignar un bloque a un canal de texto y activar el sistema de puntos por enlaces válidos.
</td>
</tr>
<tr>
<td>
**`!listar-canales-alianza`**
*Aliases:* `!listchannels-alliance`, `!listalchannel`, `!channelsally`, `!alliancechannels`
</td>
<td>
📊 Muestra todos los canales de alianza configurados con estado y estadísticas detalladas.
</td>
</tr>
<tr>
<td>
**`!eliminar-canal-alianza`**
*Aliases:* `!removechannel-alliance`, `!removealchannel`, `!delalchannel`
</td>
<td>
❌ Elimina la configuración de alianza de un canal seleccionado (mantiene el historial).
</td>
</tr>
</table>
### 🎨 Demostración
| Comando | Descripción |
|---------|-------------|
| **`!displaydemo`**<br>*Aliases:* `!ddemo`, `!componentsdemo` | 🎪 Demostración completa de Display Components con todos los accesorios y acciones disponibles. |
| **`!test1`** | 🧪 Mensaje de ejemplo de componentes/embeds (demo interna para pruebas). |
---
## ⚡ Slash Commands
### `/ping`
🏓 Responde con "pong!" - Prueba rápida de comandos slash.
---
## 💡 Consejos Rápidos
<details>
<summary><b>¿Olvidaste el prefix?</b></summary>
Usa `@mencionar_al_bot ayuda` o prueba `!ayuda`
</details>
<details>
<summary><b>¿Un comando no funciona?</b></summary>
- ✅ Puede requerir permisos de Administrador o ser exclusivo del dueño
- ✅ Asegúrate de usarlo en un canal de texto compatible
- ✅ Escribe `!ayuda <comando>` para ver el uso correcto
</details>
<details>
<summary><b>¿Necesitas ayuda específica?</b></summary>
Usa `!ayuda <categoría>` para filtrar por tipo de comando
**Categorías disponibles:**
- `IA`
- `Utilidad`
- `Red`
- `Configuración`
- `Administración`
- `Alianzas`
</details>
---
## 📋 Bloque para tu Servidor
Copia este bloque y pégalo en tu canal de información o bienvenida:
```
## Sistema RPG (Beta)
El bot incluye un sistema RPG ligero con progreso persistente y combate simplificado.
### Conceptos Clave
- **HP Persistente:** Tu vida (HP) se mantiene entre actividades. Si llegas a 0 en combate, resurges automáticamente al 50% de tu máximo (regeneración de seguridad) y se incrementa `Veces Derrotado`.
- **Rachas de Victoria:** Cada 3 victorias consecutivas obtienes +1% de daño (hasta +30%). Al perder, la racha se reinicia.
- **Herramientas con Durabilidad por Instancia:** Las herramientas no apilables crean instancias independientes; cada uso consume durabilidad de una instancia. Al agotarse una instancia, desaparece solo esa (si quedan otras, se siguen usando). Cuando la última instancia se rompe, el ítem queda completamente agotado.
- **Origen de Herramienta:** El sistema selecciona herramienta en este orden: (1) la que pases directamente (argumento), (2) la equipada (slot apropiado), (3) la mejor del inventario. El comando mostrará su procedencia (`toolSource`).
- **Combate Simplificado:** Se simulan rondas contra mobs; se registra daño infligido/recibido, mobs derrotados y resultado (Victoria/Derrota).
- **Resumen Visual:** Corazones (❤/♡) y barra de durabilidad reflejan estado tras cada acción.
### Comandos RPG Principales
- `!mina [nivel] [toolKey]` — Minar (usa pico).
- `!pescar [nivel] [toolKey]` — Pescar (usa caña).
- `!pelear [nivel] [toolKey]` — Combatir (usa espada).
- `!combate-historial [n]` — Últimos combates resumidos.
- `!tool-breaks [n]` — Rupturas recientes de herramientas (memoria).
- (Opcional futuro) `!tool-info <toolKey>` — Ver instancias y durabilidad.
### Estadísticas (PlayerStats)
Se actualizan automáticamente:
- Actividades: `minesCompleted`, `fishingCompleted`, `fightsCompleted`.
- Combate: `mobsDefeated`, `damageDealt`, `damageTaken`, `timesDefeated`, `currentWinStreak`, `longestWinStreak`.
### Estructura de Resultados
Cada minijuego produce un `RunResult` con bloque `tool` (incluye `toolSource`, `brokenInstance`, `instancesRemaining`) y, si aplica, `combat` con:
- `playerStartHp`, `playerEndHp`, `outcome`, `damageDealt`, `damageTaken`, `mobsDefeated`.
### Próximas Mejoras Planeadas
- Tabla persistente de rupturas (`ToolBreakLog`).
- Definiciones avanzadas de mobs (stats dinámicos, efectos críticos, resistencias).
- Efectos de equipo: críticos, sangrado, bloqueo, robo de vida.
- Consumo de pociones en combate y estados alterados.
- Eventos programados (ataques globales de mobs) vía funciones externas (Appwrite / cron).
### Notas Técnicas
- HP y maxHp: `PlayerState` + bonificaciones de equipo.
- Racha: cálculo en `getEffectiveStats()` (1% cada 3 victorias, tope 30%).
- Durabilidad: lógica por instancia en `reduceToolDurability` (remueve instancia agotada).
- Combate: loop interno en servicio de minijuegos actualiza daño y resultado, persistiendo HP final.
- Logs: Rupturas se guardan en memoria (buffer circular) para inspección rápida.
> Esta sección está en evolución: puede cambiar estructura interna para soportar mobs declarativos y balance más profundo.
📌 Amayo Bot — Guía Rápida de Comandos
Prefix: ! (puedes cambiarlo con !configuracion)
IA
🧠 IA
• !ai <mensaje> — Chatea con la IA (aliases: !chat, !gemini)
Utilidad
🛠️ Utilidad
• !ayuda [comando|categoría] — Lista y detalles de comandos
Red
📡 Red
• !ping — Prueba de latencia
Configuración (Admin)
⚙️ Configuración (Admin)
• !configuracion — Panel de ajustes del servidor
Alianzas (Admin)
🤝 Alianzas (Admin)
📦 Bloques/Embeds:
• !crear-embed <nombre> — Crear bloque interactivo
• !editar-embed <nombre> — Editar bloque
• !lista-embeds — Ver bloques
• !eliminar-embed — Eliminar bloques
📢 Canales:
• !canal-alianza — Configurar canal
• !listar-canales-alianza — Ver configurados
• !eliminar-canal-alianza — Eliminar canal de la configuración
🎨 Demo:
• !displaydemo — Demo de componentes
Slash
Slash
• /ping — Pong!
Más ayuda: !ayuda | !ayuda <comando> | !ayuda <categoría>
```
---
<div align="center">
### ⚡ Desarrollado con 💜
**Amayo Bot © 2025**
Potenciado por Discord.js & Gemini AI
[![Discord.js](https://img.shields.io/badge/Discord.js-v14-5865F2?style=flat-square&logo=discord&logoColor=white)](https://discord.js.org)
[![Node.js](https://img.shields.io/badge/Node.js-v18+-339933?style=flat-square&logo=node.js&logoColor=white)](https://nodejs.org)
[![Gemini](https://img.shields.io/badge/Gemini-AI-4285F4?style=flat-square&logo=google&logoColor=white)](https://ai.google.dev)
</div>

View File

@@ -1,46 +0,0 @@
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Página no encontrada | Amayo Docs</title>
<link rel="stylesheet" href="./assets/css/styles.css" />
<style>
body {
display: flex;
align-items: center;
justify-content: center;
}
.error-card {
max-width: 32rem;
text-align: center;
}
.error-card h1 {
font-size: clamp(2.5rem, 7vw, 4rem);
margin-bottom: 0.5rem;
}
.error-card p {
margin-bottom: 1.5rem;
}
.error-card a {
display: inline-flex;
align-items: center;
gap: 0.5rem;
color: rgba(129, 140, 248, 0.95);
font-weight: 600;
text-decoration: none;
}
.error-card a::after {
content: '↻';
font-size: 1.2rem;
}
</style>
</head>
<body>
<div class="card error-card">
<h1>404</h1>
<p>No encontramos la página que buscabas.</p>
<a href="/">Regresar al índice</a>
</div>
</body>
</html>

File diff suppressed because it is too large Load Diff

View File

@@ -1,824 +0,0 @@
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Amayo Bot | Guía Completa para Usuarios</title>
<meta
name="description"
content="Guía completa de Amayo Bot para usuarios de Discord: comandos de juego, economía, misiones, logros y mucho más."
/>
<link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
<link
href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap"
rel="stylesheet"
/>
<script src="https://cdn.tailwindcss.com"></script>
<script>
tailwind.config = {
theme: {
extend: {
fontFamily: {
sans: ['Inter', 'ui-sans-serif', 'system-ui', 'Segoe UI', 'sans-serif'],
mono: [
'JetBrains Mono',
'ui-monospace',
'SFMono-Regular',
'SFMono',
'Menlo',
'Monaco',
'Consolas',
'Liberation Mono',
'Courier New',
'monospace'
]
},
boxShadow: {
glow: '0 40px 120px -45px rgba(99, 102, 241, 0.45)'
}
}
}
};
</script>
<link rel="stylesheet" href="./assets/css/styles.css" />
</head>
<body class="min-h-screen bg-gradient-to-b from-slate-950 via-slate-950 to-slate-900 text-slate-100 antialiased">
<div class="flex min-h-screen flex-col">
<header class="relative overflow-hidden">
<div class="pointer-events-none absolute inset-0">
<div class="absolute -top-32 left-1/2 h-96 w-96 -translate-x-1/2 rounded-full bg-indigo-600/40 blur-3xl"></div>
<div class="absolute top-16 -left-28 h-72 w-72 rounded-full bg-sky-500/25 blur-3xl"></div>
<div class="absolute bottom-0 right-0 h-80 w-80 translate-y-1/3 rounded-full bg-fuchsia-500/20 blur-3xl"></div>
</div>
<div class="relative mx-auto flex max-w-5xl flex-col items-center px-6 pb-20 pt-16 text-center lg:px-8">
<p class="inline-flex items-center gap-2 rounded-full border border-white/10 bg-white/5 px-4 py-1 text-xs font-semibold uppercase tracking-[0.35em] text-slate-200">
Amayo Bot • Guía Completa
</p>
<h1 class="mt-6 text-4xl font-bold text-white sm:text-5xl md:text-6xl">
Guía Completa de Amayo Bot
</h1>
<p class="mt-4 max-w-2xl text-base text-slate-200 sm:text-lg">
Aprende a usar todos los comandos y funcionalidades de Amayo Bot en tu servidor de Discord. Sistema de economía, minijuegos, misiones, logros, IA conversacional y mucho más.
</p>
<div class="mt-8 flex flex-wrap items-center justify-center gap-3">
<a
class="inline-flex items-center justify-center rounded-full bg-gradient-to-r from-indigo-500 to-fuchsia-500 px-6 py-3 text-sm font-semibold text-white shadow-xl shadow-indigo-500/30 transition hover:-translate-y-0.5 hover:shadow-indigo-500/40"
href="#primeros-pasos"
>
Comenzar
</a>
<button
class="inline-flex items-center justify-center rounded-full border border-white/10 bg-white/5 px-6 py-3 text-sm font-semibold text-slate-100 transition hover:border-indigo-400/70 hover:text-white"
id="toggle-nav"
>
Ver índice completo
</button>
</div>
<div class="mt-6 flex flex-wrap items-center justify-center gap-3 text-xs text-slate-300">
<span class="inline-flex items-center rounded-full border border-white/10 bg-white/5 px-3 py-1">
Versión 0.11.20
</span>
<span class="inline-flex items-center rounded-full border border-white/10 bg-white/5 px-3 py-1">
Actualizado: Enero 2025
</span>
<span class="inline-flex items-center rounded-full border border-white/10 bg-white/5 px-3 py-1">
Discord.js 15.0.0-dev
</span>
</div>
</div>
</header>
<div class="mx-auto flex w-full max-w-6xl flex-1 flex-col gap-10 px-6 pb-16 lg:flex-row lg:px-10">
<nav
id="toc"
class="hidden w-full max-w-xs rounded-3xl border border-white/10 bg-slate-900/80 p-6 text-left shadow-2xl shadow-indigo-500/20 backdrop-blur lg:sticky lg:top-24 lg:block lg:max-h-[calc(100vh-6rem)] lg:w-72 lg:overflow-y-auto"
>
<div class="text-xs font-semibold uppercase tracking-[0.3em] text-slate-400">
Índice de Contenidos
</div>
<ul class="mt-4 space-y-2 text-sm">
<li><a class="text-slate-200 transition hover:text-indigo-300" href="#primeros-pasos">🚀 Primeros Pasos</a></li>
<li><a class="text-slate-200 transition hover:text-indigo-300" href="#comandos-basicos">⚡ Comandos Básicos</a></li>
<li><a class="text-slate-200 transition hover:text-indigo-300" href="#sistema-juego">🎮 Sistema de Juego</a></li>
<li><a class="text-slate-200 transition hover:text-indigo-300" href="#minijuegos">🎯 Minijuegos y Actividades</a></li>
<li><a class="text-slate-200 transition hover:text-indigo-300" href="#inventario-equipo">🎒 Inventario y Equipo</a></li>
<li><a class="text-slate-200 transition hover:text-indigo-300" href="#economia">💰 Sistema de Economía</a></li>
<li><a class="text-slate-200 transition hover:text-indigo-300" href="#tienda">🛒 Tienda y Compras</a></li>
<li><a class="text-slate-200 transition hover:text-indigo-300" href="#crafteo">🔨 Crafteo y Creación</a></li>
<li><a class="text-slate-200 transition hover:text-indigo-300" href="#logros">🏆 Logros</a></li>
<li><a class="text-slate-200 transition hover:text-indigo-300" href="#misiones">📜 Misiones</a></li>
<li><a class="text-slate-200 transition hover:text-indigo-300" href="#racha-diaria">🔥 Racha Diaria</a></li>
<li><a class="text-slate-200 transition hover:text-indigo-300" href="#consumibles">🍖 Consumibles y Pociones</a></li>
<li><a class="text-slate-200 transition hover:text-indigo-300" href="#cofres">🎁 Cofres y Recompensas</a></li>
<li><a class="text-slate-200 transition hover:text-indigo-300" href="#encantamientos">✨ Encantamientos</a></li>
<li><a class="text-slate-200 transition hover:text-indigo-300" href="#fundicion">🔥 Fundición</a></li>
<li><a class="text-slate-200 transition hover:text-indigo-300" href="#ia">🤖 Inteligencia Artificial</a></li>
<li><a class="text-slate-200 transition hover:text-indigo-300" href="#recordatorios">⏰ Recordatorios</a></li>
<li><a class="text-slate-200 transition hover:text-indigo-300" href="#alianzas">🤝 Sistema de Alianzas</a></li>
<li><a class="text-slate-200 transition hover:text-indigo-300" href="#admin">⚙️ Administración (Admin)</a></li>
<li><a class="text-slate-200 transition hover:text-indigo-300" href="#configuracion">🔧 Configuración Servidor</a></li>
<li><a class="text-slate-200 transition hover:text-indigo-300" href="#estadisticas">📊 Estadísticas</a></li>
<li><a class="text-slate-200 transition hover:text-indigo-300" href="#tips">💡 Tips y Trucos</a></li>
<li><a class="text-slate-200 transition hover:text-indigo-300" href="#faq">❓ Preguntas Frecuentes</a></li>
</ul>
</nav>
<main class="flex-1">
<div class="mx-auto flex w-full max-w-3xl flex-col gap-8">
<!-- PRIMEROS PASOS -->
<section id="primeros-pasos" class="space-y-6 rounded-3xl border border-white/5 bg-slate-900/80 p-8 shadow-2xl shadow-indigo-500/10 backdrop-blur">
<h2 class="text-3xl font-semibold text-white">🚀 Primeros Pasos</h2>
<p class="text-slate-200">
¡Bienvenido a <strong class="text-white">Amayo Bot</strong>! Este bot transforma tu servidor de Discord en una experiencia de juego completa con economía, minijuegos, misiones y mucho más.
</p>
<div class="space-y-4 rounded-2xl border border-indigo-500/30 bg-indigo-500/10 p-5 text-slate-200">
<h3 class="text-lg font-semibold text-indigo-200">✨ ¿Qué puedes hacer con Amayo?</h3>
<ul class="list-disc space-y-2 pl-5 text-sm">
<li><strong class="text-white">Jugar Minijuegos:</strong> Mina recursos, pesca, pelea contra enemigos y cultiva en granjas</li>
<li><strong class="text-white">Economía Completa:</strong> Gana monedas, compra en la tienda, craftea items y gestiona tu inventario</li>
<li><strong class="text-white">Sistema de Progresión:</strong> Sube de nivel, completa misiones, desbloquea logros y mantén tu racha diaria</li>
<li><strong class="text-white">Personalización:</strong> Equipa armas, armaduras y capas para mejorar tus estadísticas</li>
<li><strong class="text-white">IA Conversacional:</strong> Chatea con Gemini AI directamente desde Discord</li>
<li><strong class="text-white">Sistema de Alianzas:</strong> Comparte enlaces de invitación y gana puntos para tu servidor</li>
</ul>
</div>
<div class="grid gap-6 md:grid-cols-2">
<div class="space-y-3 rounded-2xl border border-white/5 bg-slate-900/60 p-5">
<h3 class="text-lg font-semibold text-white">⚡ Prefix del Bot</h3>
<p class="text-sm text-slate-200">
El prefix por defecto es <code class="rounded bg-indigo-500/15 px-2 py-1 font-mono text-sm text-indigo-200">!</code>
</p>
<p class="text-xs text-slate-300 mt-2">
Los administradores pueden cambiarlo con <code class="rounded bg-indigo-500/15 px-1.5 py-0.5 font-mono text-xs text-indigo-200">!configuracion</code>
</p>
</div>
<div class="space-y-3 rounded-2xl border border-white/5 bg-slate-900/60 p-5">
<h3 class="text-lg font-semibold text-white">❓ Obtener Ayuda</h3>
<p class="text-sm text-slate-200">
Usa <code class="rounded bg-indigo-500/15 px-2 py-1 font-mono text-sm text-indigo-200">!ayuda</code> para ver todos los comandos disponibles
</p>
<p class="text-xs text-slate-300 mt-2">
También puedes usar <code class="rounded bg-indigo-500/15 px-1.5 py-0.5 font-mono text-xs text-indigo-200">!ayuda &lt;comando&gt;</code> para detalles específicos
</p>
</div>
</div>
</section>
<!-- COMANDOS BÁSICOS -->
<section id="comandos-basicos" class="space-y-6 rounded-3xl border border-white/5 bg-slate-900/80 p-8 shadow-2xl shadow-indigo-500/10 backdrop-blur">
<h2 class="text-3xl font-semibold text-white">⚡ Comandos Básicos</h2>
<p class="text-slate-200">
Estos son los comandos esenciales que necesitas conocer para empezar.
</p>
<div class="space-y-4">
<div class="rounded-2xl border border-white/5 bg-slate-900/60 p-5">
<h3 class="text-lg font-semibold text-white mb-3">📋 Información y Utilidad</h3>
<div class="space-y-3 text-sm">
<div class="flex flex-col gap-1">
<code class="rounded bg-indigo-500/15 px-2 py-1 font-mono text-indigo-200 w-fit">!ayuda [comando|categoría]</code>
<p class="text-slate-300 pl-2">Muestra la lista de comandos. También puedes usar <code class="text-xs">!help</code>, <code class="text-xs">!comandos</code> o <code class="text-xs">!cmds</code></p>
</div>
<div class="flex flex-col gap-1">
<code class="rounded bg-indigo-500/15 px-2 py-1 font-mono text-indigo-200 w-fit">!ping</code>
<p class="text-slate-300 pl-2">Verifica la latencia del bot. También: <code class="text-xs">!latency</code>, <code class="text-xs">!pong</code></p>
</div>
<div class="flex flex-col gap-1">
<code class="rounded bg-indigo-500/15 px-2 py-1 font-mono text-indigo-200 w-fit">!player [@usuario]</code>
<p class="text-slate-300 pl-2">Muestra tu perfil completo de jugador con estadísticas, equipo e inventario. También: <code class="text-xs">!perfil</code>, <code class="text-xs">!profile</code>, <code class="text-xs">!yo</code>, <code class="text-xs">!me</code></p>
</div>
</div>
</div>
</div>
</section>
<!-- SISTEMA DE JUEGO -->
<section id="sistema-juego" class="space-y-6 rounded-3xl border border-white/5 bg-slate-900/80 p-8 shadow-2xl shadow-indigo-500/10 backdrop-blur">
<h2 class="text-3xl font-semibold text-white">🎮 Sistema de Juego</h2>
<p class="text-slate-200">
El sistema de juego de Amayo incluye <strong class="text-white">HP (puntos de vida)</strong>, <strong class="text-white">estadísticas de combate</strong>, <strong class="text-white">niveles de progresión</strong> y más.
</p>
<div class="grid gap-6 md:grid-cols-2">
<div class="space-y-3 rounded-2xl border border-white/5 bg-slate-900/60 p-5">
<h3 class="text-lg font-semibold text-white">⚔️ Estadísticas de Combate</h3>
<ul class="list-disc space-y-1 pl-5 text-sm text-slate-200">
<li><strong class="text-white">HP (Vida):</strong> Tus puntos de vida actuales y máximos</li>
<li><strong class="text-white">ATK (Ataque):</strong> Daño que infliges a los enemigos</li>
<li><strong class="text-white">DEF (Defensa):</strong> Reduce el daño recibido</li>
<li><strong class="text-white">Bonos de Equipo:</strong> Las armas, armaduras y capas mejoran tus stats</li>
</ul>
</div>
<div class="space-y-3 rounded-2xl border border-white/5 bg-slate-900/60 p-5">
<h3 class="text-lg font-semibold text-white">📊 Ver tus Estadísticas</h3>
<div class="space-y-2 text-sm">
<div class="flex flex-col gap-1">
<code class="rounded bg-indigo-500/15 px-2 py-1 font-mono text-indigo-200 w-fit">!player</code>
<p class="text-slate-300">Vista general de tu perfil</p>
</div>
<div class="flex flex-col gap-1">
<code class="rounded bg-indigo-500/15 px-2 py-1 font-mono text-indigo-200 w-fit">!stats</code>
<p class="text-slate-300">Estadísticas detalladas de todas tus actividades</p>
</div>
</div>
</div>
</div>
<div class="rounded-2xl border border-amber-500/30 bg-amber-500/10 p-5 text-sm text-amber-100">
<strong class="block text-base font-semibold text-amber-200 mb-2">💡 Consejo:</strong>
<p>Equipa mejores armas y armaduras para aumentar tus estadísticas y tener más éxito en los minijuegos de combate.</p>
</div>
</section>
<!-- MINIJUEGOS -->
<section id="minijuegos" class="space-y-6 rounded-3xl border border-white/5 bg-slate-900/80 p-8 shadow-2xl shadow-indigo-500/10 backdrop-blur">
<h2 class="text-3xl font-semibold text-white">🎯 Minijuegos y Actividades</h2>
<p class="text-slate-200">
Los minijuegos son la forma principal de ganar recursos, monedas y experiencia. Cada uno tiene su propio estilo y recompensas.
</p>
<div class="space-y-6">
<!-- MINAR -->
<div class="rounded-2xl border border-orange-500/30 bg-orange-500/5 p-5">
<h3 class="text-lg font-semibold text-orange-200 mb-3">⛏️ Minar (Mining)</h3>
<div class="space-y-3 text-sm text-slate-200">
<p>Ve a la mina y extrae recursos minerales valiosos. Necesitas un pico para minar.</p>
<div class="bg-slate-900/50 p-3 rounded-lg">
<code class="text-indigo-200">!mina [nivel] [herramienta] [area:clave]</code>
<p class="text-xs text-slate-400 mt-1">Aliases: <code class="text-xs">!minar</code></p>
</div>
<div class="space-y-1 text-xs">
<p><strong class="text-white">Ejemplos:</strong></p>
<p class="pl-3">• <code class="bg-slate-800 px-1.5 py-0.5 rounded">!mina</code> — Mina en el nivel más alto desbloqueado</p>
<p class="pl-3">• <code class="bg-slate-800 px-1.5 py-0.5 rounded">!mina 2</code> — Mina en el nivel 2</p>
<p class="pl-3">• <code class="bg-slate-800 px-1.5 py-0.5 rounded">!mina 1 iron_pickaxe</code> — Usa un pico específico</p>
</div>
<div class="border-t border-white/10 pt-3 mt-3">
<p class="font-semibold text-white mb-1">Recompensas típicas:</p>
<p class="text-slate-300">Minerales (hierro, oro, diamantes), gemas, monedas</p>
</div>
</div>
</div>
<!-- PESCAR -->
<div class="rounded-2xl border border-cyan-500/30 bg-cyan-500/5 p-5">
<h3 class="text-lg font-semibold text-cyan-200 mb-3">🎣 Pescar (Fishing)</h3>
<div class="space-y-3 text-sm text-slate-200">
<p>Lanza tu caña en la laguna y captura peces y tesoros acuáticos. Necesitas una caña de pescar.</p>
<div class="bg-slate-900/50 p-3 rounded-lg">
<code class="text-indigo-200">!pescar [nivel] [herramienta] [area:clave]</code>
<p class="text-xs text-slate-400 mt-1">Aliases: <code class="text-xs">!fish</code></p>
</div>
<div class="space-y-1 text-xs">
<p><strong class="text-white">Ejemplos:</strong></p>
<p class="pl-3">• <code class="bg-slate-800 px-1.5 py-0.5 rounded">!pescar</code> — Pesca automáticamente</p>
<p class="pl-3">• <code class="bg-slate-800 px-1.5 py-0.5 rounded">!pescar 3</code> — Pesca en nivel 3</p>
</div>
<div class="border-t border-white/10 pt-3 mt-3">
<p class="font-semibold text-white mb-1">Recompensas típicas:</p>
<p class="text-slate-300">Peces, perlas, tesoros, monedas</p>
</div>
</div>
</div>
<!-- PELEAR -->
<div class="rounded-2xl border border-red-500/30 bg-red-500/5 p-5">
<h3 class="text-lg font-semibold text-red-200 mb-3">⚔️ Pelear (Combat)</h3>
<div class="space-y-3 text-sm text-slate-200">
<p>Entra a la arena y enfrenta enemigos peligrosos. Las armas mejoran tu daño.</p>
<div class="bg-slate-900/50 p-3 rounded-lg">
<code class="text-indigo-200">!pelear [nivel] [arma] [area:clave]</code>
<p class="text-xs text-slate-400 mt-1">Aliases: <code class="text-xs">!fight</code>, <code class="text-xs">!arena</code></p>
</div>
<div class="space-y-1 text-xs">
<p><strong class="text-white">Ejemplos:</strong></p>
<p class="pl-3">• <code class="bg-slate-800 px-1.5 py-0.5 rounded">!pelear</code> — Combate automático</p>
<p class="pl-3">• <code class="bg-slate-800 px-1.5 py-0.5 rounded">!pelear 1 iron_sword</code> — Usa espada de hierro</p>
</div>
<div class="border-t border-white/10 pt-3 mt-3">
<p class="font-semibold text-white mb-1">Recompensas típicas:</p>
<p class="text-slate-300">Experiencia, botines de enemigos, armaduras, armas, monedas</p>
</div>
</div>
</div>
<!-- PLANTAR -->
<div class="rounded-2xl border border-green-500/30 bg-green-500/5 p-5">
<h3 class="text-lg font-semibold text-green-200 mb-3">🌾 Plantar/Cultivar (Farming)</h3>
<div class="space-y-3 text-sm text-slate-200">
<p>Cultiva plantas y cosecha alimentos en tu granja. Usa una azada para mejores resultados.</p>
<div class="bg-slate-900/50 p-3 rounded-lg">
<code class="text-indigo-200">!plantar [nivel] [herramienta]</code>
<p class="text-xs text-slate-400 mt-1">Aliases: <code class="text-xs">!farm</code></p>
</div>
<div class="border-t border-white/10 pt-3 mt-3">
<p class="font-semibold text-white mb-1">Recompensas típicas:</p>
<p class="text-slate-300">Vegetales, frutas, semillas, ingredientes de cocina</p>
</div>
</div>
</div>
</div>
<div class="rounded-2xl border border-sky-500/30 bg-sky-500/10 p-5 text-sm text-sky-100">
<strong class="block text-base font-semibold text-sky-200 mb-2">⏰ Cooldowns:</strong>
<p>Cada minijuego tiene un tiempo de espera (cooldown) entre usos. Usa <code class="rounded bg-sky-500/20 px-1.5 py-0.5 font-mono text-xs">!cooldowns</code> para ver tus tiempos activos.</p>
</div>
</section>
<p class="text-slate-200">
Administra todo el inventario del juego. Usa <code class="rounded bg-indigo-500/15 px-1.5 py-0.5 font-mono text-xs text-indigo-200">!item-crear</code>
para abrir el editor interactivo y completa cada pestaña antes de guardar.
</p>
<div class="grid gap-6 md:grid-cols-2">
<div class="space-y-3 rounded-2xl border border-white/5 bg-slate-900/60 p-5">
<h3 class="text-lg font-semibold text-white">Comandos clave</h3>
<ul class="list-disc space-y-1 pl-5 text-sm text-slate-200">
<li><code class="rounded bg-indigo-500/15 px-1 py-0.5 font-mono text-xs text-indigo-200">!item-crear &lt;key&gt;</code> — Crear un item nuevo.</li>
<li><code class="rounded bg-indigo-500/15 px-1 py-0.5 font-mono text-xs text-indigo-200">!item-editar &lt;key&gt;</code> — Editar un item existente.</li>
<li><code class="rounded bg-indigo-500/15 px-1 py-0.5 font-mono text-xs text-indigo-200">!items-lista [página]</code> — Ver listado paginado.</li>
<li><code class="rounded bg-indigo-500/15 px-1 py-0.5 font-mono text-xs text-indigo-200">!item-ver &lt;key&gt;</code> — Ver detalles completos.</li>
<li><code class="rounded bg-indigo-500/15 px-1 py-0.5 font-mono text-xs text-indigo-200">!item-eliminar &lt;key&gt;</code> — Eliminar un item.</li>
</ul>
</div>
<div class="space-y-3 rounded-2xl border border-white/5 bg-slate-900/60 p-5">
<h3 class="text-lg font-semibold text-white">Campos del modal Base</h3>
<ul class="list-disc space-y-1 pl-5 text-sm text-slate-200">
<li><strong class="text-white">Nombre:</strong> Texto visible para jugadores.</li>
<li><strong class="text-white">Descripción:</strong> Lore o efectos.</li>
<li><strong class="text-white">Categoría:</strong> Agrupa items (ej. <code class="rounded bg-indigo-500/15 px-1 py-0.5 font-mono text-xs text-indigo-200">weapons</code>).</li>
<li><strong class="text-white">Icon URL:</strong> Imagen opcional.</li>
<li><strong class="text-white">Stackable y Máx inventario:</strong> Usa <code class="rounded bg-indigo-500/15 px-1 py-0.5 font-mono text-xs text-indigo-200">true,10</code>,
<code class="rounded bg-indigo-500/15 px-1 py-0.5 font-mono text-xs text-indigo-200">false,1</code> o deja el límite vacío para infinito.
</li>
</ul>
</div>
</div>
<div class="space-y-4 rounded-2xl border border-white/5 bg-slate-900/60 p-5">
<h3 class="text-lg font-semibold text-white">Props disponibles</h3>
<div class="grid gap-4 md:grid-cols-2">
<details open class="space-y-3 rounded-2xl border border-indigo-500/25 bg-indigo-500/5 p-4 text-slate-200">
<summary class="cursor-pointer text-base font-semibold text-indigo-200">Herramientas (<code class="font-mono text-xs">tool</code>)</summary>
<pre class="overflow-x-auto rounded-xl border border-indigo-500/30 bg-slate-900/70 p-4 text-xs text-indigo-100"><code>{
"tool": { "type": "pickaxe|rod|sword|bow|halberd|net", "tier": 1 }
}</code></pre>
<p class="text-sm">Define el tipo de actividad que habilita tu item. El campo <code class="rounded bg-indigo-500/15 px-1 py-0.5 font-mono text-xs text-indigo-200">tier</code> controla los requisitos mínimos.</p>
</details>
<details class="space-y-3 rounded-2xl border border-indigo-500/25 bg-indigo-500/5 p-4 text-slate-200">
<summary class="cursor-pointer text-base font-semibold text-indigo-200">Durabilidad (<code class="font-mono text-xs">breakable</code>)</summary>
<pre class="overflow-x-auto rounded-xl border border-indigo-500/30 bg-slate-900/70 p-4 text-xs text-indigo-100"><code>{
"breakable": {
"enabled": true,
"maxDurability": 100,
"durabilityPerUse": 1
}
}</code></pre>
<p class="text-sm">Sólo funciona con items <em>no apilables</em>. Ajusta la pérdida de durabilidad por uso para balancear actividades.</p>
</details>
<details class="space-y-3 rounded-2xl border border-indigo-500/25 bg-indigo-500/5 p-4 text-slate-200">
<summary class="cursor-pointer text-base font-semibold text-indigo-200">Cofres (<code class="font-mono text-xs">chest</code>)</summary>
<pre class="overflow-x-auto rounded-xl border border-indigo-500/30 bg-slate-900/70 p-4 text-xs text-indigo-100"><code>{
"chest": {
"enabled": true,
"rewards": [ ... ],
"consumeOnOpen": true
}
}</code></pre>
<p class="text-sm">Permite definir loot tables internas, recompensas de monedas, items o roles.</p>
</details>
<details class="space-y-3 rounded-2xl border border-indigo-500/25 bg-indigo-500/5 p-4 text-slate-200">
<summary class="cursor-pointer text-base font-semibold text-indigo-200">Comida y pociones (<code class="font-mono text-xs">food</code>)</summary>
<pre class="overflow-x-auto rounded-xl border border-indigo-500/30 bg-slate-900/70 p-4 text-xs text-indigo-100"><code>{
"food": {
"healHp": 50,
"healPercent": 25,
"cooldownSeconds": 60
}
}</code></pre>
<p class="text-sm">Útil para pociones curativas o consumibles con cooldown.</p>
</details>
<details class="space-y-3 rounded-2xl border border-indigo-500/25 bg-indigo-500/5 p-4 text-slate-200">
<summary class="cursor-pointer text-base font-semibold text-indigo-200">Bonos de combate</summary>
<pre class="overflow-x-auto rounded-xl border border-indigo-500/30 bg-slate-900/70 p-4 text-xs text-indigo-100"><code>{
"damage": 10,
"defense": 5,
"maxHpBonus": 20
}</code></pre>
<p class="text-sm">Configura stats extra para armas, armaduras o capas.</p>
</details>
<details class="space-y-3 rounded-2xl border border-indigo-500/25 bg-indigo-500/5 p-4 text-slate-200">
<summary class="cursor-pointer text-base font-semibold text-indigo-200">Etiquetas y metadatos</summary>
<p class="text-sm">Usa el modal <em>Tags</em> para añadir etiquetas separadas por coma, como <code class="rounded bg-indigo-500/15 px-1 py-0.5 font-mono text-xs text-indigo-200">weapon,rare,crafteable</code>. Sirven para filtrar o aplicar reglas.</p>
</details>
</div>
</div>
</section>
<section id="mobs" class="space-y-6 rounded-3xl border border-white/5 bg-slate-900/80 p-8 shadow-2xl shadow-indigo-500/10 backdrop-blur">
<h2 class="text-3xl font-semibold text-white">Mobs (Enemigos)</h2>
<p class="text-slate-200">
Los enemigos definen los encuentros durante minijuegos y niveles de área. Se crean con
<code class="rounded bg-indigo-500/15 px-1.5 py-0.5 font-mono text-xs text-indigo-200">!mob-crear</code> y usan stats y tablas de drop en formato JSON.
</p>
<div class="grid gap-6 md:grid-cols-2">
<div class="space-y-3 rounded-2xl border border-white/5 bg-slate-900/60 p-5">
<h3 class="text-lg font-semibold text-white">Campos principales</h3>
<ul class="list-disc space-y-1 pl-5 text-sm text-slate-200">
<li><strong class="text-white">Base:</strong> Nombre y categoría opcional.</li>
<li><strong class="text-white">Stats:</strong> Define <code class="rounded bg-indigo-500/15 px-1 py-0.5 font-mono text-xs text-indigo-200">attack</code>,
<code class="rounded bg-indigo-500/15 px-1 py-0.5 font-mono text-xs text-indigo-200">hp</code>, <code class="rounded bg-indigo-500/15 px-1 py-0.5 font-mono text-xs text-indigo-200">defense</code>, <code class="rounded bg-indigo-500/15 px-1 py-0.5 font-mono text-xs text-indigo-200">xpReward</code>.</li>
<li><strong class="text-white">Drops:</strong> Incluye <code class="rounded bg-indigo-500/15 px-1 py-0.5 font-mono text-xs text-indigo-200">draws</code> y una tabla con premios ponderados.</li>
</ul>
</div>
<div class="space-y-3 rounded-2xl border border-white/5 bg-slate-900/60 p-5">
<h3 class="text-lg font-semibold text-white">Ejemplo de configuración</h3>
<pre class="overflow-x-auto rounded-xl border border-indigo-500/30 bg-slate-900/70 p-4 text-xs text-indigo-100"><code>{
"attack": 10,
"hp": 100,
"defense": 5,
"xpReward": 50
}</code></pre>
<pre class="overflow-x-auto rounded-xl border border-indigo-500/30 bg-slate-900/70 p-4 text-xs text-indigo-100"><code>{
"draws": 2,
"table": [
{ "type": "coins", "amount": 50, "weight": 10 },
{ "type": "item", "itemKey": "leather", "qty": 1, "weight": 5 }
]
}</code></pre>
</div>
</div>
<div class="rounded-2xl border border-sky-500/30 bg-sky-500/10 p-5 text-sm text-sky-200">
<strong class="block text-base font-semibold text-sky-100">Tip:</strong>
Usa <code class="rounded bg-indigo-500/15 px-1 py-0.5 font-mono text-xs text-indigo-200">!mobs-lista</code> para auditar stats rápidamente y
<code class="rounded bg-indigo-500/15 px-1 py-0.5 font-mono text-xs text-indigo-200">!mob-ver &lt;key&gt;</code> para revisar drops antes de activar un área.
</div>
</section>
<section id="areas" class="space-y-6 rounded-3xl border border-white/5 bg-slate-900/80 p-8 shadow-2xl shadow-indigo-500/10 backdrop-blur">
<h2 class="text-3xl font-semibold text-white">Áreas de juego (GameArea)</h2>
<p class="text-slate-200">
Las áreas definen dónde se desarrollan las actividades principales (minar, pescar, pelear, plantar). Cada área puede tener múltiples niveles configurables.
</p>
<div class="grid gap-6 md:grid-cols-2">
<div class="space-y-3 rounded-2xl border border-white/5 bg-slate-900/60 p-5">
<h3 class="text-lg font-semibold text-white">Modal Base</h3>
<ul class="list-disc space-y-1 pl-5 text-sm text-slate-200">
<li><strong class="text-white">Nombre:</strong> Ej. <em>Caverna de Hierro</em>.</li>
<li><strong class="text-white">Tipo:</strong> <code class="rounded bg-indigo-500/15 px-1 py-0.5 font-mono text-xs text-indigo-200">MINE</code>,
<code class="rounded bg-indigo-500/15 px-1 py-0.5 font-mono text-xs text-indigo-200">LAGOON</code>, <code class="rounded bg-indigo-500/15 px-1 py-0.5 font-mono text-xs text-indigo-200">FIGHT</code> o <code class="rounded bg-indigo-500/15 px-1 py-0.5 font-mono text-xs text-indigo-200">FARM</code>.
</li>
</ul>
</div>
<div class="space-y-3 rounded-2xl border border-white/5 bg-slate-900/60 p-5">
<h3 class="text-lg font-semibold text-white">Modal Config (JSON)</h3>
<pre class="overflow-x-auto rounded-xl border border-indigo-500/30 bg-slate-900/70 p-4 text-xs text-indigo-100"><code>{
"cooldownSeconds": 60,
"description": "Una mina profunda",
"icon": "⛏️"
}</code></pre>
<p class="text-sm text-slate-200">El ícono se mostrará en las tarjetas generadas por DisplayComponents.</p>
</div>
</div>
<div class="rounded-2xl border border-amber-500/30 bg-amber-500/10 p-5 text-sm text-amber-100">
<strong class="block text-base font-semibold text-amber-200">Recuerda:</strong>
Si eliminas un área con <code class="rounded bg-indigo-500/15 px-1 py-0.5 font-mono text-xs text-indigo-200">!area-eliminar</code>, revisa niveles asociados para evitar referencias rotas.
</div>
</section>
<section id="levels" class="space-y-6 rounded-3xl border border-white/5 bg-slate-900/80 p-8 shadow-2xl shadow-indigo-500/10 backdrop-blur">
<h2 class="text-3xl font-semibold text-white">Niveles de área (GameAreaLevel)</h2>
<p class="text-slate-200">
Cada nivel controla requisitos, mobs, recompensas y vigencia. Gestiona niveles con
<code class="rounded bg-indigo-500/15 px-1.5 py-0.5 font-mono text-xs text-indigo-200">!area-nivel &lt;areaKey&gt; &lt;level&gt;</code>.
</p>
<div class="grid gap-6 md:grid-cols-2">
<div class="space-y-3 rounded-2xl border border-white/5 bg-slate-900/60 p-5">
<h3 class="text-lg font-semibold text-white">Requisitos</h3>
<pre class="overflow-x-auto rounded-xl border border-indigo-500/30 bg-slate-900/70 p-4 text-xs text-indigo-100"><code>{
"tool": {
"required": true,
"toolType": "pickaxe",
"minTier": 2,
"allowedKeys": ["iron_pickaxe", "diamond_pickaxe"]
}
}</code></pre>
<p class="text-sm text-slate-200">Sirve para validar herramientas necesarias. Combínalo con los tiers definidos en los items.</p>
</div>
<div class="space-y-3 rounded-2xl border border-white/5 bg-slate-900/60 p-5">
<h3 class="text-lg font-semibold text-white">Recompensas</h3>
<pre class="overflow-x-auto rounded-xl border border-indigo-500/30 bg-slate-900/70 p-4 text-xs text-indigo-100"><code>{
"draws": 3,
"table": [
{ "type": "coins", "amount": 100, "weight": 10 },
{ "type": "item", "itemKey": "iron_ore", "qty": 2, "weight": 5 }
]
}</code></pre>
<p class="text-sm text-slate-200">Define múltiples extracciones de la tabla con pesos personalizados.</p>
</div>
</div>
<div class="grid gap-6 md:grid-cols-2">
<div class="space-y-3 rounded-2xl border border-white/5 bg-slate-900/60 p-5">
<h3 class="text-lg font-semibold text-white">Mobs</h3>
<pre class="overflow-x-auto rounded-xl border border-indigo-500/30 bg-slate-900/70 p-4 text-xs text-indigo-100"><code>{
"mobPool": {
"draws": 2,
"table": [
{ "mobKey": "goblin", "weight": 10 },
{ "mobKey": "troll", "weight": 3 }
]
}
}</code></pre>
</div>
<div class="space-y-3 rounded-2xl border border-white/5 bg-slate-900/60 p-5">
<h3 class="text-lg font-semibold text-white">Ventana</h3>
<pre class="overflow-x-auto rounded-xl border border-indigo-500/30 bg-slate-900/70 p-4 text-xs text-indigo-100"><code>{
"window": {
"from": "2025-01-01T00:00:00Z",
"to": "2025-01-31T23:59:59Z"
}
}</code></pre>
</div>
</div>
</section>
<section id="offers" class="space-y-6 rounded-3xl border border-white/5 bg-slate-900/80 p-8 shadow-2xl shadow-indigo-500/10 backdrop-blur">
<h2 class="text-3xl font-semibold text-white">Ofertas de tienda (ShopOffer)</h2>
<p class="text-slate-200">
Usa <code class="rounded bg-indigo-500/15 px-1.5 py-0.5 font-mono text-xs text-indigo-200">!offer-crear</code> para lanzar nuevas ofertas con stock limitado,
precios compuestos y ventanas temporales.
</p>
<div class="grid gap-6 md:grid-cols-2">
<div class="space-y-3 rounded-2xl border border-white/5 bg-slate-900/60 p-5">
<h3 class="text-lg font-semibold text-white">Precio (JSON)</h3>
<pre class="overflow-x-auto rounded-xl border border-indigo-500/30 bg-slate-900/70 p-4 text-xs text-indigo-100"><code>{
"coins": 100,
"items": [
{ "itemKey": "iron_ore", "qty": 5 },
{ "itemKey": "wood", "qty": 10 }
]
}</code></pre>
</div>
<div class="space-y-3 rounded-2xl border border-white/5 bg-slate-900/60 p-5">
<h3 class="text-lg font-semibold text-white">Límites y ventana</h3>
<ul class="list-disc space-y-1 pl-5 text-sm text-slate-200">
<li><strong class="text-white">Límite por usuario:</strong> Máximo por jugador.</li>
<li><strong class="text-white">Stock global:</strong> Total disponible.</li>
<li><strong class="text-white">Ventana:</strong> Fechas ISO de inicio y fin.</li>
</ul>
</div>
</div>
</section>
<section id="achievements" class="space-y-6 rounded-3xl border border-white/5 bg-slate-900/80 p-8 shadow-2xl shadow-indigo-500/10 backdrop-blur">
<h2 class="text-3xl font-semibold text-white">Logros</h2>
<p class="text-slate-200">
Motiva a los jugadores con hitos permanentes. Crea logros con
<code class="rounded bg-indigo-500/15 px-1.5 py-0.5 font-mono text-xs text-indigo-200">!logro-crear</code> y configúralos usando el editor DisplayComponents.
</p>
<div class="grid gap-6 md:grid-cols-2">
<div class="space-y-3 rounded-2xl border border-white/5 bg-slate-900/60 p-5">
<h3 class="text-lg font-semibold text-white">Requisitos comunes</h3>
<ul class="list-disc space-y-1 pl-5 text-sm text-slate-200">
<li><code class="rounded bg-indigo-500/15 px-1 py-0.5 font-mono text-xs text-indigo-200">collect_items</code>: Recolectar items específicos.</li>
<li><code class="rounded bg-indigo-500/15 px-1 py-0.5 font-mono text-xs text-indigo-200">complete_missions</code>: Completar misiones listadas.</li>
<li><code class="rounded bg-indigo-500/15 px-1 py-0.5 font-mono text-xs text-indigo-200">reach_level</code>: Alcanzar cierto nivel o racha.</li>
<li><code class="rounded bg-indigo-500/15 px-1 py-0.5 font-mono text-xs text-indigo-200">stat_value</code>: Llegar a un valor en estadísticas.</li>
</ul>
</div>
<div class="space-y-3 rounded-2xl border border-white/5 bg-slate-900/60 p-5">
<h3 class="text-lg font-semibold text-white">Recompensas posibles</h3>
<ul class="list-disc space-y-1 pl-5 text-sm text-slate-200">
<li>Monedas</li>
<li>Items entregados automáticamente</li>
<li>Roles (usa ID de Discord)</li>
<li>Puntos de logro</li>
</ul>
</div>
</div>
<div class="rounded-2xl border border-emerald-500/30 bg-emerald-500/10 p-5 text-sm text-emerald-100">
<strong class="block text-base font-semibold text-emerald-200">Nota:</strong>
Usa <code class="rounded bg-indigo-500/15 px-1 py-0.5 font-mono text-xs text-indigo-200">!logros-lista</code> para auditar logros y
<code class="rounded bg-indigo-500/15 px-1 py-0.5 font-mono text-xs text-indigo-200">!logro-ver &lt;key&gt;</code> para validar estructura antes de publicarlos.
</div>
</section>
<section id="missions" class="space-y-6 rounded-3xl border border-white/5 bg-slate-900/80 p-8 shadow-2xl shadow-indigo-500/10 backdrop-blur">
<h2 class="text-3xl font-semibold text-white">Misiones</h2>
<p class="text-slate-200">
Las misiones permiten objetivos diarios, semanales o repetibles. Adminístralas con
<code class="rounded bg-indigo-500/15 px-1.5 py-0.5 font-mono text-xs text-indigo-200">!mision-crear</code> y
<code class="rounded bg-indigo-500/15 px-1.5 py-0.5 font-mono text-xs text-indigo-200">!misiones-lista</code>.
</p>
<div class="grid gap-6 md:grid-cols-2">
<div class="space-y-3 rounded-2xl border border-white/5 bg-slate-900/60 p-5">
<h3 class="text-lg font-semibold text-white">Tipos de misión</h3>
<ul class="list-disc space-y-1 pl-5 text-sm text-slate-200">
<li><strong class="text-white">daily:</strong> Reinicia cada día.</li>
<li><strong class="text-white">weekly:</strong> Reinicia cada semana.</li>
<li><strong class="text-white">one_time:</strong> Se completa una vez.</li>
<li><strong class="text-white">repeatable:</strong> Puede repetirse sin límite.</li>
</ul>
</div>
<div class="space-y-3 rounded-2xl border border-white/5 bg-slate-900/60 p-5">
<h3 class="text-lg font-semibold text-white">Requisitos combinables</h3>
<ul class="list-disc space-y-1 pl-5 text-sm text-slate-200">
<li>Consumir items o recursos.</li>
<li>Completar minijuegos específicos.</li>
<li>Derrotar mobs concretos.</li>
<li>Lograr cantidades de monedas.</li>
</ul>
</div>
</div>
<div class="rounded-2xl border border-sky-500/30 bg-sky-500/10 p-5 text-sm text-sky-100">
<strong class="block text-base font-semibold text-sky-200">Tip:</strong>
Aprovecha la ventana de disponibilidad para crear eventos temáticos limitados.
</div>
</section>
<section id="chests" class="space-y-6 rounded-3xl border border-white/5 bg-slate-900/80 p-8 shadow-2xl shadow-indigo-500/10 backdrop-blur">
<h2 class="text-3xl font-semibold text-white">Cofres y recompensas</h2>
<p class="text-slate-200">
Configura cofres usando props <code class="rounded bg-indigo-500/15 px-1.5 py-0.5 font-mono text-xs text-indigo-200">chest</code> en los items y define tablas de recompensas con pesos.
</p>
<div class="grid gap-6 md:grid-cols-2">
<div class="space-y-3 rounded-2xl border border-white/5 bg-slate-900/60 p-5">
<h3 class="text-lg font-semibold text-white">Recompensas soportadas</h3>
<ul class="list-disc space-y-1 pl-5 text-sm text-slate-200">
<li>Monedas (<code class="rounded bg-indigo-500/15 px-1 py-0.5 font-mono text-xs text-indigo-200">coins</code>)</li>
<li>Items (usa <code class="rounded bg-indigo-500/15 px-1 py-0.5 font-mono text-xs text-indigo-200">itemKey</code> y <code class="rounded bg-indigo-500/15 px-1 py-0.5 font-mono text-xs text-indigo-200">qty</code>)</li>
<li>Roles de Discord (<code class="rounded bg-indigo-500/15 px-1 py-0.5 font-mono text-xs text-indigo-200">roleId</code>)</li>
</ul>
</div>
<div class="space-y-3 rounded-2xl border border-white/5 bg-slate-900/60 p-5">
<h3 class="text-lg font-semibold text-white">Consejos</h3>
<ul class="list-disc space-y-1 pl-5 text-sm text-slate-200">
<li>Usa <code class="rounded bg-indigo-500/15 px-1 py-0.5 font-mono text-xs text-indigo-200">consumeOnOpen</code> para cofres desechables.</li>
<li>Combina cofres con logros y eventos para mejores recompensas.</li>
<li>Define varias entradas con pesos distintos para crear rarezas.</li>
</ul>
</div>
</div>
</section>
<section id="crafting" class="space-y-6 rounded-3xl border border-white/5 bg-slate-900/80 p-8 shadow-2xl shadow-indigo-500/10 backdrop-blur">
<h2 class="text-3xl font-semibold text-white">Crafteos</h2>
<p class="text-slate-200">
Gestiona recetas desde la base de datos o crea comandos personalizados. El servicio de economía incluye
<code class="rounded bg-indigo-500/15 px-1.5 py-0.5 font-mono text-xs text-indigo-200">craftByProductKey</code> para validar materiales y entregar productos.
</p>
<ul class="list-disc space-y-1 pl-5 text-sm text-slate-200">
<li>Define recetas en Prisma con entradas y productos.</li>
<li>Usa misiones o eventos para desbloquear recetas temporales combinando props y tags.</li>
<li>Considera usar <code class="rounded bg-indigo-500/15 px-1 py-0.5 font-mono text-xs text-indigo-200">craftingOnly: true</code> en items que no se consiguen por drops.</li>
</ul>
</section>
<section id="mutations" class="space-y-6 rounded-3xl border border-white/5 bg-slate-900/80 p-8 shadow-2xl shadow-indigo-500/10 backdrop-blur">
<h2 class="text-3xl font-semibold text-white">Mutaciones</h2>
<p class="text-slate-200">
Las mutaciones permiten modificar items existentes con efectos adicionales (ej. reforjar armas). Usa
<code class="rounded bg-indigo-500/15 px-1.5 py-0.5 font-mono text-xs text-indigo-200">findMutationByKey</code> y
<code class="rounded bg-indigo-500/15 px-1.5 py-0.5 font-mono text-xs text-indigo-200">applyMutationToInventory</code> desde el servicio de economía.
</p>
<div class="grid gap-6 md:grid-cols-2">
<div class="space-y-3 rounded-2xl border border-white/5 bg-slate-900/60 p-5">
<h3 class="text-lg font-semibold text-white">Políticas</h3>
<pre class="overflow-x-auto rounded-xl border border-indigo-500/30 bg-slate-900/70 p-4 text-xs text-indigo-100"><code>{
"mutationPolicy": {
"allowedKeys": ["fire_upgrade", "ice_upgrade"],
"deniedKeys": ["cursed_upgrade"]
}
}</code></pre>
</div>
<div class="space-y-3 rounded-2xl border border-white/5 bg-slate-900/60 p-5">
<h3 class="text-lg font-semibold text-white">Sugerencias</h3>
<ul class="list-disc space-y-1 pl-5 text-sm text-slate-200">
<li>Crea mutaciones exclusivas por eventos.</li>
<li>Combínalas con logros o misiones épicas.</li>
<li>Controla conflictos usando <code class="rounded bg-indigo-500/15 px-1 py-0.5 font-mono text-xs text-indigo-200">deniedKeys</code>.</li>
</ul>
</div>
</div>
</section>
<section id="potions" class="space-y-6 rounded-3xl border border-white/5 bg-slate-900/80 p-8 shadow-2xl shadow-indigo-500/10 backdrop-blur">
<h2 class="text-3xl font-semibold text-white">Pociones y consumibles</h2>
<p class="text-slate-200">
Usa props <code class="rounded bg-indigo-500/15 px-1.5 py-0.5 font-mono text-xs text-indigo-200">food</code> para crear pociones curativas, boosters temporales o consumibles con cooldown.
</p>
<div class="grid gap-6 md:grid-cols-2">
<div class="space-y-3 rounded-2xl border border-white/5 bg-slate-900/60 p-5">
<h3 class="text-lg font-semibold text-white">Ejemplo de poción</h3>
<pre class="overflow-x-auto rounded-xl border border-indigo-500/30 bg-slate-900/70 p-4 text-xs text-indigo-100"><code>{
"food": {
"healHp": 75,
"healPercent": 15,
"cooldownKey": "healing_potion",
"cooldownSeconds": 45
}
}</code></pre>
</div>
<div class="space-y-3 rounded-2xl border border-white/5 bg-slate-900/60 p-5">
<h3 class="text-lg font-semibold text-white">Buenas prácticas</h3>
<ul class="list-disc space-y-1 pl-5 text-sm text-slate-200">
<li>Usa <code class="rounded bg-indigo-500/15 px-1 py-0.5 font-mono text-xs text-indigo-200">cooldownKey</code> para compartir cooldown.</li>
<li>Balancea <code class="rounded bg-indigo-500/15 px-1 py-0.5 font-mono text-xs text-indigo-200">healHp</code> y <code class="rounded bg-indigo-500/15 px-1 py-0.5 font-mono text-xs text-indigo-200">healPercent</code> para distintos niveles.</li>
<li>Combina con logros para recompensar uso estratégico.</li>
</ul>
</div>
</div>
</section>
<section id="tools" class="space-y-6 rounded-3xl border border-white/5 bg-slate-900/80 p-8 shadow-2xl shadow-indigo-500/10 backdrop-blur">
<h2 class="text-3xl font-semibold text-white">Herramientas y durabilidad</h2>
<p class="text-slate-200">
La durabilidad se administra a través de la combinación de props <code class="rounded bg-indigo-500/15 px-1.5 py-0.5 font-mono text-xs text-indigo-200">tool</code>
y <code class="rounded bg-indigo-500/15 px-1.5 py-0.5 font-mono text-xs text-indigo-200">breakable</code>. Para que un item pierda durabilidad, debe ser
<strong class="text-white">no apilable</strong> (<code class="rounded bg-indigo-500/15 px-1 py-0.5 font-mono text-xs text-indigo-200">stackable=false</code>).
</p>
<ul class="list-disc space-y-1 pl-5 text-sm text-slate-200">
<li>La función <code class="rounded bg-indigo-500/15 px-1 py-0.5 font-mono text-xs text-indigo-200">reduceToolDurability</code> descuenta <code class="rounded bg-indigo-500/15 px-1 py-0.5 font-mono text-xs text-indigo-200">durabilityPerUse</code> tras cada minijuego.</li>
<li>Cuando la durabilidad llega a 0, el item se elimina del inventario.</li>
<li>Si <code class="rounded bg-indigo-500/15 px-1 py-0.5 font-mono text-xs text-indigo-200">breakable.enabled</code> es <code class="rounded bg-indigo-500/15 px-1 py-0.5 font-mono text-xs text-indigo-200">false</code>, la herramienta es indestructible.</li>
<li>Usa tiers para bloquear áreas avanzadas. Ejemplo: Un área puede requerir una herramienta <code class="rounded bg-indigo-500/15 px-1 py-0.5 font-mono text-xs text-indigo-200">pickaxe</code> con <code class="rounded bg-indigo-500/15 px-1 py-0.5 font-mono text-xs text-indigo-200">tier &gt;= 2</code>.</li>
</ul>
<div class="rounded-2xl border border-amber-500/30 bg-amber-500/10 p-5 text-sm text-amber-100">
<strong class="block text-base font-semibold text-amber-200">Importante:</strong>
Después de cambiar items apilables a no apilables, recrea el item en los inventarios existentes para evitar stacks rotos.
</div>
</section>
<section id="services" class="space-y-6 rounded-3xl border border-white/5 bg-slate-900/80 p-8 shadow-2xl shadow-indigo-500/10 backdrop-blur">
<h2 class="text-3xl font-semibold text-white">Servicios del sistema</h2>
<div class="grid gap-6 md:grid-cols-2">
<div class="space-y-3 rounded-2xl border border-white/5 bg-slate-900/60 p-5">
<h3 class="text-lg font-semibold text-white">Economy Service</h3>
<ul class="list-disc space-y-1 pl-5 text-sm text-slate-200">
<li><code class="rounded bg-indigo-500/15 px-1 py-0.5 font-mono text-xs text-indigo-200">findItemByKey</code> y <code class="rounded bg-indigo-500/15 px-1 py-0.5 font-mono text-xs text-indigo-200">addItemByKey</code></li>
<li><code class="rounded bg-indigo-500/15 px-1 py-0.5 font-mono text-xs text-indigo-200">consumeItemByKey</code> y <code class="rounded bg-indigo-500/15 px-1 py-0.5 font-mono text-xs text-indigo-200">getInventoryEntry</code></li>
<li><code class="rounded bg-indigo-500/15 px-1 py-0.5 font-mono text-xs text-indigo-200">craftByProductKey</code> y <code class="rounded bg-indigo-500/15 px-1 py-0.5 font-mono text-xs text-indigo-200">buyFromOffer</code></li>
<li><code class="rounded bg-indigo-500/15 px-1 py-0.5 font-mono text-xs text-indigo-200">findMutationByKey</code> y <code class="rounded bg-indigo-500/15 px-1 py-0.5 font-mono text-xs text-indigo-200">applyMutationToInventory</code></li>
</ul>
</div>
<div class="space-y-3 rounded-2xl border border-white/5 bg-slate-900/60 p-5">
<h3 class="text-lg font-semibold text-white">Minigames Service</h3>
<ul class="list-disc space-y-1 pl-5 text-sm text-slate-200">
<li><code class="rounded bg-indigo-500/15 px-1 py-0.5 font-mono text-xs text-indigo-200">runMinigame</code> para ejecutar cualquier actividad.</li>
<li><code class="rounded bg-indigo-500/15 px-1 py-0.5 font-mono text-xs text-indigo-200">runMining</code> y <code class="rounded bg-indigo-500/15 px-1 py-0.5 font-mono text-xs text-indigo-200">runFishing</code> como atajos.</li>
<li>Valida cooldowns, requisitos de herramientas y entrega recompensas.</li>
<li>Reduce durabilidad automáticamente cuando corresponde.</li>
</ul>
</div>
</div>
</section>
<section id="faq" class="space-y-6 rounded-3xl border border-white/5 bg-slate-900/80 p-8 shadow-2xl shadow-indigo-500/10 backdrop-blur">
<h2 class="text-3xl font-semibold text-white">Preguntas frecuentes</h2>
<div class="space-y-4">
<details class="rounded-2xl border border-white/5 bg-slate-900/60 p-4 text-slate-200">
<summary class="cursor-pointer text-base font-semibold text-white">¿Qué pasa si olvido definir <code class="rounded bg-indigo-500/15 px-1 py-0.5 font-mono text-xs text-indigo-200">stackable</code>?</summary>
<p class="mt-3 text-sm">
Por defecto los items son apilables. Si tu herramienta pierde durabilidad, asegúrate de marcarla como <em>no apilable</em> en el modal Base.
</p>
</details>
<details class="rounded-2xl border border-white/5 bg-slate-900/60 p-4 text-slate-200">
<summary class="cursor-pointer text-base font-semibold text-white">¿Cómo pruebo mis configuraciones?</summary>
<p class="mt-3 text-sm">
Usa comandos de prueba en un servidor privado con el bot y confirma con
<code class="rounded bg-indigo-500/15 px-1 py-0.5 font-mono text-xs text-indigo-200">!player</code>,
<code class="rounded bg-indigo-500/15 px-1 py-0.5 font-mono text-xs text-indigo-200">!stats</code> y <code class="rounded bg-indigo-500/15 px-1 py-0.5 font-mono text-xs text-indigo-200">!inventario</code>.
</p>
</details>
<details class="rounded-2xl border border-white/5 bg-slate-900/60 p-4 text-slate-200">
<summary class="cursor-pointer text-base font-semibold text-white">¿Puedo clonar contenido entre servidores?</summary>
<p class="mt-3 text-sm">
Sí. Los items globales están disponibles en todos los servidores; los locales se limitan a su guild. Usa las herramientas de exportación de Prisma si necesitas migraciones masivas.
</p>
</details>
<details class="rounded-2xl border border-white/5 bg-slate-900/60 p-4 text-slate-200">
<summary class="cursor-pointer text-base font-semibold text-white">¿Cómo despliego esta documentación?</summary>
<p class="mt-3 text-sm">
Consulta las instrucciones en <code class="rounded bg-indigo-500/15 px-1 py-0.5 font-mono text-xs text-indigo-200">server/README.md</code> para publicar en Heroku como app independiente.
</p>
</details>
</div>
</section>
</div>
</main>
</div>
<footer class="border-t border-white/5 bg-slate-950/80 py-10 text-center text-sm text-slate-400">
<p>Amayo © 2025 — Documentación no oficial para administradores de comunidad.</p>
<a class="mt-3 inline-flex items-center gap-2 text-indigo-300 transition hover:text-indigo-200" href="#overview">
Volver arriba
<span aria-hidden="true">↑</span>
</a>
</footer>
</div>
<script src="./assets/js/main.js" type="module"></script>
</body>
</html>

File diff suppressed because it is too large Load Diff