Pular para conteúdo

DISCORD_EDIT_MESSAGE - Editar Mensagem Existente no Discord

O que é este Node?

O DISCORD_EDIT_MESSAGE é o node responsável por modificar mensagens já enviadas no Discord, permitindo atualizar conteúdo de texto e embeds de mensagens existentes.

Por que este Node existe?

Editar mensagens é essencial para manter informações atualizadas sem criar spam. O DISCORD_EDIT_MESSAGE existe para:

  1. Atualizar Status em Tempo Real: Modificar mensagem de status enquanto processo está em andamento
  2. Corrigir Informações: Atualizar dados que mudaram após envio original
  3. Dashboards Dinâmicos: Manter um único embed de dashboard sempre atualizado
  4. Reduzir Spam: Evitar múltiplas mensagens atualizando uma única existente

Como funciona internamente?

Quando o DISCORD_EDIT_MESSAGE é executado, o sistema:

  1. Valida Autenticação: Verifica bot token (webhooks NÃO suportam edição)
  2. Valida Message ID: Garante que messageId foi fornecido
  3. Valida Conteúdo: Verifica se content ou embed foi especificado
  4. Prepara Payload: Monta JSON com novo content e/ou embeds
  5. Envia PATCH: Atualiza mensagem via PATCH /channels/{channelId}/messages/{messageId}
  6. Retorna Mensagem Atualizada: Devolve objeto da mensagem editada
  7. Trata Erros: Lida com mensagem não encontrada, sem permissão, etc

Código interno (discord-executor.service.ts:379-401):

private async editMessage(data: DiscordNodeData): Promise<any> {
  if (data.authType !== 'bot') {
    throw new Error('Message editing is only available with bot authentication');
  }

  const payload: any = {};

  if (data.content !== undefined) payload.content = data.content;
  if (data.embed) payload.embeds = [this.buildEmbed(data.embed)];

  const response: AxiosResponse = await axios.patch(
    `${this.DISCORD_API_BASE}/channels/${data.channelId}/messages/${data.messageId}`,
    payload,
    {
      headers: {
        'Authorization': `Bot ${data.botToken}`,
        'Content-Type': 'application/json'
      }
    }
  );

  return response.data;
}

Quando você DEVE usar este Node?

Use DISCORD_EDIT_MESSAGE sempre que precisar de atualizar mensagens existentes:

Casos de uso

  1. Status de Deploy: "Atualizar mensagem de 'Deploy em andamento...' para 'Deploy concluído ✅'"
  2. Contadores em Tempo Real: "Atualizar embed de dashboard com novas métricas a cada minuto"
  3. Progresso de Tasks: "Modificar mensagem conforme tasks são completadas (0/5 → 3/5 → 5/5)"
  4. Correção de Dados: "Atualizar informação incorreta que foi enviada anteriormente"
  5. Atualização de Embed: "Modificar campos de embed para refletir mudanças de estado"

Quando NÃO usar DISCORD_EDIT_MESSAGE

  • Mensagens de Webhook: Webhooks não suportam edição - use DISCORD_SEND_MESSAGE novamente
  • Mensagens Muito Antigas: Discord pode limitar edição de mensagens antigas (nenhum limite oficial)
  • Mensagens de Outros Bots: Você só pode editar mensagens do próprio bot
  • Logs Imutáveis: Para auditoria, prefira criar nova mensagem ao invés de editar

Parâmetros Detalhados

operation (string, obrigatório)

O que é: Define a operação como edição de mensagem.

Valor: "edit_message"

Flow completo para testar:

{
  "name": "Teste Discord - Edit Message",
  "nodes": [
    {
      "id": "start_1",
      "type": "start",
      "position": { "x": 100, "y": 100 },
      "data": { "label": "Início" }
    },
    {
      "id": "discord_1",
      "type": "discord",
      "position": { "x": 300, "y": 100 },
      "data": {
        "label": "Enviar Original",
        "parameters": {
          "operation": "send_message",
          "authType": "bot",
          "botToken": "SEU_BOT_TOKEN",
          "channelId": "SEU_CHANNEL_ID",
          "content": "Processando... ⏳"
        }
      }
    },
    {
      "id": "delay_1",
      "type": "delay",
      "position": { "x": 500, "y": 100 },
      "data": {
        "label": "Aguardar",
        "parameters": {
          "delay": 3000
        }
      }
    },
    {
      "id": "discord_2",
      "type": "discord",
      "position": { "x": 700, "y": 100 },
      "data": {
        "label": "Editar Mensagem",
        "parameters": {
          "operation": "edit_message",
          "authType": "bot",
          "botToken": "SEU_BOT_TOKEN",
          "channelId": "SEU_CHANNEL_ID",
          "messageId": "{{messageId_from_discord_1}}",
          "content": "Concluído! ✅"
        }
      }
    },
    {
      "id": "message_1",
      "type": "message",
      "position": { "x": 900, "y": 100 },
      "data": {
        "label": "Confirmar",
        "parameters": {
          "message": "Mensagem editada com sucesso!"
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 1100, "y": 100 },
      "data": { "label": "Fim" }
    }
  ],
  "edges": [
    { "source": "start_1", "target": "discord_1" },
    { "source": "discord_1", "target": "delay_1" },
    { "source": "delay_1", "target": "discord_2" },
    { "source": "discord_2", "target": "message_1" },
    { "source": "message_1", "target": "end_1" }
  ]
}

Teste: Mensagem aparecerá como "Processando..." e após 3 segundos será editada para "Concluído! ✅".

authType (string, obrigatório)

O que é: Tipo de autenticação. DEVE SER "bot" - webhooks não suportam edição.

Valor: "bot" (obrigatório)

Flow completo para testar:

{
  "name": "Teste Discord - Auth Type Bot",
  "nodes": [
    {
      "id": "start_1",
      "type": "start",
      "position": { "x": 100, "y": 100 },
      "data": { "label": "Início" }
    },
    {
      "id": "variable_1",
      "type": "variable",
      "position": { "x": 300, "y": 100 },
      "data": {
        "label": "Config Bot",
        "parameters": {
          "name": "botToken",
          "value": "SEU_BOT_TOKEN"
        }
      }
    },
    {
      "id": "variable_2",
      "type": "variable",
      "position": { "x": 300, "y": 200 },
      "data": {
        "label": "Config Canal",
        "parameters": {
          "name": "channelId",
          "value": "SEU_CHANNEL_ID"
        }
      }
    },
    {
      "id": "discord_1",
      "type": "discord",
      "position": { "x": 500, "y": 150 },
      "data": {
        "label": "Editar com Bot",
        "parameters": {
          "operation": "edit_message",
          "authType": "bot",
          "botToken": "{{botToken}}",
          "channelId": "{{channelId}}",
          "messageId": "1234567890123456789",
          "content": "Mensagem editada via bot!"
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 700, "y": 150 },
      "data": { "label": "Fim" }
    }
  ],
  "edges": [
    { "source": "start_1", "target": "variable_1" },
    { "source": "variable_1", "target": "variable_2" },
    { "source": "variable_2", "target": "discord_1" },
    { "source": "discord_1", "target": "end_1" }
  ]
}

Teste: Apenas bots podem editar mensagens. Webhooks retornarão erro.

botToken (string, obrigatório)

O que é: Token de autenticação do bot Discord. Obrigatório para edição.

Flow completo para testar:

Veja exemplo acima em authType.

channelId (string, obrigatório)

O que é: ID do canal onde a mensagem está localizada.

Formato: "123456789012345678" (18 dígitos)

Flow completo para testar:

{
  "name": "Teste Discord - Channel ID Edit",
  "nodes": [
    {
      "id": "start_1",
      "type": "start",
      "position": { "x": 100, "y": 100 },
      "data": { "label": "Início" }
    },
    {
      "id": "discord_1",
      "type": "discord",
      "position": { "x": 300, "y": 100 },
      "data": {
        "label": "Editar em Canal",
        "parameters": {
          "operation": "edit_message",
          "authType": "bot",
          "botToken": "SEU_BOT_TOKEN",
          "channelId": "987654321098765432",
          "messageId": "1234567890123456789",
          "content": "Mensagem atualizada no canal correto!"
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 500, "y": 100 },
      "data": { "label": "Fim" }
    }
  ],
  "edges": [
    { "source": "start_1", "target": "discord_1" },
    { "source": "discord_1", "target": "end_1" }
  ]
}

Teste: Mensagem será editada no canal especificado.

messageId (string, obrigatório)

O que é: ID da mensagem a ser editada. Obtido da resposta do node que criou a mensagem.

Formato: "123456789012345678" (18 dígitos)

Como obter: Resposta de SEND_MESSAGE/SEND_EMBED contém id da mensagem

Flow completo para testar:

{
  "name": "Teste Discord - Message ID",
  "nodes": [
    {
      "id": "start_1",
      "type": "start",
      "position": { "x": 100, "y": 100 },
      "data": { "label": "Início" }
    },
    {
      "id": "discord_1",
      "type": "discord",
      "position": { "x": 300, "y": 100 },
      "data": {
        "label": "Criar Mensagem",
        "parameters": {
          "operation": "send_message",
          "authType": "bot",
          "botToken": "SEU_BOT_TOKEN",
          "channelId": "SEU_CHANNEL_ID",
          "content": "Status inicial: Aguardando..."
        }
      }
    },
    {
      "id": "variable_1",
      "type": "variable",
      "position": { "x": 500, "y": 100 },
      "data": {
        "label": "Salvar Message ID",
        "parameters": {
          "name": "savedMessageId",
          "value": "{{discord_1.data.id}}"
        }
      }
    },
    {
      "id": "delay_1",
      "type": "delay",
      "position": { "x": 700, "y": 100 },
      "data": {
        "label": "Aguardar 5s",
        "parameters": {
          "delay": 5000
        }
      }
    },
    {
      "id": "discord_2",
      "type": "discord",
      "position": { "x": 900, "y": 100 },
      "data": {
        "label": "Atualizar Status",
        "parameters": {
          "operation": "edit_message",
          "authType": "bot",
          "botToken": "SEU_BOT_TOKEN",
          "channelId": "SEU_CHANNEL_ID",
          "messageId": "{{savedMessageId}}",
          "content": "Status final: Concluído! ✅"
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 1100, "y": 100 },
      "data": { "label": "Fim" }
    }
  ],
  "edges": [
    { "source": "start_1", "target": "discord_1" },
    { "source": "discord_1", "target": "variable_1" },
    { "source": "variable_1", "target": "delay_1" },
    { "source": "delay_1", "target": "discord_2" },
    { "source": "discord_2", "target": "end_1" }
  ]
}

Teste: Mensagem será criada, ID salvo, e depois editada após 5 segundos.

content (string, opcional)

O que é: Novo texto da mensagem. Se não especificado e houver embed, apenas embed é editado.

Limite: 2000 caracteres

Flow completo para testar:

{
  "name": "Teste Discord - Edit Content",
  "nodes": [
    {
      "id": "start_1",
      "type": "start",
      "position": { "x": 100, "y": 100 },
      "data": { "label": "Início" }
    },
    {
      "id": "input_1",
      "type": "input",
      "position": { "x": 300, "y": 100 },
      "data": {
        "label": "Novo Conteúdo",
        "parameters": {
          "message": "Digite o novo conteúdo da mensagem:",
          "variableName": "newContent"
        }
      }
    },
    {
      "id": "discord_1",
      "type": "discord",
      "position": { "x": 500, "y": 100 },
      "data": {
        "label": "Atualizar Conteúdo",
        "parameters": {
          "operation": "edit_message",
          "authType": "bot",
          "botToken": "SEU_BOT_TOKEN",
          "channelId": "SEU_CHANNEL_ID",
          "messageId": "1234567890123456789",
          "content": "{{newContent}}"
        }
      }
    },
    {
      "id": "message_1",
      "type": "message",
      "position": { "x": 700, "y": 100 },
      "data": {
        "label": "Confirmar",
        "parameters": {
          "message": "Conteúdo atualizado para: {{newContent}}"
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 900, "y": 100 },
      "data": { "label": "Fim" }
    }
  ],
  "edges": [
    { "source": "start_1", "target": "input_1" },
    { "source": "input_1", "target": "discord_1" },
    { "source": "discord_1", "target": "message_1" },
    { "source": "message_1", "target": "end_1" }
  ]
}

Teste: Digite novo texto e veja mensagem ser atualizada no Discord.

embed (object, opcional)

O que é: Novo embed para substituir o existente ou adicionar se não havia.

Estrutura: Mesma do SEND_EMBED (title, description, color, fields, etc)

Flow completo para testar:

{
  "name": "Teste Discord - Edit Embed",
  "nodes": [
    {
      "id": "start_1",
      "type": "start",
      "position": { "x": 100, "y": 100 },
      "data": { "label": "Início" }
    },
    {
      "id": "discord_1",
      "type": "discord",
      "position": { "x": 300, "y": 100 },
      "data": {
        "label": "Criar Embed Original",
        "parameters": {
          "operation": "send_embed",
          "authType": "bot",
          "botToken": "SEU_BOT_TOKEN",
          "channelId": "SEU_CHANNEL_ID",
          "embed": {
            "title": "⏳ Deploy em Andamento",
            "description": "Aguarde enquanto fazemos deploy...",
            "color": 16776960,
            "fields": [
              {
                "name": "Status",
                "value": "Em progresso...",
                "inline": true
              },
              {
                "name": "Progresso",
                "value": "25%",
                "inline": true
              }
            ]
          }
        }
      }
    },
    {
      "id": "variable_1",
      "type": "variable",
      "position": { "x": 500, "y": 100 },
      "data": {
        "label": "Salvar ID",
        "parameters": {
          "name": "msgId",
          "value": "{{discord_1.data.id}}"
        }
      }
    },
    {
      "id": "delay_1",
      "type": "delay",
      "position": { "x": 700, "y": 100 },
      "data": {
        "label": "Aguardar 5s",
        "parameters": {
          "delay": 5000
        }
      }
    },
    {
      "id": "discord_2",
      "type": "discord",
      "position": { "x": 900, "y": 100 },
      "data": {
        "label": "Atualizar Embed",
        "parameters": {
          "operation": "edit_message",
          "authType": "bot",
          "botToken": "SEU_BOT_TOKEN",
          "channelId": "SEU_CHANNEL_ID",
          "messageId": "{{msgId}}",
          "embed": {
            "title": "✅ Deploy Concluído",
            "description": "Deploy realizado com sucesso!",
            "color": 5763719,
            "fields": [
              {
                "name": "Status",
                "value": "Completo ✓",
                "inline": true
              },
              {
                "name": "Progresso",
                "value": "100%",
                "inline": true
              },
              {
                "name": "Duração",
                "value": "5 segundos",
                "inline": false
              }
            ]
          }
        }
      }
    },
    {
      "id": "message_1",
      "type": "message",
      "position": { "x": 1100, "y": 100 },
      "data": {
        "label": "Confirmar",
        "parameters": {
          "message": "Embed atualizado com sucesso!"
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 1300, "y": 100 },
      "data": { "label": "Fim" }
    }
  ],
  "edges": [
    { "source": "start_1", "target": "discord_1" },
    { "source": "discord_1", "target": "variable_1" },
    { "source": "variable_1", "target": "delay_1" },
    { "source": "delay_1", "target": "discord_2" },
    { "source": "discord_2", "target": "message_1" },
    { "source": "message_1", "target": "end_1" }
  ]
}

Teste: Embed amarelo "Em andamento" se tornará verde "Concluído" após 5 segundos.

Parâmetros

Campo Tipo Obrigatório Descrição
operation string Sim Deve ser "edit_message"
authType string Sim Deve ser "bot" (webhooks não suportam)
botToken string Sim Token do bot Discord
channelId string Sim ID do canal onde está a mensagem
messageId string Sim ID da mensagem a ser editada
content string Não Novo texto da mensagem
embed object Não Novo embed (substitui existente)

Exemplo 1: Dashboard de Status em Tempo Real

Objetivo: Manter um único embed de status sempre atualizado ao invés de criar múltiplas mensagens.

JSON para Importar

{
  "name": "Discord - Dashboard Status Tempo Real",
  "nodes": [
    {
      "id": "start_1",
      "type": "start",
      "position": { "x": 100, "y": 100 },
      "data": { "label": "Início" }
    },
    {
      "id": "discord_1",
      "type": "discord",
      "position": { "x": 300, "y": 100 },
      "data": {
        "label": "Criar Dashboard Inicial",
        "parameters": {
          "operation": "send_embed",
          "authType": "bot",
          "botToken": "SEU_BOT_TOKEN",
          "channelId": "SEU_CHANNEL_ID",
          "embed": {
            "title": "📊 Dashboard do Sistema",
            "description": "Status atualizado em tempo real",
            "color": 5793266,
            "fields": [
              {
                "name": "🌐 Web Server",
                "value": "⏳ Verificando...",
                "inline": true
              },
              {
                "name": "📦 Database",
                "value": "⏳ Verificando...",
                "inline": true
              },
              {
                "name": "📧 Mail Server",
                "value": "⏳ Verificando...",
                "inline": true
              }
            ],
            "footer": {
              "text": "Última atualização"
            },
            "timestamp": "2025-01-15T14:30:00.000Z"
          }
        }
      }
    },
    {
      "id": "variable_1",
      "type": "variable",
      "position": { "x": 500, "y": 100 },
      "data": {
        "label": "Salvar Dashboard ID",
        "parameters": {
          "name": "dashboardId",
          "value": "{{discord_1.data.id}}"
        }
      }
    },
    {
      "id": "delay_1",
      "type": "delay",
      "position": { "x": 700, "y": 100 },
      "data": {
        "label": "Aguardar Checagem",
        "parameters": {
          "delay": 3000
        }
      }
    },
    {
      "id": "discord_2",
      "type": "discord",
      "position": { "x": 900, "y": 100 },
      "data": {
        "label": "Atualizar Status",
        "parameters": {
          "operation": "edit_message",
          "authType": "bot",
          "botToken": "SEU_BOT_TOKEN",
          "channelId": "SEU_CHANNEL_ID",
          "messageId": "{{dashboardId}}",
          "embed": {
            "title": "📊 Dashboard do Sistema",
            "description": "Status atualizado em tempo real",
            "color": 5763719,
            "fields": [
              {
                "name": "🌐 Web Server",
                "value": "✅ Online (98ms)",
                "inline": true
              },
              {
                "name": "📦 Database",
                "value": "✅ Online (45ms)",
                "inline": true
              },
              {
                "name": "📧 Mail Server",
                "value": "⚠️ Lento (890ms)",
                "inline": true
              },
              {
                "name": "💾 Disk Usage",
                "value": "45% (450GB / 1TB)",
                "inline": false
              }
            ],
            "footer": {
              "text": "Última atualização"
            },
            "timestamp": "2025-01-15T14:30:03.000Z"
          }
        }
      }
    },
    {
      "id": "message_1",
      "type": "message",
      "position": { "x": 1100, "y": 100 },
      "data": {
        "label": "Confirmar",
        "parameters": {
          "message": "Dashboard atualizado com status dos servidores!"
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 1300, "y": 100 },
      "data": { "label": "Fim" }
    }
  ],
  "edges": [
    { "source": "start_1", "target": "discord_1" },
    { "source": "discord_1", "target": "variable_1" },
    { "source": "variable_1", "target": "delay_1" },
    { "source": "delay_1", "target": "discord_2" },
    { "source": "discord_2", "target": "message_1" },
    { "source": "message_1", "target": "end_1" }
  ]
}

Saída esperada no Discord:

[Inicial - Azul]
📊 Dashboard do Sistema
Status atualizado em tempo real

🌐 Web Server    📦 Database    📧 Mail Server
⏳ Verificando...  ⏳ Verificando...  ⏳ Verificando...

[Após 3s - Verde]
📊 Dashboard do Sistema
Status atualizado em tempo real

🌐 Web Server         📦 Database          📧 Mail Server
✅ Online (98ms)     ✅ Online (45ms)     ⚠️ Lento (890ms)

💾 Disk Usage
45% (450GB / 1TB)

[Footer: Última atualização • 15 de janeiro de 2025 às 14:30:03]

Exemplo 2: Progresso de Tasks

Objetivo: Atualizar mensagem conforme tasks são completadas.

JSON para Importar

{
  "name": "Discord - Progresso de Tasks",
  "nodes": [
    {
      "id": "start_1",
      "type": "start",
      "position": { "x": 100, "y": 100 },
      "data": { "label": "Início" }
    },
    {
      "id": "discord_1",
      "type": "discord",
      "position": { "x": 300, "y": 100 },
      "data": {
        "label": "Criar Tracker",
        "parameters": {
          "operation": "send_message",
          "authType": "bot",
          "botToken": "SEU_BOT_TOKEN",
          "channelId": "SEU_CHANNEL_ID",
          "content": "📝 **Processamento Iniciado**\n\nTasks: ⬜⬜⬜⬜⬜ 0/5"
        }
      }
    },
    {
      "id": "variable_1",
      "type": "variable",
      "position": { "x": 500, "y": 100 },
      "data": {
        "label": "Salvar ID",
        "parameters": {
          "name": "trackerId",
          "value": "{{discord_1.data.id}}"
        }
      }
    },
    {
      "id": "delay_1",
      "type": "delay",
      "position": { "x": 700, "y": 50 },
      "data": {
        "label": "Task 1",
        "parameters": {
          "delay": 1000
        }
      }
    },
    {
      "id": "discord_2",
      "type": "discord",
      "position": { "x": 900, "y": 50 },
      "data": {
        "label": "Update 1/5",
        "parameters": {
          "operation": "edit_message",
          "authType": "bot",
          "botToken": "SEU_BOT_TOKEN",
          "channelId": "SEU_CHANNEL_ID",
          "messageId": "{{trackerId}}",
          "content": "📝 **Processamento em Andamento**\n\nTasks: ✅⬜⬜⬜⬜ 1/5"
        }
      }
    },
    {
      "id": "delay_2",
      "type": "delay",
      "position": { "x": 700, "y": 150 },
      "data": {
        "label": "Task 2",
        "parameters": {
          "delay": 1000
        }
      }
    },
    {
      "id": "discord_3",
      "type": "discord",
      "position": { "x": 900, "y": 150 },
      "data": {
        "label": "Update 2/5",
        "parameters": {
          "operation": "edit_message",
          "authType": "bot",
          "botToken": "SEU_BOT_TOKEN",
          "channelId": "SEU_CHANNEL_ID",
          "messageId": "{{trackerId}}",
          "content": "📝 **Processamento em Andamento**\n\nTasks: ✅✅⬜⬜⬜ 2/5"
        }
      }
    },
    {
      "id": "delay_3",
      "type": "delay",
      "position": { "x": 700, "y": 250 },
      "data": {
        "label": "Task 3-5",
        "parameters": {
          "delay": 3000
        }
      }
    },
    {
      "id": "discord_4",
      "type": "discord",
      "position": { "x": 900, "y": 250 },
      "data": {
        "label": "Update 5/5",
        "parameters": {
          "operation": "edit_message",
          "authType": "bot",
          "botToken": "SEU_BOT_TOKEN",
          "channelId": "SEU_CHANNEL_ID",
          "messageId": "{{trackerId}}",
          "content": "✅ **Processamento Concluído**\n\nTasks: ✅✅✅✅✅ 5/5\n\nTodos os processos foram finalizados com sucesso!"
        }
      }
    },
    {
      "id": "message_1",
      "type": "message",
      "position": { "x": 1100, "y": 250 },
      "data": {
        "label": "Confirmar",
        "parameters": {
          "message": "Todas as tasks foram completadas!"
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 1300, "y": 250 },
      "data": { "label": "Fim" }
    }
  ],
  "edges": [
    { "source": "start_1", "target": "discord_1" },
    { "source": "discord_1", "target": "variable_1" },
    { "source": "variable_1", "target": "delay_1" },
    { "source": "delay_1", "target": "discord_2" },
    { "source": "discord_2", "target": "delay_2" },
    { "source": "delay_2", "target": "discord_3" },
    { "source": "discord_3", "target": "delay_3" },
    { "source": "delay_3", "target": "discord_4" },
    { "source": "discord_4", "target": "message_1" },
    { "source": "message_1", "target": "end_1" }
  ]
}

Saída esperada no Discord:

[Inicial]
📝 Processamento Iniciado
Tasks: ⬜⬜⬜⬜⬜ 0/5

[Após 1s]
📝 Processamento em Andamento
Tasks: ✅⬜⬜⬜⬜ 1/5

[Após 2s]
📝 Processamento em Andamento
Tasks: ✅✅⬜⬜⬜ 2/5

[Após 5s]
✅ Processamento Concluído
Tasks: ✅✅✅✅✅ 5/5

Todos os processos foram finalizados com sucesso!

Resposta do Node

{
  "id": "1234567890123456789",
  "channel_id": "987654321098765432",
  "author": {
    "id": "bot_user_id",
    "username": "Seu Bot",
    "bot": true
  },
  "content": "✅ Processamento Concluído\n\nTasks: ✅✅✅✅✅ 5/5",
  "edited_timestamp": "2025-01-15T14:30:05.000Z",
  "timestamp": "2025-01-15T14:30:00.000Z",
  "embeds": [],
  "type": 0
}

Boas Práticas

SIM:

  • Use apenas com bots (webhooks não suportam edição)
  • Salve message ID imediatamente após criar mensagem
  • Use para atualizar status/progresso em tempo real
  • Combine com DELAY para criar animações de progresso
  • Valide que message ID existe antes de tentar editar
  • Use para corrigir informações incorretas
  • Mantenha histórico de edições importantes em logs
  • Use edited_timestamp para saber quando foi editada
  • Edite embeds completos (substitui todo o array)
  • Use para dashboards que atualizam periodicamente

NÃO:

  • Não tente editar mensagens de webhooks
  • Não tente editar mensagens de outros bots
  • Não edite mensagens muito antigas sem testar
  • Não abuse de edições (pode parecer spam)
  • Não ignore erros 404 (mensagem deletada)
  • Não edite logs de auditoria (mantenha imutáveis)
  • Não esqueça de passar content OU embed (pelo menos um)
  • Não hardcode message IDs (sempre use variáveis)
  • Não tente editar mensagens em canais sem permissão
  • Não edite mensagens frequentemente (respeite rate limits)

Dicas

💡 Dica 1: Message ID vem na resposta de SEND_MESSAGE/SEND_EMBED no campo data.id.

💡 Dica 2: Se passar apenas content, embeds existentes serão removidos. Se passar apenas embed, content existente permanece.

💡 Dica 3: Use LOOP node para criar dashboards que atualizam a cada X segundos.

💡 Dica 4: edited_timestamp na resposta indica quando a mensagem foi editada pela última vez.

💡 Dica 5: Combine com CONDITION para editar apenas se algo mudou (evita edições desnecessárias).

💡 Dica 6: Rate limit de edição: 5 por 5 segundos por canal. Planeje updates conforme isso.

💡 Dica 7: Discord mostra "(editado)" ao lado de mensagens editadas. Usuários verão que foi modificada.

Próximo Node

DISCORD_SEND_MESSAGE - Enviar mensagens de texto simples → DISCORD_SEND_EMBED - Enviar embeds formatados → DISCORD_SEND_FILE - Enviar arquivos e mídias → DISCORD_DELETE_MESSAGE - Deletar mensagens