⌨️ 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 mesmoon 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:"boaetarde", 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 aargs._[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! 💸")
endSubcomandos — 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
endPermissõ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
endcommandName é quem roda. Veja Boas práticas pra organizar comandos parecidos numa função compartilhada.