# Referência rápida
> Consulte os registradores, tipos, builders e métodos mais usados do Core e do ComponentBuilder em um único lugar.

- Área: Operação
- URL humana: https://ninenity.vercel.app/doc/referencia
- URL Markdown: https://ninenity.vercel.app/doc/markdown/referencia
- Pacotes e conceitos: Core API, ComponentBuilder API, Cheat sheet

## Registros do Client

| API | Responsabilidade |
| --- | --- |
| `Client.slash(definition)` | Registra comando slash e deploy de application command |
| `Client.prefix(definition)` | Registra comando por prefixo, aliases, opções e grupos |
| `Client.contextMenu(definition)` | Registra menu de usuário ou mensagem |
| `Client.modal(definition)` | Registra submit handler por `customId` |
| `Client.on(event, definition)` | Executa em toda emissão do evento |
| `Client.once(event, definition)` | Executa somente na primeira emissão |
| `Client.task(definition)` | Registra rotina periódica global ou por guild |
| `Client.registerPrompt(id, definition)` | Registra prompt reutilizável ou factory |
| `Client.registerPaginator(id, definition)` | Registra páginas, Paginator ou factory |

## Runtime e operação do Client

| API | Retorno / efeito |
| --- | --- |
| `Client.appConfig(guildId?)` | Configuração resolvida; valores de variáveis já normalizados |
| `Client.getAppChannels(guildId?)` | Mapa de aliases para `ChannelData` |
| `Client.getAppRoles(guildId?)` | Mapa de aliases para `RoleData` |
| `Client.cooldown(duration?)` | Define ou consulta cooldown no contexto atual |
| `Client.globalCooldown(duration)` | Define cooldown global do usuário |
| `Client.queue(key, task)` | Serializa uma operação e retorna o resultado |
| `Client.runTask(id)` | Executa uma task registrada imediatamente |
| `Client.startTask(id)` | Inicia ou reativa o timer |
| `Client.stopTask(id)` | Interrompe o timer no Client atual |
| `Client.login()` | Conecta ao Discord e inicia o bootstrap |
| `Client.destroy()` | Limpa componentes, tasks, plugins e conexão |

## Interação normalizada

| Propriedade / método | Uso |
| --- | --- |
| `user`, `member`, `guild`, `guildId`, `channel` | Identidade e contexto |
| `options` | Opções de slash/prefix e subcomandos |
| `reply(payload)` | Resposta inicial |
| `deferReply(payload?)` | Reserva resposta para trabalho demorado |
| `editReply(payload)` | Edita a resposta original |
| `followUp(payload)` | Envia resposta adicional |
| `promptRequest(id, options?)` | Cria instância de prompt registrada |
| `paginatorRequest(id, options?)` | Cria instância de paginator registrada |
| `interaction` | Objeto original do Discord.js |

| ComponentRequestOptions | Significado |
| --- | --- |
| `pageIndex` | Página inicial, começando em 0 |
| `ephemeral` | Adiciona flag de resposta efêmera |
| `flags` | Flags adicionais da mensagem |

## Builders de mensagem

| Builder | Métodos principais |
| --- | --- |
| `MessageBuilder` | `setContent`, `addEmbeds`, `addComponents`, `setFlags`, `setAllowedMentions`, `build`, `template` |
| `ContainerBuilder` | `setAccentColor`, `setSpoiler`, `setId`, `addComponents` e aliases tipados |
| `TextDisplayBuilder` | `setContent`, `setId` |
| `SeparatorBuilder` | `setDivider`, `setSpacing`, `setId` |
| `SectionBuilder` | `setContent`, `addTextDisplayComponents`, `setAccessory`, `setButtonAccessory`, `setThumbnailAccessory` |
| `ThumbnailBuilder` | `setURL`, `setDescription`, `setSpoiler`, `setId` |
| `MediaGalleryBuilder` | `addItems`, `setId`, `build` |
| `MediaGalleryItemBuilder` | `setURL`, `setDescription`, `setSpoiler`, `build` |
| `FileBuilder` | `setURL`, `setSpoiler`, `setId` |
| `ActionRowBuilder` | `addComponents`, `setId`, `build` |

## Builders interativos

| Builder | Métodos principais |
| --- | --- |
| `ButtonBuilder` | `setCustomId`, `setCallback`, `setURL`, `setLabel`, `setEmoji`, `setStyle`, `setDisabled`, `setPaginationAction` |
| `StringSelectMenuBuilder` | `setCustomId`, `setCallback`, `setPlaceholder`, `setMinValues`, `setMaxValues`, `addOptions` |
| `UserSelectMenuBuilder` | Seleção nativa de usuários + métodos comuns de select |
| `RoleSelectMenuBuilder` | Seleção nativa de cargos + métodos comuns de select |
| `ChannelSelectMenuBuilder` | Seleção nativa de canais + métodos comuns de select |
| `MentionableSelectMenuBuilder` | Seleção de usuários ou cargos + métodos comuns |
| `SelectMenuOptionBuilder` | `setLabel`, `setValue`, `setDescription`, `setEmoji`, `setDefault` |

### assinatura de callback

```text

.setCallback(async (interaction, id, context) => {
  context.customId       // ID completo
  context.values         // todos os valores de select
  context.value          // primeiro valor, quando existe
  context.componentType  // tipo recebido do Discord
})
```


## ComponentTemplate

| API | Uso |
| --- | --- |
| `ComponentTemplate.create(document, metadata?)` | Cria template a partir de documento |
| `ComponentTemplate.from(input)` | Normaliza template, definição ou documento |
| `ComponentTemplate.fromJSON(json)` | Importa representação JSON |
| `template.document()` | Retorna cópia do documento |
| `template.render(context)` | Hidrata tokens com um contexto |
| `template.validate()` | Valida estrutura e limites |
| `template.toJSON()` | Exporta representação JSON |
| `template.toToken()` | Gera token assinado quando configurado |
| `template.toUnsignedToken()` | Gera token sem assinatura para fluxo local |
| `template.toTypeScript()` | Exporta uma representação TypeScript |

## Paginator e Prompt

| API | Uso |
| --- | --- |
| `Paginator.static({ pages })` | Páginas prontas |
| `Paginator.dynamic({ data, pageSize, render })` | Divide dados e renderiza cada fatia |
| `Paginator.hybrid({ intro, data, pageSize, render })` | Introdução fixa seguida de dados |
| `paginator.state(pageIndex?)` | Estado normalizado da página |
| `paginator.render(pageIndex?)` | Template da página |
| `paginator.renderDocument(pageIndex?)` | Documento pronto |
| `Prompt.create(options)` | Prompt a partir de template e opções |
| `Prompt.fromPages(pages, options?)` | Prompt roteado por páginas exportadas |
| `prompt.render()` | Template da pergunta |
| `prompt.resolveOption(customId)` | Resolve a opção pelo ID completo |
| `prompt.resolvePage(optionId)` | Encontra página associada à opção |

## Imports rápidos

### core-imports.ts

```text

import {
  Ninenity,
  LibsClient,
  Color,
  I18n,
  SlashCommandBuilder,
  PrefixCommandBuilder,
  ContextMenuCommandBuilder,
  GatewayIntentBits,
  Events,
  MessageFlags,
  type AppConfig,
  type InputCommandInteraction
} from '@ninenity/core'
```


### component-imports.ts

```text

import {
  MessageBuilder,
  ContainerBuilder,
  TextDisplayBuilder,
  SeparatorBuilder,
  SectionBuilder,
  ThumbnailBuilder,
  MediaGalleryBuilder,
  FileBuilder,
  ActionRowBuilder,
  ButtonBuilder,
  StringSelectMenuBuilder,
  ButtonStyle,
  ComponentTemplate,
  Paginator,
  Prompt,
  toDiscordMessagePayload
} from '@ninenity/componentbuilder'
```
