npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

patto-cli

v0.0.5

Published

Herramienta de línea de comandos para trabajar con Patto Bot Template

Readme

Patto CLI

npm version Licencia: MIT Tests

Herramienta de línea de comandos para trabajar con Patto Bot Template. Facilita la inicialización de proyectos y la generación de comandos, subcomandos, grupos y plugins para tu bot de Discord.

📋 Tabla de Contenidos

✨ Características

  • 🚀 Inicialización rápida: Crea proyectos nuevos desde el template oficial
  • 🎨 Generación de código: Crea comandos, subcomandos, grupos y plugins automáticamente
  • Validaciones integradas: Nombres en kebab-case, prevención de path traversal
  • 📦 Modular: Arquitectura limpia y fácil de mantener
  • 🧪 Testeado: 30+ tests cubriendo toda la funcionalidad
  • 🎯 TypeScript: Desarrollado completamente en TypeScript
  • 🔧 Flexible: Opciones para archivos unificados o separados

📦 Instalación

Global (Recomendado)

npm install -g patto-cli

Local (Desarrollo)

npm install --save-dev patto-cli

Uso directo con npx

npx patto-cli <comando>

🎯 Comandos Disponibles

init - Inicializar Proyecto

Crea un nuevo proyecto de Patto Bot desde el template oficial.

patto init [nombre-proyecto]

Opciones:

  • nombre-proyecto: Nombre del proyecto (opcional, se pedirá interactivamente)

Características:

  • ✓ Preserva mayúsculas/minúsculas en nombres de carpeta
  • ✓ Convierte a kebab-case para package.json
  • ✓ Clona el repositorio oficial
  • ✓ Instala dependencias automáticamente
  • ✓ Operaciones git silenciosas

Ejemplo:

patto init MiBot
# Crea: ./MiBot/
# package.json name: "mi-bot"

generate - Generar Código

Genera comandos, subcomandos, grupos de subcomandos o plugins automáticamente.

Subcomandos disponibles:


command - Generar Comando

Genera un comando básico para el bot.

patto generate command -n <name> [opciones]
# o usando alias
patto g c -n <name> [opciones]

Opciones:

  • -n, --name <name>: Nombre del comando (kebab-case) [requerido]
  • -u, --unified: Crear archivo unificado (sin separar definition y command)
  • -d, --description <text>: Descripción del comando

Ejemplos:

# Comando básico con archivos separados
patto generate command -n ping

# Comando unificado con descripción
patto g c -n help -u -d "Muestra ayuda del bot"

# Comando en carpeta anidada
patto generate command -n utils/calculator

Genera:

src/
├── commands/
│   └── ping.command.ts          # Implementación
└── definitions/
    └── ping.definition.ts       # Decorador y definición

subcommand - Generar Subcomando

Genera un subcomando para un comando existente.

patto generate subcommand -n <name> -p <parent> [opciones]
# o usando alias
patto g s -n <name> -p <parent> [opciones]

Opciones:

  • -n, --name <name>: Nombre del subcomando (kebab-case) [requerido]
  • -p, --parent <parent>: Comando padre (kebab-case) [requerido]
  • -u, --unified: Crear archivo unificado
  • -d, --description <text>: Descripción del subcomando

Ejemplos:

# Subcomando básico
patto generate subcommand -n list -p user

# Con descripción
patto g s -n ban -p admin -d "Banea un usuario"

Genera:

src/
├── commands/
│   └── user-list.command.ts
└── definitions/
    └── user-list.definition.ts

Nombre del archivo: {parent}-{name}.command.ts
Clase: {Parent}{Name}Command


subcommand-group - Generar Grupo

Genera un grupo de subcomandos (nivel 3 de anidación).

patto generate subcommand-group -n <name> -p <parent> -s <subcommand> [opciones]
# o usando alias
patto g g -n <name> -p <parent> -s <subcommand> [opciones]

Opciones:

  • -n, --name <name>: Nombre del grupo (kebab-case) [requerido]
  • -p, --parent <parent>: Comando padre (kebab-case) [requerido]
  • -s, --subcommand <subcommand>: Subcomando (kebab-case) [requerido]
  • -u, --unified: Crear archivo unificado
  • -d, --description <text>: Descripción del grupo

Ejemplos:

# Grupo de subcomandos
patto generate subcommand-group -n tools -p admin -s manage

# Con descripción
patto g g -n roles -p server -s config -d "Gestión de roles"

Genera:

src/
├── commands/
│   └── admin-manage-tools.command.ts
└── definitions/
    └── admin-manage-tools.definition.ts

Nombre del archivo: {parent}-{subcommand}-{name}.command.ts
Clase: {Parent}{Subcommand}{Name}Command


plugin - Generar Plugin

Genera un plugin y lo registra automáticamente en src/config/plugins.config.ts.

patto generate plugin -n <name> [opciones]
# o usando alias
patto g p -n <name> [opciones]

Opciones:

  • -n, --name <name>: Nombre del plugin (kebab-case) [requerido]
  • --folder <folder>: Carpeta específica donde se aplicará (PluginScope.Folder)
  • --global: Aplicar a carpeta y subcarpetas (PluginScope.DeepFolder)

Ejemplos:

# Plugin básico (PluginScope.Specified)
patto generate plugin -n logger

# Plugin para carpeta específica
patto g p -n auth-check --folder commands

# Plugin global para carpeta y subcarpetas
patto generate plugin -n rate-limiter --global --folder api

# Plugin en subcarpeta
patto g p -n utils/validator

Genera:

src/
├── plugins/
│   └── logger.plugin.ts         # Clase del plugin
└── config/
    └── plugins.config.ts        # ← Actualizado automáticamente

Registro automático: El comando agrega automáticamente:

  1. Import del plugin al inicio del archivo
  2. Código de registro al final del archivo

💡 Ejemplos de Uso

Crear un bot completo desde cero

# 1. Inicializar proyecto
patto init MiSuperBot
cd MiSuperBot

# 2. Generar comandos básicos
patto g c -n ping -d "Verifica latencia del bot"
patto g c -n help -d "Muestra comandos disponibles"

# 3. Generar comando con subcomandos
patto g c -n user -d "Gestión de usuarios"
patto g s -n info -p user -d "Información de usuario"
patto g s -n avatar -p user -d "Avatar de usuario"

# 4. Generar comando admin con grupos
patto g c -n admin -d "Comandos administrativos"
patto g s -n manage -p admin -d "Gestión del servidor"
patto g g -n roles -p admin -s manage -d "Gestión de roles"
patto g g -n channels -p admin -s manage -d "Gestión de canales"

# 5. Generar plugins
patto g p -n auth-middleware --folder commands
patto g p -n logger --global
patto g p -n utils/validator

Estructura resultante:

MiSuperBot/
├── src/
│   ├── commands/
│   │   ├── ping.command.ts
│   │   ├── help.command.ts
│   │   ├── user.command.ts
│   │   ├── user-info.command.ts
│   │   ├── user-avatar.command.ts
│   │   ├── admin.command.ts
│   │   ├── admin-manage.command.ts
│   │   ├── admin-manage-roles.command.ts
│   │   └── admin-manage-channels.command.ts
│   ├── definitions/
│   │   └── [archivos .definition.ts correspondientes]
│   ├── plugins/
│   │   ├── auth-middleware.plugin.ts
│   │   ├── logger.plugin.ts
│   │   └── utils/
│   │       └── validator.plugin.ts
│   └── config/
│       └── plugins.config.ts
└── package.json

📁 Estructura del Proyecto

patto-cli/
├── src/
│   ├── commands/
│   │   ├── generate/              # Comandos de generación modulares
│   │   │   ├── command.ts         # Generador de comandos
│   │   │   ├── subcommand.ts      # Generador de subcomandos
│   │   │   ├── subcommand-group.ts # Generador de grupos
│   │   │   ├── plugin.ts          # Generador de plugins
│   │   │   └── README.md          # Documentación
│   │   ├── generate.ts            # Orquestador principal
│   │   └── init.ts                # Comando de inicialización
│   ├── templates/
│   │   ├── command.decorator.template
│   │   ├── subcommand.decorator.template
│   │   ├── subcommand.group.decorator.template
│   │   └── plugins/
│   │       ├── plugin.template
│   │       └── register-plugin.template
│   ├── types.ts                   # Tipos TypeScript
│   ├── utils.ts                   # Utilidades
│   ├── loader.ts                  # Cargador de comandos
│   └── index.ts                   # Entry point
├── tests/
│   └── generate/                  # Tests modulares
│       ├── command.test.ts
│       ├── subcommand.test.ts
│       ├── subcommand-group.test.ts
│       ├── plugin.test.ts
│       └── README.md
├── dist/                          # Archivos compilados
├── package.json
├── tsconfig.json
└── README.md

🧪 Testing

El proyecto cuenta con una suite completa de tests utilizando Vitest.

Ejecutar tests

# Todos los tests
npm test

# Tests específicos
npm test command.test.ts
npm test subcommand.test.ts
npm test subcommand-group.test.ts
npm test plugin.test.ts

# Watch mode
npm test -- --watch

Cobertura de tests

  • Total: 30 tests
  • Command: 10 tests
  • Subcommand: 5 tests
  • Subcommand Group: 6 tests
  • Plugin: 9 tests

Todos los tests están pasando

Qué se testea

  • ✅ Creación correcta de archivos
  • ✅ Contenido generado
  • ✅ Validaciones de nombres (kebab-case)
  • ✅ Prevención de path traversal
  • ✅ Manejo de archivos duplicados
  • ✅ Funcionamiento de aliases
  • ✅ Registro automático de plugins
  • ✅ Opciones de comandos

🔒 Validaciones

Patto CLI incluye validaciones estrictas para garantizar la calidad del código generado:

Nombres en kebab-case

✅ patto g c -n my-command       # Correcto
❌ patto g c -n MyCommand        # Error: debe ser kebab-case
❌ patto g c -n my_command       # Error: solo guiones permitidos
❌ patto g c -n "my command"     # Error: sin espacios

Prevención de path traversal

✅ patto g c -n utils/helper     # Correcto: subcarpeta válida
❌ patto g c -n ../../../hack    # Protegido: se sanitiza automáticamente

Archivos duplicados

✅ patto g c -n new-command      # Correcto: archivo no existe
❌ patto g c -n new-command      # Error: archivo ya existe

🎨 Convenciones de Código

Nombres de archivos

  • Comandos: {name}.command.ts (kebab-case)
  • Definiciones: {name}.definition.ts (kebab-case)
  • Plugins: {name}.plugin.ts (kebab-case)

Nombres de clases

  • Comandos: {Name}Command (PascalCase)
  • Definiciones: {Name}Definition (PascalCase)
  • Plugins: {Name}Plugin (PascalCase)

Imports

  • Comandos: @/commands/
  • Definiciones: @/definitions/
  • Plugins: @/plugins/

🤝 Contribuir

¡Las contribuciones son bienvenidas! Por favor lee nuestra Guía de Contribución antes de enviar un Pull Request.

Proceso de contribución

  1. Fork el proyecto
  2. Crea una rama para tu feature (git checkout -b feature/AmazingFeature)
  3. Commit tus cambios (git commit -m 'Add some AmazingFeature')
  4. Push a la rama (git push origin feature/AmazingFeature)
  5. Abre un Pull Request

Desarrollo local

# Clonar el repositorio
git clone https://github.com/HormigaDev/patto-cli.git
cd patto-cli

# Instalar dependencias
npm install

# Ejecutar tests
npm test

# Compilar
npm run build

# Ejecutar en modo desarrollo
npm start init MiBot

📝 Licencia

Este proyecto está bajo la Licencia MIT. Ver el archivo LICENSE para más detalles.

👤 Autor

HormigaDev

🔗 Enlaces

🙏 Agradecimientos


¿Te gusta Patto CLI? ⭐ Dale una estrella en GitHub!