Note
AinBot es un bot de Discord desarrollado originalmente en 2018 utilizando la versión 11.4.2 de discord.js. Este proyecto fue creado inicialmente como un bot personalizado para un servidor específico en Discord. En 2024, el proyecto se reanuda con la intención de servir como un ejemplo educativo y un recurso de código de ejemplo actualizado a las mejores prácticas actuales.
El objetivo principal de revivir este proyecto es proporcionar un recurso educativo para la comunidad de desarrollo de Discord, mostrando cómo se estructuraba un bot en versiones antiguas de discord.js y cómo se puede actualizar a la versión más reciente (discord.js v14) utilizando las mejores prácticas modernas de JavaScript y Discord bot development.
src/: núcleo técnico del bot, loaders, runtime, eventos internos, motor YAML y base de datos.configs/: módulos funcionales del bot. Los sistemas activos viven como carpetas de primer nivel, por ejemploEventLogsyUtilities.configs/<Modulo>/: para módulos solo YAML, usaindex.yml,interactions/,events/,metas/ymessages/directamente.configs/<Modulo>/resources/: para módulos con JavaScript propio, guarda ahí la configuración YAML del módulo.configs/<Modulo>/interactions,configs/<Modulo>/events,configs/<Modulo>/actionsy carpetas similares: código JavaScript propio del módulo cuando lo necesite.configs/_Example/: comandos, eventos, mensajes y metas de demostración. No se carga automáticamente porque empieza con_.configs/Music/: ubicación esperada del addon privado de música cuando se instala localmente.
Para clonar y ejecutar localmente este proyecto, asegúrate de tener Bun instalado.
- Clona el repositorio:
git clone https://github.com/JainaGam3r45/AinBot.git
cd AinBot- Crea un archivo
.enven el directorio raíz del proyecto y configura tus variables de entorno:
BOT_TOKEN="<your-token-bot>"
PREFIX="<your-prefix-bot>"
DEVELOPER_IDS= [
"<your-developer-id>",
// Agrega más IDs de desarrolladores aquí
]Bun carga este archivo automáticamente al ejecutar los scripts del proyecto.
- Instala las dependencias:
bun run install:devEl instalador lee DATABASE_PROVIDER e instala automáticamente el driver correspondiente. Para instalar solo dependencias de producción:
bun run install:prod- Ejecuta el bot en modo normal/producción:
bun startPara iniciar el bot en modo desarrollo y mostrar mensajes de debug:
bun run devAinBot incluye una capa de base de datos configurable desde variables de entorno. El bot expone la conexión como client.database, con namespaces para separar datos por dominio:
const guilds = client.database.namespace("guilds");
await guilds.set(interaction.guildId, {
language: "es",
premium: false,
});
const settings = await guilds.get(interaction.guildId);El proveedor se elige con DATABASE_PROVIDER:
none: desactiva persistencia sin romper el arranque del bot.memory: útil para pruebas locales rápidas; los datos se pierden al reiniciar.sqlite: recomendado para bots pequeños o medianos con una sola instancia.postgresql: recomendado para bots que van a escalar, usar shards o correr varias instancias.mysql/mariadb: buenas opciones si ya tienes esa infraestructura.mongodb: útil cuando tus datos son documentos flexibles y cambian mucho de forma.
Los drivers son opcionales y el instalador elige el correcto desde DATABASE_PROVIDER:
sqlite: usabun:sqlite, incluido en Bun.postgresql: instalapg.mysql: instalamysql2.mariadb: instalamariadb.mongodb: instalamongodb.
Ejemplo con SQLite:
DATABASE_PROVIDER="sqlite"
DATABASE_PATH="data/ainbot.sqlite"Ejemplo con PostgreSQL:
DATABASE_PROVIDER="postgresql"
DATABASE_URL="postgres://user:password@localhost:5432/ainbot"
DATABASE_SSL="false"Puedes migrar datos entre proveedores persistentes con una herramienta offline. Es útil si empiezas con SQLite y más adelante quieres pasar a MySQL, MariaDB, PostgreSQL o MongoDB.
La migración lee datos desde DATABASE_SOURCE_* y los escribe en DATABASE_TARGET_*, así no se mezcla con la configuración normal del bot. El origen nunca se modifica.
Antes de migrar hacia un proveedor externo, instala su driver:
DATABASE_PROVIDER="mysql" bun run install:databasePara validar una migración sin escribir datos:
bun run database:migrate --dry-runPor defecto, la migración aborta si el destino ya tiene un registro con la misma combinación de namespace y key:
bun run database:migrate --on-conflict abortSi quieres reemplazar registros existentes en el destino, usa overwrite. Haz un backup antes de usar esta opción:
bun run database:migrate --on-conflict overwriteEjemplo de SQLite a MySQL:
DATABASE_SOURCE_PROVIDER="sqlite"
DATABASE_SOURCE_PATH="data/ainbot.sqlite"
DATABASE_TARGET_PROVIDER="mysql"
DATABASE_TARGET_URL="mysql://user:password@localhost:3306/ainbot"
DATABASE_TARGET_TABLE="ainbot_records"bun run database:migrate --dry-run
bun run database:migrate --on-conflict abortEjemplo de SQLite a PostgreSQL:
DATABASE_SOURCE_PROVIDER="sqlite"
DATABASE_SOURCE_PATH="data/ainbot.sqlite"
DATABASE_TARGET_PROVIDER="postgresql"
DATABASE_TARGET_URL="postgres://user:password@localhost:5432/ainbot"
DATABASE_TARGET_SSL="false"
DATABASE_TARGET_TABLE="ainbot_records"bun run database:migrate --dry-run
bun run database:migrate --on-conflict abortEste proyecto está abierto a contribuciones y sugerencias. Si deseas contribuir, por favor sigue estos pasos:
- Haz un fork del proyecto.
- Crea una nueva rama (
git checkout -b feature/new-changes). - Haz commit de tus cambios (
git commit -am 'Añade esto ...'). - Sube tus cambios (
git push origin feature/new-changes). - Abre un Pull Request.
Distribuido bajo la licencia MIT. Consulta LICENSE para más información.
JainaGam3r45 - JainaGam3r45@gmail.com
Proyecto desarrollado como hobbie y con propósitos educativos en mente.