States

Estados representam diferentes etapas do seu flow

O que é um State?

Um State é uma etapa dentro de um Flow. Cada estado pode ter handlers para diferentes tipos de interação (comandos, botões, modais, selects).

Definindo Estados

typescript
1flow.state('nome-do-estado')
2 .on.command({ name: 'cmd' }, handler)
3 .on.button('btn-id', handler)
4 .on.modal('modal-id', handler)
5 .on.select('select-id', handler);

Estado Inicial

Todo flow precisa de um estado inicial definido com flow.start():

typescript
1registry.define('meu-flow', (flow) => {
2 flow.start('idle'); // Define 'idle' como estado inicial
3
4 flow.state('idle')
5 .on.command({ name: 'iniciar' }, () => ({
6 response: { content: 'Iniciando...' },
7 transition: 'step-1'
8 }));
9
10 flow.state('step-1')
11 .on.button('next', () => ({
12 response: { content: 'Próximo passo!' },
13 transition: 'step-2'
14 }));
15});

Transições

Para mudar de estado, retorne transition no handler:

typescript
1// Transição para outro estado
2.on.button('confirm', () => ({
3 response: { content: 'Confirmado!' },
4 transition: 'completed' // Muda para estado 'completed'
5}));
6
7// Sem transição(mantém estado atual)
8.on.button('info', () => ({
9 response: { content: 'Informação...' }
10 // Sem transition = mantém no estado atual
11}));

Contexto do Estado

Handlers recebem um contexto com informações da interação:

typescript
1interface HandlerContext {
2 interaction: DiscordInteraction;
3 user: { id: string; username: string };
4 guild?: { id: string };
5 channel: { id: string };
6 data?: unknown; // Dados persistidos
7}
8
9.on.command({ name: 'info' }, (ctx) => {
10 const userId = ctx.user.id;
11 const guildId = ctx.guild?.id;
12
13 return {
14 response: { content: `User: ${userId}` }
15 };
16});