Referência do SDK
Toda a superfície pública do @trivo/sdk numa página: o que se importa, o que cada objeto oferece e onde o assunto é ensinado.
O que a fachada exporta
import {
createApp, TrivoApp, TrivoClient, // o ciclo de vida
TrivoRest, // o cliente REST, se você o montar à mão
TrivoInteraction, // o objeto de uma interação
TrivoError, // toda recusa do Trivo
InteractionVerifier, interactionResponse, // o endpoint HTTP
BASE_URL_ENV_VAR, TOKEN_ENV_VAR,
DEFAULT_DEDUPE_MAX_ENTRIES, DEFAULT_TIMESTAMP_TOLERANCE_SECONDS,
} from "@trivo/sdk";TrivoClient é o mesmo TrivoApp, sob o nome que quem vem de outra plataforma procura primeiro. É um apelido, e não uma segunda classe: duas implementações da mesma coisa seriam a ambiguidade que este SDK evita no resto todo.
O ciclo de vida: createApp e TrivoApp
| Membro | O que faz |
|---|---|
createApp(options?) | Monta o App. Sem argumento, lê as duas variáveis de ambiente. As opções estão em Instalar e configurar. |
app.applicationId | O id público, extraído do próprio token. É o que o verificador exige. |
app.connect() | Abre o gateway e resolve quando a conexão está de pé. Rejeita quando tentar de novo não conserta: credencial inválida, intent que não existe, endereço errado. |
app.disconnect() | Fecha e devolve a vaga do teto. |
app.on(tipo, handler) | Assina um evento e devolve a função que desassina. Só compila com tipo que um App de fato recebe — evento endereçado a conta é recusado pelo compilador. |
app.onStatus(handler) | O ciclo da conexão. Sem nenhum ouvinte, uma desistência vira uma linha de console.error — nunca silêncio. |
app.onError(handler) | O seu handler lançou. Não derruba a conexão: um erro no seu código não pode desligar o bot. |
app.onInteraction(handler) | Alguém acionou algo deste App, pelo caminho do gateway. Ver Interações. |
app.interaction(payload) | Monta o mesmo objeto a partir de um payload já verificado — é o caminho do endpoint HTTP. |
app.state | O estado da conexão. |
app.pendingEvents | Enfileirados mais em voo. É o número que a sua métrica quer exportar. |
app.rest, método a método
| Método | Devolve | Onde é ensinado |
|---|---|---|
whoAmI() | { app: { publicId, name } } | Autenticação |
getSigningKeys() | As chaves públicas da plataforma | Assinatura das entregas |
getServer | O retrato: server, channels, categories, roles, revision, can, myRank, isOwner | REST |
listMembers | members, roles, truncated | REST |
listMessages | messages e reactions, 50 por página | REST |
sendMessage | message, e moderationWarning quando houver | REST |
editMessage | message. Só alcança mensagem do próprio App | REST |
deleteMessage | { ok: true } | REST |
toggleReaction | count e reacted — é alternância, e não um par de métodos | REST |
createChannel | channels e revision | REST |
updateChannel | channels e revision | REST |
moveChannel | channels, categories e revision | REST |
archiveChannel | channels e revision. Arquiva: some do produto, fica para a moderação | REST |
createRole | roles e revision | Permissões e escopos |
updateRole | roles e revision | Permissões e escopos |
deleteRole | roles e revision | Permissões e escopos |
addMemberRole | roles e revision | Permissões e escopos |
removeMemberRole | roles e revision | Permissões e escopos |
addAppRole | apps e revision. Repare: apps, não roles | Permissões e escopos |
removeAppRole | apps e revision | Permissões e escopos |
listCommands | commands e truncated | Comandos |
createCommand | command. Sem serverId, é global | Comandos |
updateCommand | command. Substitui a definição inteira | Comandos |
deleteCommand | Nada: 204 sem corpo | Comandos |
request() | A porta para o que ainda não virou método, com o mesmo tratamento de 429 e o mesmo erro | REST |
TrivoInteraction
| Membro | O que faz |
|---|---|
reply(content, options?) | Confirma e responde. options é ReplyOptions, e leva private ou components, nunca os dois. O desfecho traz interaction.messageId quando a resposta foi pública — é por ele que se edita ou apaga o que acabou de ser escrito. |
defer() | Confirma sem responder ainda, e abre a janela de 60 s. É também o lock de quem não guarda estado entre execuções. |
deferredReply(content, options?) | A resposta de verdade, depois do defer. Traz messageId como o reply público. |
followUp(content, options?) | Até 5, em 10 minutos. Não muda o estado. |
decline() | Confirma dizendo que não faz. Diferente de sumir, e quem acionou vê a frase certa. |
showModal(modal) | Abre um formulário. O envio chega como uma interação nova, do tipo form. |
suggest(choices) | Só em autocomplete, e é a única resposta que ele aceita junto de decline(). |
id, type, serverId, channelId, userId | Quem acionou e onde. userId é sempre de uma conta: App não aciona interação. |
data | unknown de propósito: a carga muda com o tipo, e o Trivo não a congela. Estreite antes de ler, e nunca a mande para log. |
expiresInMs, expiresAt | A duração é o contrato; expiresAt é o mesmo prazo pelo relógio daqui, para log. Quem decide continua sendo o servidor. |
Os tipos que você vai querer nomear
Estes atravessam as assinaturas públicas, e por isso têm nome na fachada: sem eles, fatorar createRole({ permissions }) numa função sua não teria como tipar o parâmetro, e a saída natural seria any bem no lugar em que o vocabulário é fechado.
import type {
Permission, // "gerenciar_canais" | "banir_membros" | …
ReactionEmoji, // o emoji de uma reação
GatewayIntent, // "messages" | "reactions" | …
InteractionType, // "command" | "autocomplete" | …
CommandOption, // uma opção da árvore de um comando
AutocompleteSuggestions, // o que suggest() aceita
AppModal, // o que showModal() aceita
} from "@trivo/sdk";
function darCargo(nome: string, permissions: readonly Permission[]) {
return app.rest.createRole({ serverId, name: nome, permissions, revision });
}Além destes, a fachada exporta as formas de resposta de cada método (o retrato do servidor, a mensagem, o cargo, o comando registrado), TrivoAppOptions, ErrorCode, GatewayStatus, InteractionOutcome, ReplyOptions e os tipos do verificador. Os nomes públicos são em inglês pela mesma régua que faz o evento se chamar message_create.
ReplyOptions é o segundo argumento de interaction.reply e o de interactionResponse.reply — uma definição só, e não um gêmeo por caminho de entrega. É o que permite fatorar function responder(texto: string, opcoes: ReplyOptions) sem cair no any.
TrivoError e o verificador
Toda recusa do Trivo vira TrivoError, com code de vocabulário fechado, status, is(...) para comparar sem escrever a string duas vezes e os extras da recusa: retryAfterSeconds é campo, e currentRevision e resetAt são acessores que leem o corpo — os três valem null ou undefined na recusa que não os traz. O corpo inteiro continua em erro.body, e o catálogo está em Erros.
InteractionVerifier e interactionResponse são o par do endpoint HTTP: verify decide se a entrega é do Trivo, e interactionResponse monta o corpo da resposta. As duas constantes de configuração — DEFAULT_TIMESTAMP_TOLERANCE_SECONDS e DEFAULT_DEDUPE_MAX_ENTRIES — são exportadas porque quem dimensiona o processo precisa dos números sem abrir o nosso código. O mecanismo está em Assinatura das entregas.