Documentação/Operação
OPERAÇÃO / TROUBLESHOOTING

Solução de problemas

Diagnostique módulos ausentes, workspaces duplicados, comandos que não aparecem e definições de prompt ou paginação não registradas.

MODULE_NOT_FOUNDWorkspaceRegistration

Cannot find module @ninenity/...#

O nome do import precisa combinar com o name do package e o workspace precisa estar mapeado pelo npm.

  1. 1
    Confira o pacote

    Abra o package.json da lib e confirme que name usa exatamente @ninenity/nome.

  2. 2
    Confira dependências

    O package consumidor deve listar a lib em dependencies ou o monorepo precisa expor o workspace.

  3. 3
    Reinstale links

    Execute npm install na raiz para recriar os links simbólicos em node_modules/@ninenity.

  4. 4
    Valide exports

    O main, types e exports da lib precisam apontar para arquivos que realmente existem após o build.

POWERSHELLchecagens na raiz
npm query .workspacenpm ls @ninenity/core @ninenity/componentbuildernpm run build --workspace=@ninenity/core

Multiple workspaces with the same name#

O npm encontrou dois package.json com o mesmo campo name dentro dos padrões de workspace.

POWERSHELLlocalizar nomes duplicados
Get-ChildItem -Recurse -Filter package.json |  Where-Object { $_.FullName -notmatch 'node_modules' } |  ForEach-Object {    $package = Get-Content -Raw $_.FullName | ConvertFrom-Json    [PSCustomObject]@{ Name = $package.name; Path = $_.DirectoryName }  } |  Group-Object Name |  Where-Object Count -gt 1

Dê um nome único para cada app, mesmo que um seja apenas template. Por exemplo, @ninenity/template-bot e @ninenity/example-bot. Depois execute npm install na raiz para atualizar o lockfile.

Slash funciona, prefixo não#

Slash e prefix são registros separados, mesmo quando compartilham o executor.

  • Confirme que existe uma chamada Client.prefix() para aquele nome.
  • O Client precisa do intent GuildMessages e, para ler texto, MessageContent.
  • Habilite Message Content Intent no Discord Developer Portal.
  • Confira o prefixo configurado e se o bot pode ver/enviar mensagens no canal.
  • Para subcomandos, confirme a sintaxe esperada pelo PrefixCommandBuilder.
TSexecutor compartilhado
const execute = async (interaction: InputCommandInteraction) => {  await interaction.reply('Fluxo disponível em slash e prefixo.')}Client.slash({  data: new SlashCommandBuilder().setName('prompt').setDescription('Abre o prompt.'),  execute})Client.prefix({  data: new PrefixCommandBuilder().setName('prompt'),  execute})

Prompt ou paginator is not registered#

A solicitação chegou antes de existir uma definição com o mesmo ID no namespace do Client.

CausaCorreção
ID diferenteCompare exatamente registerPrompt('id') e promptRequest('id')
Arquivo fora do loaderMova o registro para Discord/Interactions ou importe o módulo explicitamente
Arquivo não está no distPreserve a árvore src/Discord no build
Dois ClientsRegistre a definição no mesmo Client que executa o comando
Exceção no móduloLeia o primeiro erro do boot; a importação pode ter parado antes do registro
TSIDs alinhados
// Discord/Interactions/Prompt.tsClient.registerPrompt('example-prompt', promptPages)// Discord/Commands/Prompt.tsawait interaction.promptRequest('example-prompt', { ephemeral: true })

Mensagem Components V2 rejeitada#

  • Inclua MessageFlags.IsComponentsV2 no payload final.
  • Passe template.document() por toDiscordMessagePayload().
  • Não aninhe containers e não misture select com outros itens na mesma action row.
  • Mantenha até 5 botões por linha, 10 itens por galeria e IDs interativos únicos.
  • Botão de link usa URL e não deve ter customId ou callback.
TSenvio correto
await interaction.reply({  ...toDiscordMessagePayload(template.document()),  flags: MessageFlags.IsComponentsV2 | MessageFlags.Ephemeral})

Ordem de diagnóstico#

  1. 1
    Leia o primeiro erro

    Erros seguintes costumam ser consequência da primeira importação ou configuração inválida.

  2. 2
    Reduza para um módulo

    Teste um comando ou template mínimo para separar infraestrutura de regra de negócio.

  3. 3
    Valide TypeScript

    Execute o check do package antes de iniciar o runtime.

  4. 4
    Valide o build

    Confirme que os arquivos carregados existem na árvore compilada.

  5. 5
    Só então limpe cache

    Reinstalar tudo é último recurso; primeiro descubra qual contrato está quebrado.