🧩 Como Criar Comandos Personalizados - RafaPear/CLILib GitHub Wiki

Um dos pontos fortes do CLILib é a facilidade com que podes criar os teus próprios comandos. Basta implementar a interface Command com os campos obrigatórios e o comportamento que pretendes.


✏️ Exemplo básico de comando

object HelloCmd : Command {
    override val description = "Diz olá ao utilizador"
    override val usage = "hello <nome>"
    override val aliases = listOf("hello", "hi")
    override val minArgs = 1
    override val maxArgs = 1

    override fun run(args: List<String>): Boolean {
        println("Olá, ${args[0]}!")
        return true
    }
}

Depois, basta registar o comando:

CmdRegister.register(HelloCmd)

📌 Campos obrigatórios

  • description: descrição curta do comando
  • usage: como se usa o comando (exibido no help)
  • aliases: nomes pelos quais o comando pode ser chamado
  • run(args: List<String>): lógica de execução

⚙️ Campos opcionais úteis

  • minArgs / maxArgs — define número de argumentos esperados
  • requiresFile / fileExtension — valida caminhos de ficheiro
  • commands — define subcomandos ou flags (ex: -h, --list)
  • longDescription — descrição mais detalhada, mostrada no help <comando>

🔁 Comandos dinâmicos com JSON

Também podes criar comandos simples com um ficheiro .json usando mkcmd.

mkcmd exemplo.json

Exemplo de ficheiro exemplo.json:

{
  "description": "Exemplo de comando via JSON",
  "longDescription": "Este comando foi criado a partir de um ficheiro JSON.",
  "usage": "exjson <arg>",
  "aliases": ["exjson"],
  "minArgs": 1,
  "maxArgs": 1,
  "requiresFile": false,
  "fileExtension": "",
  "run": "print arg[0]"
}

✅ Boas práticas

  • Usa validateArgs(args, this) no início da função run
  • Guarda resultados temporários em lastCmdDump (caso queiras usar em var)
  • Usa println com moderação (apenas para mensagens úteis)
  • Dá nomes claros e curtos aos aliases

Com estas ferramentas, podes estender o CLILib para suportar qualquer funcionalidade que precises — desde comandos de sistema até integrações com APIs externas.

⚠️ **GitHub.com Fallback** ⚠️