🔍 /
🧭 Guia

⌨️ Comandos

Como o Logic Script reconhece um comando, separa os argumentos e como criar subcomandos.

Comandos do Logic Script funcionam por prefixo (ex.: !), não são os comandos de barra (/) nativos do Discord. Quando uma mensagem começa com o prefixo do servidor, o Logic Script separa a palavra seguinte como nome do comando e dispara on command("nome", message, args).

on command("oi", message, args)
  message.reply("Oi, " .. message.author.username .. "!")
end
  • O prefixo padrão é !, mas cada servidor pode configurar o seu — o valor atual está disponível na variável global PREFIX.
  • O nome do comando é sempre comparado em minúsculas ("Oi", "OI" e "oi" digitados no Discord caem no mesmo on command("oi", ...)).
  • A mensagem é separada por espaço em branco — não existe suporte a texto entre aspas para juntar palavras num único argumento (!avisar "boa tarde" vira dois argumentos: "boa e tarde", aspas incluídas).

O objeto args — junto com message, todo on command(...) recebe args com o restante do texto já separado por espaço:

  • args._ — array com todos os argumentos, na ordem (args._[0] é o primeiro, args._[1] o segundo...).
  • args["0"], args["1"]... — os mesmos valores, acessíveis também pelo índice como chave (equivalente a args._[0]).
on command("pagar", message, args)
  let paraUserId = args._[0]
  let quantidade = tonumber(args._[1])

  if paraUserId == nil or quantidade == nil then
    message.reply("Uso: !pagar <@usuário> <quantidade>")
    return
  end

  bank.transferirLocal(paraUserId, quantidade)
  message.reply("Transferência concluída! 💸")
end

Subcomandos — o Logic Script não tem uma sintaxe própria pra subcomandos; o padrão é tratar o primeiro argumento como a "ação" com if/elseif:

on command("banco", message, args)
  let acao = args._[0]

  if acao == "saldo" then
    message.reply("Saldo: " .. bank.saldoLocal() .. " moedas")
  elseif acao == "depositar" then
    bank.depositar(tonumber(args._[1]))
    message.reply("Depósito feito! ⭐")
  else
    message.reply("Uso: !banco saldo | !banco depositar <quantidade>")
  end
end

Permissões e cooldown — o Logic Script não tem um jeito declarativo de restringir um comando por cargo/permissão; a checagem é feita manualmente logo no início do bloco, e cooldowns usam cooldown():

on command("mutar", message, args)
  if not contains(message.author.permissions, "MODERATE_MEMBERS") then
    message.reply("Você não tem permissão para isso.")
    return
  end

  if not cooldown("mutar-" .. message.author.id, "10s") then
    message.reply("⏳ Calma aí, espera um pouco antes de usar de novo.")
    return
  end

  -- ação do comando aqui
end
📝 Observação: Dois scripts diferentes não podem registrar o mesmo nome de comando no mesmo servidor — o primeiro handler que bater com commandName é quem roda. Veja Boas práticas pra organizar comandos parecidos numa função compartilhada.

Páginas relacionadas