Handlers

Handlers processam interações e retornam respostas

Tipos de Handlers

discord-flow suporta 4 tipos de handlers:

command

Slash commands do Discord

button

Cliques em botões

modal

Submissões de modais

select

Seleções em dropdowns

Command Handler

typescript
1.on.command({
2 name: 'ping',
3 description: 'Responde com pong'
4}, (ctx) => ({
5 response: { content: 'Pong!' }
6}));
7
8// Com opções
9.on.command({
10 name: 'say',
11 description: 'Repete uma mensagem',
12 options: [
13 { name: 'text', description: 'Texto para repetir', type: 3, required: true }
14 ]
15}, (ctx) => {
16 const text = ctx.interaction.data?.options?.[0]?.value;
17 return { response: { content: text } };
18});

Button Handler

typescript
1.on.button('btn-confirm', (ctx) => ({
2 response: { content: 'Confirmado!' }
3}));
4
5// Com prefixo dinâmico
6.on.button('delete-*', (ctx) => {
7 const id = ctx.interaction.data?.custom_id?.split('-')[1];
8 return { response: { content: `Deletando ${id}` } };
9});

Modal Handler

typescript
1.on.modal('feedback-modal', (ctx) => {
2 const components = ctx.interaction.data?.components || [];
3 const feedback = components[0]?.components?.[0]?.value;
4
5 return {
6 response: { content: `Feedback recebido: ${feedback}` }
7 };
8});

Select Handler

typescript
1.on.select('role-select', (ctx) => {
2 const values = ctx.interaction.data?.values || [];
3 const selectedRole = values[0];
4
5 return {
6 response: { content: `Selecionou: ${selectedRole}` }
7 };
8});

Retorno do Handler

typescript
1interface HandlerReturn {
2 response?: {
3 content?: string;
4 embeds?: Embed[];
5 components?: Component[];
6 flags?: number;
7 };
8 transition?: string; // Próximo estado
9 data?: unknown; // Dados para persistir
10}