Scripting

Scripts e instalações

Crie scripts mutáveis, publique versões e instale releases exatas com segurança.

Publicado por solever7 solever7
scripts instalações ask dependências

A Macchi usa palavras diferentes para ciclos de vida diferentes. Adicionar cria um
script mutável de uma pessoa, servidor ou canal. Publicar congela uma versão
positiva. Instalar liga essa publicação imutável exata a um contexto sem copiar o
código. Excluir remove um script mutável; Desinstalar remove uma instalação.
Dependências necessárias bloqueiam ações destrutivas em vez de serem removidas
silenciosamente.

Referências E Versões

u123/welcome@0 é o rascunho mutável atual. u123/welcome@2 é a versão 2 imutável.
Autores do tipo servidor e canal usam g e c. Instalação sempre exige uma versão positiva
exata; referência sem versão ou com @0 é recusada. O código público usado na
descoberta da biblioteca não é a referência canônica.

O Snapshot Da Execução

ctx.scripts é carregado uma vez e fica estável durante uma execução. Ele tem no máximo
32 itens em ordem determinística. all(), user(), server(), channel() e
installations() retornam listas limitadas. find(name) e findRef(reference)
pesquisam nesse snapshot.

Cada item informa se pode executar, ser gerenciado e ter o código lido. Esses estados
são independentes. Uma instalação pública executável não expõe o código pelo snapshot
privado. O alvo também carrega um identificador opaco; a Macchi recusa identificadores
fabricados ou copiados de outra execução.

Propostas Ask

Chamadas Ask recebem uma tabela estrita e recusam campos desconhecidos. A chamada só
cria uma proposta válida por três minutos no transporte atual:

macchi.ask:forAdd({
  name = "welcome",
  scope = "channel",
  description = "Dá boas-vindas",
  capabilities = {},
  enable = true
})
macchi.ask:forInstall({
  script = "u123/welcome@2",
  scope = "server",
  enable = true
})

Alvos mutáveis existentes vêm de ctx.scripts:

local target = ctx.scripts:find("welcome")
macchi.ask:forUpdate({ script = target, description = "Nova descrição" })
macchi.ask:forCapabilities({ script = target })
macchi.ask:forEnable({ script = target })
macchi.ask:forDisable({ script = target })
macchi.ask:forPublish({ script = target })
macchi.ask:forDelete({ script = target })

Instalações usam forUninstall. Aceitar e Cancelar pertencem à Macchi; nenhum handler
Lua roda depois da proposta. Ao aceitar, a Macchi resolve o estado atual, atualiza a
permissão do Discord, recalcula dependências e só então usa a mutação canônica. Reinício
do host, mudança de pessoa/contexto ou mudança do plano expira a proposta com segurança.
Ask nunca reserva permissão.

Dependências E Capacidades

Manifestos publicados usam referências imutáveis exatas. O plano distingue itens já
instalados, novos e conflitantes e é recalculado após Aceitar. Dependências recebem
instalações separadas e não herdam autoridade, ativação ou capacidades adicionadas.

Capacidades continuam solicitadas, adicionadas e efetivas. Instalar não
ignora permissões atuais do Discord, hierarquia, cotas ou autoridade. Controles
interativos usam a política normal de saída e não exigem capacidade adicional; os grupos
amplos de moderação e armazenamento ainda exigem que a capacidade seja adicionada
explicitamente. Uma capacidade nunca substitui permissões atuais do Discord, hierarquia,
escopo, cotas ou validação do alvo confiável. O armazenamento persistente é compartilhado
por usuário, servidor ou canal; storage.write pode substituir valores usados por outros
scripts no mesmo escopo.

Limites Atuais

Propostas Ask e controles de código verificado continuam locais ao processo e presos ao
host. Rotas Lua duráveis de componentes/modais podem ser reivindicadas por um host atual
capaz, mas Ask não é encaminhado entre hosts. A revisão de upgrade ainda não é pública:
o modelo de versão exata detecta conflitos, mas não substitui silenciosamente uma
instalação existente.