diff --git a/package-lock.json b/package-lock.json index fd09b07..0ecbb55 100644 --- a/package-lock.json +++ b/package-lock.json @@ -16,6 +16,7 @@ "chrono-node": "2.9.0", "discord-api-types": "0.38.26", "discord.js": "15.0.0-dev.1759363313-f510b5ffa", + "ejs": "^3.1.10", "newrelic": "13.4.0", "node-appwrite": "19.1.0", "pino": "9.13.0", @@ -23,6 +24,7 @@ "redis": "5.8.2" }, "devDependencies": { + "@types/ejs": "^3.1.5", "@types/node": "24.3.1", "ts-node": "10.9.2", "typescript": "5.9.2" @@ -1054,6 +1056,13 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/ejs": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/@types/ejs/-/ejs-3.1.5.tgz", + "integrity": "sha512-nv+GSx77ZtXiJzwKdsASqi+YQ5Z7vwHsTP0JY2SiQgjGckkBRKZnk8nIM+7oUZ1VCtuTz0+By4qVR7fqzp/Dfg==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/luxon": { "version": "3.4.2", "resolved": "https://registry.npmjs.org/@types/luxon/-/luxon-3.4.2.tgz", @@ -1188,6 +1197,12 @@ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "license": "Python-2.0" }, + "node_modules/async": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", + "license": "MIT" + }, "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", @@ -1214,6 +1229,12 @@ "proxy-from-env": "^1.1.0" } }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "license": "MIT" + }, "node_modules/base64-js": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", @@ -1255,6 +1276,15 @@ "readable-stream": "^3.4.0" } }, + "node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, "node_modules/buffer": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", @@ -1645,6 +1675,21 @@ "fast-check": "^3.23.1" } }, + "node_modules/ejs": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", + "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", + "license": "Apache-2.0", + "dependencies": { + "jake": "^10.8.5" + }, + "bin": { + "ejs": "bin/cli.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", @@ -1788,6 +1833,15 @@ "integrity": "sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==", "license": "MIT" }, + "node_modules/filelist": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", + "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", + "license": "Apache-2.0", + "dependencies": { + "minimatch": "^5.0.1" + } + }, "node_modules/find-package-json": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/find-package-json/-/find-package-json-1.2.0.tgz", @@ -2187,6 +2241,23 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/jake": { + "version": "10.9.4", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.4.tgz", + "integrity": "sha512-wpHYzhxiVQL+IV05BLE2Xn34zW1S223hvjtqk0+gsPrwd/8JNLXJgZZM/iPFsYc1xyphF+6M6EvdE5E9MBGkDA==", + "license": "Apache-2.0", + "dependencies": { + "async": "^3.2.6", + "filelist": "^1.0.4", + "picocolors": "^1.1.1" + }, + "bin": { + "jake": "bin/cli.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/jiti": { "version": "2.5.1", "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.5.1.tgz", @@ -2377,6 +2448,18 @@ "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", "license": "ISC" }, + "node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/minimist": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", @@ -2607,6 +2690,12 @@ "integrity": "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==", "license": "MIT" }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, "node_modules/pino": { "version": "9.13.0", "resolved": "https://registry.npmjs.org/pino/-/pino-9.13.0.tgz", diff --git a/package.json b/package.json index 3b88e0a..f4ec7ae 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "amayo", - "version": "2.0.1", + "version": "2.0.15", "description": "", "main": "src/main.ts", "scripts": { @@ -13,6 +13,7 @@ "dev:optimized": "MEMORY_LOG_INTERVAL_SECONDS=300 ENABLE_MEMORY_OPTIMIZER=true NODE_OPTIONS='--expose-gc' npx tsx watch src/main.ts", "start:prod": "NODE_ENV=production NODE_OPTIONS=--max-old-space-size=384 npx tsx src/main.ts", "start:prod-optimized": "NODE_ENV=production ENABLE_MEMORY_OPTIMIZER=true NODE_OPTIONS='--max-old-space-size=512 --expose-gc' npx tsx src/main.ts", + "tsc": "tsc", "typecheck": "tsc --noEmit", "seed:minigames": "tsx src/game/minigames/seed.ts", "start:optimize-relic": "NODE_ENV=production ENABLE_MEMORY_OPTIMIZER=true NEW_RELIC_APP_NAME=amayo NEW_RELIC_LICENSE_KEY=85ef833e676ed6ea726e23b3e373397dFFFFNRAL NODE_OPTIONS='--max-old-space-size=512 --expose-gc' npx tsx --experimental-loader=newrelic/esm-loader.mjs src/main.ts" @@ -29,6 +30,7 @@ "chrono-node": "2.9.0", "discord-api-types": "0.38.26", "discord.js": "15.0.0-dev.1759363313-f510b5ffa", + "ejs": "^3.1.10", "newrelic": "13.4.0", "node-appwrite": "19.1.0", "pino": "9.13.0", @@ -36,6 +38,7 @@ "redis": "5.8.2" }, "devDependencies": { + "@types/ejs": "^3.1.5", "@types/node": "24.3.1", "ts-node": "10.9.2", "typescript": "5.9.2" diff --git a/src/server/public/index_modern_test.html b/src/server/public/index_modern_test.html deleted file mode 100644 index 2f4feca..0000000 --- a/src/server/public/index_modern_test.html +++ /dev/null @@ -1,210 +0,0 @@ - - - - - - Amayo Bot | Guía Completa - Diseño Moderno - - - - - - - - -
-
-
-
-
- -
- -
-
- -
-
- -
- - - - - - Amayo Bot • v0.11.20 - -
- - -

- - Guía Completa - - - Amayo Bot - -

- - -

- Sistema completo de economía, minijuegos, misiones y IA para Discord -

- - -
- -
-
- - Comenzar ahora - - - - -
- - -
- - -
- - Discord.js 15.0-dev - - - Enero 2025 - - - 23 Secciones Completas - -
-
-
-
- - -
-
-
-
-
-

- 🚀 Primeros Pasos -

-
-
-
- -

- ¡Bienvenido a Amayo Bot! Este bot transforma tu servidor en una experiencia de juego completa. -

- - -
-

- - Características Principales -

-
-
- 🎮 -
-

Minijuegos Épicos

-

Mina, pesca, pelea y cultiva recursos

-
-
-
- 💰 -
-

Economía Completa

-

Tienda, crafteo e inventario

-
-
-
- 🏆 -
-

Progresión & Logros

-

Misiones, logros y rachas diarias

-
-
-
-
- - -
-
-
- -

Prefix: !

-
-

Personalizable con !configuracion

-
- -
-
- -

Ayuda

-
-

Usa !ayuda para ver comandos

-
-
-
- - -
-

✨ Este es el nuevo diseño ultra moderno ✨

-

¿Te gusta este estilo? Todas las 23 secciones tendrán este diseño con:

-
- Glassmorphism - Hover Effects - Gradientes - Animaciones - 100% Tailwind -
-
-
-
-
- - - - diff --git a/src/server/server.ts b/src/server/server.ts index e4abfb0..755588e 100644 --- a/src/server/server.ts +++ b/src/server/server.ts @@ -1,8 +1,24 @@ import { createServer, IncomingMessage, ServerResponse } from "node:http"; import { promises as fs } from "node:fs"; +import { readFileSync } from "node:fs"; import path from "node:path"; +import ejs from "ejs"; const publicDir = path.join(__dirname, "public"); +const viewsDir = path.join(__dirname, "views"); + +// Cargar metadatos del proyecto para usarlos como variables en las vistas +let pkg: { + name?: string; + version?: string; + dependencies?: Record; +} = {}; +try { + const pkgPath = path.join(__dirname, "../../package.json"); + pkg = JSON.parse(readFileSync(pkgPath, "utf8")); +} catch { + // Ignorar si no se puede leer; usaremos valores por defecto +} const MIME_TYPES: Record = { ".html": "text/html; charset=utf-8", @@ -55,51 +71,99 @@ const sendResponse = async ( res.end(data); }; -export const server = createServer(async (req: IncomingMessage, res: ServerResponse) => { - try { - // 🔒 Forzar HTTPS en producción (Heroku) - if (process.env.NODE_ENV === "production") { - const proto = req.headers["x-forwarded-proto"]; - if (proto && proto !== "https") { - res.writeHead(301, { - Location: `https://${req.headers.host}${req.url}`, - }); - return res.end(); - } - } - - const url = new URL(req.url ?? "/", `http://${req.headers.host ?? "localhost"}`); - const filePath = resolvePath(url.pathname); - - if (!filePath.startsWith(publicDir)) { - res.writeHead(403); - res.end("Forbidden"); - return; - } +const renderTemplate = async ( + res: ServerResponse, + template: string, + locals: Record = {}, + statusCode = 200 +) => { + const pageFile = path.join(viewsDir, "pages", `${template}.ejs`); + const layoutFile = path.join(viewsDir, "layouts", "layout.ejs"); + const body = await ejs.renderFile(pageFile, locals, { async: true }); + const html = await ejs.renderFile( + layoutFile, + { ...locals, body }, + { async: true } + ); + res.writeHead(statusCode, { + "Content-Type": "text/html; charset=utf-8", + "Cache-Control": "no-cache", + }); + res.end(html); +}; +export const server = createServer( + async (req: IncomingMessage, res: ServerResponse) => { try { - await sendResponse(res, filePath); - } catch (error: any) { - if (error.code === "ENOENT") { - const notFoundPath = path.join(publicDir, "404.html"); - try { - await sendResponse(res, notFoundPath, 404); - } catch { - res.writeHead(404, { "Content-Type": "text/plain; charset=utf-8" }); - res.end("404 - Recurso no encontrado"); + // 🔒 Forzar HTTPS en producción (Heroku) + if (process.env.NODE_ENV === "production") { + const proto = req.headers["x-forwarded-proto"]; + if (proto && proto !== "https") { + res.writeHead(301, { + Location: `https://${req.headers.host}${req.url}`, + }); + return res.end(); } - } else if (error.code === "EISDIR") { - const indexPath = path.join(filePath, "index.html"); - await sendResponse(res, indexPath); - } else { - console.error("[Server] Error al servir archivo:", error); - res.writeHead(500, { "Content-Type": "text/plain; charset=utf-8" }); - res.end("500 - Error interno del servidor"); } + + const url = new URL( + req.url ?? "/", + `http://${req.headers.host ?? "localhost"}` + ); + + // Ruta dinámica: renderizar index con EJS + if ( + url.pathname === "/" || + url.pathname === "/index" || + url.pathname === "/index.html" + ) { + const now = new Date(); + const currentDateHuman = now.toLocaleDateString("es-ES", { + month: "long", + year: "numeric", + }); + const djsVersion = pkg?.dependencies?.["discord.js"] ?? "15.0.0-dev"; + await renderTemplate(res, "index", { + appName: pkg.name ?? "Amayo Bot", + version: pkg.version ?? "2.0.0", + djsVersion, + currentDateHuman, + }); + return; + } + + const filePath = resolvePath(url.pathname); + + if (!filePath.startsWith(publicDir)) { + res.writeHead(403); + res.end("Forbidden"); + return; + } + + try { + await sendResponse(res, filePath); + } catch (error: any) { + if (error.code === "ENOENT") { + const notFoundPath = path.join(publicDir, "404.html"); + try { + await sendResponse(res, notFoundPath, 404); + } catch { + res.writeHead(404, { "Content-Type": "text/plain; charset=utf-8" }); + res.end("404 - Recurso no encontrado"); + } + } else if (error.code === "EISDIR") { + const indexPath = path.join(filePath, "index.html"); + await sendResponse(res, indexPath); + } else { + console.error("[Server] Error al servir archivo:", error); + res.writeHead(500, { "Content-Type": "text/plain; charset=utf-8" }); + res.end("500 - Error interno del servidor"); + } + } + } catch (error) { + console.error("[Server] Error inesperado:", error); + res.writeHead(500, { "Content-Type": "text/plain; charset=utf-8" }); + res.end("500 - Error interno"); } - } catch (error) { - console.error("[Server] Error inesperado:", error); - res.writeHead(500, { "Content-Type": "text/plain; charset=utf-8" }); - res.end("500 - Error interno"); } -}); +); diff --git a/src/server/views/index.ejs b/src/server/views/index.ejs new file mode 100644 index 0000000..847fb7a --- /dev/null +++ b/src/server/views/index.ejs @@ -0,0 +1,108 @@ +<% const pageTitle = `${appName} | Guía Completa`; %> +<% const head = null; %> +<% const scripts = null; %> +<% const title = pageTitle; %> +<% layout('layouts/layout', { title, head, scripts, appName, version, djsVersion, currentDateHuman }); %> + +
+
+ +
+
+
+ + + + + + <%= appName %> • v<%= version %> + +
+ +

+ + Guía Completa + + + <%= appName %> + +

+ +

+ Sistema completo de economía, minijuegos, misiones y IA para Discord +

+ +
+ +
+
+ + Comenzar ahora + + + + +
+ + +
+ +
+ + Discord.js <%= djsVersion %> + + + <%= currentDateHuman %> + + + 23 Secciones • Creación de Contenido Incluida + +
+
+
+
+ +
+
+ +
+ <%- include('partials/toc') %> + +
+
+ <%- include('partials/sections/primeros-pasos') %> + <%- include('partials/sections/comandos-basicos') %> + <%- include('partials/sections/sistema-juego') %> + <%- include('partials/sections/minijuegos') %> + <%- include('partials/sections/inventario-equipo') %> + <%- include('partials/sections/economia') %> + <%- include('partials/sections/tienda') %> + <%- include('partials/sections/crafteo') %> + <%- include('partials/sections/logros') %> + <%- include('partials/sections/misiones') %> + <%- include('partials/sections/racha') %> + <%- include('partials/sections/consumibles') %> + <%- include('partials/sections/cofres') %> + <%- include('partials/sections/encantamientos') %> + <%- include('partials/sections/fundicion') %> + <%- include('partials/sections/ia') %> + <%- include('partials/sections/recordatorios') %> + <%- include('partials/sections/alianzas') %> + <%- include('partials/sections/admin') %> + <%- include('partials/sections/creacion-contenido') %> + <%- include('partials/sections/configuracion') %> + <%- include('partials/sections/estadisticas') %> + <%- include('partials/sections/tips') %> + <%- include('partials/sections/faq') %> +
+
+
+
+
diff --git a/src/server/views/layouts/layout.ejs b/src/server/views/layouts/layout.ejs new file mode 100644 index 0000000..6a4b7e6 --- /dev/null +++ b/src/server/views/layouts/layout.ejs @@ -0,0 +1,99 @@ + + + + + + <%= title || `${appName} | Guía Completa` %> + + + + + <% if (head) { %> + <%= head %> + <% } %> + + + + +
+
+
+
+
+ +
+ <%- body %> +
+ +
+
+
+

<%= appName %>

+

Sistema completo de juego, economía y gestión para Discord

+
+ +
+ Primeros Pasos + + Comandos + + Minijuegos + + FAQ +
+ +
+

+ Versión <%= version %> • Discord.js <%= djsVersion %> • <%= currentDateHuman %> +

+

+ Amayo © <%= new Date().getFullYear() %> — Documentación para usuarios finales de Discord +

+
+ + +
+
+ + + <% if (scripts) { %> + <%= scripts %> + <% } %> + + diff --git a/src/server/views/pages/index.ejs b/src/server/views/pages/index.ejs new file mode 100644 index 0000000..bc75e1d --- /dev/null +++ b/src/server/views/pages/index.ejs @@ -0,0 +1,102 @@ +
+
+ +
+
+
+ + + + + + <%= appName %> • v<%= version %> + +
+ +

+ + Guía Completa + + + <%= appName %> + +

+ +

+ Sistema completo de economía, minijuegos, misiones y IA para Discord +

+ +
+ +
+
+ + Comenzar ahora + + + + +
+ + +
+ +
+ + Discord.js <%= djsVersion %> + + + <%= currentDateHuman %> + + + 23 Secciones • Creación de Contenido Incluida + +
+
+
+
+ +
+
+ +
+ <%- include('../partials/toc') %> + +
+
+ <%- include('../partials/sections/primeros-pasos') %> + <%- include('../partials/sections/comandos-basicos') %> + <%- include('../partials/sections/sistema-juego') %> + <%- include('../partials/sections/minijuegos') %> + <%- include('../partials/sections/inventario-equipo') %> + <%- include('../partials/sections/economia') %> + <%- include('../partials/sections/tienda') %> + <%- include('../partials/sections/crafteo') %> + <%- include('../partials/sections/logros') %> + <%- include('../partials/sections/misiones') %> + <%- include('../partials/sections/racha') %> + <%- include('../partials/sections/consumibles') %> + <%- include('../partials/sections/cofres') %> + <%- include('../partials/sections/encantamientos') %> + <%- include('../partials/sections/fundicion') %> + <%- include('../partials/sections/ia') %> + <%- include('../partials/sections/recordatorios') %> + <%- include('../partials/sections/alianzas') %> + <%- include('../partials/sections/admin') %> + <%- include('../partials/sections/creacion-contenido') %> + <%- include('../partials/sections/configuracion') %> + <%- include('../partials/sections/estadisticas') %> + <%- include('../partials/sections/tips') %> + <%- include('../partials/sections/faq') %> +
+
+
+
+
diff --git a/src/server/views/partials/sections/admin.ejs b/src/server/views/partials/sections/admin.ejs new file mode 100644 index 0000000..37e89a7 --- /dev/null +++ b/src/server/views/partials/sections/admin.ejs @@ -0,0 +1,4 @@ +
+

⚙️ Panel de Administración

+

Contenido en migración a EJS…

+
diff --git a/src/server/views/partials/sections/alianzas.ejs b/src/server/views/partials/sections/alianzas.ejs new file mode 100644 index 0000000..b1e244d --- /dev/null +++ b/src/server/views/partials/sections/alianzas.ejs @@ -0,0 +1,4 @@ +
+

🤝 Sistema de Alianzas

+

Contenido en migración a EJS…

+
diff --git a/src/server/views/partials/sections/cofres.ejs b/src/server/views/partials/sections/cofres.ejs new file mode 100644 index 0000000..f5d255d --- /dev/null +++ b/src/server/views/partials/sections/cofres.ejs @@ -0,0 +1,4 @@ +
+

🎁 Cofres y Recompensas

+

Contenido en migración a EJS…

+
diff --git a/src/server/views/partials/sections/comandos-basicos.ejs b/src/server/views/partials/sections/comandos-basicos.ejs new file mode 100644 index 0000000..8fc657e --- /dev/null +++ b/src/server/views/partials/sections/comandos-basicos.ejs @@ -0,0 +1,4 @@ +
+

⚡ Comandos Básicos

+

Contenido en migración a EJS…

+
diff --git a/src/server/views/partials/sections/configuracion.ejs b/src/server/views/partials/sections/configuracion.ejs new file mode 100644 index 0000000..f42f4eb --- /dev/null +++ b/src/server/views/partials/sections/configuracion.ejs @@ -0,0 +1,4 @@ +
+

🔧 Configuración del Servidor

+

Contenido en migración a EJS…

+
diff --git a/src/server/views/partials/sections/consumibles.ejs b/src/server/views/partials/sections/consumibles.ejs new file mode 100644 index 0000000..b5963e3 --- /dev/null +++ b/src/server/views/partials/sections/consumibles.ejs @@ -0,0 +1,4 @@ +
+

🍖 Consumibles y Pociones

+

Contenido en migración a EJS…

+
diff --git a/src/server/views/partials/sections/crafteo.ejs b/src/server/views/partials/sections/crafteo.ejs new file mode 100644 index 0000000..220e11b --- /dev/null +++ b/src/server/views/partials/sections/crafteo.ejs @@ -0,0 +1,4 @@ +
+

🛠️ Crafteo y Creación

+

Contenido en migración a EJS…

+
diff --git a/src/server/views/partials/sections/creacion-contenido.ejs b/src/server/views/partials/sections/creacion-contenido.ejs new file mode 100644 index 0000000..960cbfe --- /dev/null +++ b/src/server/views/partials/sections/creacion-contenido.ejs @@ -0,0 +1,4 @@ +
+

🎨 Creación de Contenido

+

Contenido en migración a EJS…

+
diff --git a/src/server/views/partials/sections/economia.ejs b/src/server/views/partials/sections/economia.ejs new file mode 100644 index 0000000..58875d5 --- /dev/null +++ b/src/server/views/partials/sections/economia.ejs @@ -0,0 +1,4 @@ +
+

💰 Sistema de Economía

+

Contenido en migración a EJS…

+
diff --git a/src/server/views/partials/sections/encantamientos.ejs b/src/server/views/partials/sections/encantamientos.ejs new file mode 100644 index 0000000..8501bc0 --- /dev/null +++ b/src/server/views/partials/sections/encantamientos.ejs @@ -0,0 +1,4 @@ +
+

✨ Encantamientos

+

Contenido en migración a EJS…

+
diff --git a/src/server/views/partials/sections/estadisticas.ejs b/src/server/views/partials/sections/estadisticas.ejs new file mode 100644 index 0000000..a742da4 --- /dev/null +++ b/src/server/views/partials/sections/estadisticas.ejs @@ -0,0 +1,4 @@ +
+

📊 Estadísticas y Progreso

+

Contenido en migración a EJS…

+
diff --git a/src/server/views/partials/sections/faq.ejs b/src/server/views/partials/sections/faq.ejs new file mode 100644 index 0000000..a1227ff --- /dev/null +++ b/src/server/views/partials/sections/faq.ejs @@ -0,0 +1,4 @@ +
+

❓ Preguntas Frecuentes

+

Contenido en migración a EJS…

+
diff --git a/src/server/views/partials/sections/fundicion.ejs b/src/server/views/partials/sections/fundicion.ejs new file mode 100644 index 0000000..320c1a4 --- /dev/null +++ b/src/server/views/partials/sections/fundicion.ejs @@ -0,0 +1,4 @@ +
+

🔥 Sistema de Fundición

+

Contenido en migración a EJS…

+
diff --git a/src/server/views/partials/sections/ia.ejs b/src/server/views/partials/sections/ia.ejs new file mode 100644 index 0000000..ae43298 --- /dev/null +++ b/src/server/views/partials/sections/ia.ejs @@ -0,0 +1,4 @@ +
+

🤖 Inteligencia Artificial

+

Contenido en migración a EJS…

+
diff --git a/src/server/views/partials/sections/inventario-equipo.ejs b/src/server/views/partials/sections/inventario-equipo.ejs new file mode 100644 index 0000000..55d9bd1 --- /dev/null +++ b/src/server/views/partials/sections/inventario-equipo.ejs @@ -0,0 +1,4 @@ +
+

🎒 Inventario y Equipo

+

Contenido en migración a EJS…

+
diff --git a/src/server/views/partials/sections/logros.ejs b/src/server/views/partials/sections/logros.ejs new file mode 100644 index 0000000..e3e2f4e --- /dev/null +++ b/src/server/views/partials/sections/logros.ejs @@ -0,0 +1,4 @@ +
+

🏆 Logros

+

Contenido en migración a EJS…

+
diff --git a/src/server/views/partials/sections/minijuegos.ejs b/src/server/views/partials/sections/minijuegos.ejs new file mode 100644 index 0000000..b1fd29c --- /dev/null +++ b/src/server/views/partials/sections/minijuegos.ejs @@ -0,0 +1,4 @@ +
+

🎯 Minijuegos y Actividades

+

Contenido en migración a EJS…

+
diff --git a/src/server/views/partials/sections/misiones.ejs b/src/server/views/partials/sections/misiones.ejs new file mode 100644 index 0000000..4bbdf33 --- /dev/null +++ b/src/server/views/partials/sections/misiones.ejs @@ -0,0 +1,4 @@ +
+

📝 Misiones

+

Contenido en migración a EJS…

+
diff --git a/src/server/views/partials/sections/primeros-pasos.ejs b/src/server/views/partials/sections/primeros-pasos.ejs new file mode 100644 index 0000000..80aa881 --- /dev/null +++ b/src/server/views/partials/sections/primeros-pasos.ejs @@ -0,0 +1,39 @@ +
+

🚀 Primeros Pasos

+

+ ¡Bienvenido a Amayo Bot! Este bot transforma tu servidor de Discord en una experiencia de juego completa con economía, minijuegos, misiones y mucho más. +

+ +
+

✨ ¿Qué puedes hacer con Amayo?

+
    +
  • Jugar Minijuegos: Mina recursos, pesca, pelea contra enemigos y cultiva en granjas
  • +
  • Economía Completa: Gana monedas, compra en la tienda, craftea items y gestiona tu inventario
  • +
  • Sistema de Progresión: Sube de nivel, completa misiones, desbloquea logros y mantén tu racha diaria
  • +
  • Personalización: Equipa armas, armaduras y capas para mejorar tus estadísticas
  • +
  • IA Conversacional: Chatea con Gemini AI directamente desde Discord
  • +
  • Sistema de Alianzas: Comparte enlaces de invitación y gana puntos para tu servidor
  • +
+
+ +
+
+

⚡ Prefix del Bot

+

+ El prefix por defecto es ! +

+

+ Los administradores pueden cambiarlo con !configuracion +

+
+
+

❓ Obtener Ayuda

+

+ Usa !ayuda para ver todos los comandos disponibles +

+

+ También puedes usar !ayuda <comando> para detalles específicos +

+
+
+
diff --git a/src/server/views/partials/sections/racha.ejs b/src/server/views/partials/sections/racha.ejs new file mode 100644 index 0000000..d45cf3c --- /dev/null +++ b/src/server/views/partials/sections/racha.ejs @@ -0,0 +1,4 @@ +
+

🔥 Racha Diaria

+

Contenido en migración a EJS…

+
diff --git a/src/server/views/partials/sections/recordatorios.ejs b/src/server/views/partials/sections/recordatorios.ejs new file mode 100644 index 0000000..a7bfdb7 --- /dev/null +++ b/src/server/views/partials/sections/recordatorios.ejs @@ -0,0 +1,4 @@ +
+

⏰ Sistema de Recordatorios

+

Contenido en migración a EJS…

+
diff --git a/src/server/views/partials/sections/sistema-juego.ejs b/src/server/views/partials/sections/sistema-juego.ejs new file mode 100644 index 0000000..89357de --- /dev/null +++ b/src/server/views/partials/sections/sistema-juego.ejs @@ -0,0 +1,4 @@ +
+

🎮 Sistema de Juego

+

Contenido en migración a EJS…

+
diff --git a/src/server/views/partials/sections/tienda.ejs b/src/server/views/partials/sections/tienda.ejs new file mode 100644 index 0000000..8f78ef0 --- /dev/null +++ b/src/server/views/partials/sections/tienda.ejs @@ -0,0 +1,4 @@ +
+

🛒 Tienda y Compras

+

Contenido en migración a EJS…

+
diff --git a/src/server/views/partials/sections/tips.ejs b/src/server/views/partials/sections/tips.ejs new file mode 100644 index 0000000..571f913 --- /dev/null +++ b/src/server/views/partials/sections/tips.ejs @@ -0,0 +1,4 @@ +
+

💡 Tips y Trucos

+

Contenido en migración a EJS…

+
diff --git a/src/server/views/partials/toc.ejs b/src/server/views/partials/toc.ejs new file mode 100644 index 0000000..457bacb --- /dev/null +++ b/src/server/views/partials/toc.ejs @@ -0,0 +1,30 @@ +