Pular para conteúdo

DISCORD_DELETE_MESSAGE - Deletar Mensagem no Discord

O que é este Node?

O DISCORD_DELETE_MESSAGE é o node responsável por remover mensagens existentes no Discord, permitindo limpar mensagens temporárias, remover spam ou implementar auto-destruct.

Por que este Node existe?

Deletar mensagens automaticamente é útil para gerenciar conteúdo temporário e manter canais limpos. O DISCORD_DELETE_MESSAGE existe para:

  1. Mensagens Temporárias: Remover mensagens após um período (auto-destruct)
  2. Limpeza de Spam: Deletar mensagens indesejadas ou duplicadas automaticamente
  3. Remover Erros: Apagar mensagens com informações incorretas ou sensíveis
  4. Gerenciar Status: Remover mensagens de status após processo concluir

Como funciona internamente?

Quando o DISCORD_DELETE_MESSAGE é executado, o sistema:

  1. Valida Autenticação: Verifica bot token (webhooks NÃO suportam deleção)
  2. Valida Message ID: Garante que messageId foi fornecido
  3. Valida Permissões: Bot precisa de permissão Manage Messages no canal
  4. Envia DELETE: Remove mensagem via DELETE /channels/{channelId}/messages/{messageId}
  5. Processa Resposta: API retorna 204 No Content em sucesso
  6. Retorna Confirmação: Devolve objeto com {deleted: true, messageId}
  7. Trata Erros: Lida com mensagem não encontrada, sem permissão, etc

Código interno (discord-executor.service.ts:403-418):

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

  await axios.delete(
    `${this.DISCORD_API_BASE}/channels/${data.channelId}/messages/${data.messageId}`,
    {
      headers: {
        'Authorization': `Bot ${data.botToken}`
      }
    }
  );

  return { deleted: true, messageId: data.messageId };
}

Quando você DEVE usar este Node?

Use DISCORD_DELETE_MESSAGE sempre que precisar de remoção automática de mensagens:

Casos de uso

  1. Auto-Destruct: "Deletar mensagem sensível após 30 segundos"
  2. Limpeza de Status: "Remover 'Processando...' após conclusão"
  3. Moderação: "Deletar mensagens que contenham palavras proibidas"
  4. Temporários: "Remover avisos/alertas após serem lidos"
  5. Rollback: "Deletar mensagem se processo falhar"

Quando NÃO usar DISCORD_DELETE_MESSAGE

  • Mensagens de Webhook: Webhooks não suportam deleção - apenas bots podem deletar
  • Logs de Auditoria: Mantenha logs importantes para histórico
  • Mensagens de Outros Bots: Você só pode deletar mensagens do próprio bot (ou ter permissão Manage Messages)
  • Mensagens Muito Antigas: Discord pode ter restrições para mensagens antigas (nenhuma oficial)

Parâmetros Detalhados

operation (string, obrigatório)

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

Valor: "delete_message"

Flow completo para testar:

{
  "name": "Teste Discord - Delete 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": "Criar Mensagem Temporária",
        "parameters": {
          "operation": "send_message",
          "authType": "bot",
          "botToken": "SEU_BOT_TOKEN",
          "channelId": "SEU_CHANNEL_ID",
          "content": "Esta mensagem será deletada em 5 segundos... ⏱️"
        }
      }
    },
    {
      "id": "variable_1",
      "type": "variable",
      "position": { "x": 500, "y": 100 },
      "data": {
        "label": "Salvar Message ID",
        "parameters": {
          "name": "tempMessageId",
          "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": "Deletar Mensagem",
        "parameters": {
          "operation": "delete_message",
          "authType": "bot",
          "botToken": "SEU_BOT_TOKEN",
          "channelId": "SEU_CHANNEL_ID",
          "messageId": "{{tempMessageId}}"
        }
      }
    },
    {
      "id": "message_1",
      "type": "message",
      "position": { "x": 1100, "y": 100 },
      "data": {
        "label": "Confirmar",
        "parameters": {
          "message": "Mensagem deletada 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: Mensagem aparecerá e será deletada após 5 segundos automaticamente.

authType (string, obrigatório)

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

Valor: "bot" (obrigatório)

Flow completo para testar:

{
  "name": "Teste Discord - Auth Type Bot Delete",
  "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": "Deletar com Bot",
        "parameters": {
          "operation": "delete_message",
          "authType": "bot",
          "botToken": "{{botToken}}",
          "channelId": "{{channelId}}",
          "messageId": "1234567890123456789"
        }
      }
    },
    {
      "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 deletar mensagens. Webhooks retornarão erro.

botToken (string, obrigatório)

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

Formato: Token completo do bot começando com MTE..., ODc..., etc.

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 Delete",
  "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": "Deletar em Canal",
        "parameters": {
          "operation": "delete_message",
          "authType": "bot",
          "botToken": "SEU_BOT_TOKEN",
          "channelId": "987654321098765432",
          "messageId": "1234567890123456789"
        }
      }
    },
    {
      "id": "message_1",
      "type": "message",
      "position": { "x": 500, "y": 100 },
      "data": {
        "label": "Confirmar",
        "parameters": {
          "message": "Mensagem deletada do canal!"
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 700, "y": 100 },
      "data": { "label": "Fim" }
    }
  ],
  "edges": [
    { "source": "start_1", "target": "discord_1" },
    { "source": "discord_1", "target": "message_1" },
    { "source": "message_1", "target": "end_1" }
  ]
}

Teste: Mensagem será removida do canal especificado.

messageId (string, obrigatório)

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

Formato: "123456789012345678" (18 dígitos)

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

Flow completo para testar:

{
  "name": "Teste Discord - Message ID Delete",
  "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": "Mensagem que será deletada automaticamente."
        }
      }
    },
    {
      "id": "variable_1",
      "type": "variable",
      "position": { "x": 500, "y": 100 },
      "data": {
        "label": "Salvar Message ID",
        "parameters": {
          "name": "msgToDelete",
          "value": "{{discord_1.data.id}}"
        }
      }
    },
    {
      "id": "delay_1",
      "type": "delay",
      "position": { "x": 700, "y": 100 },
      "data": {
        "label": "Aguardar 3s",
        "parameters": {
          "delay": 3000
        }
      }
    },
    {
      "id": "discord_2",
      "type": "discord",
      "position": { "x": 900, "y": 100 },
      "data": {
        "label": "Deletar Mensagem",
        "parameters": {
          "operation": "delete_message",
          "authType": "bot",
          "botToken": "SEU_BOT_TOKEN",
          "channelId": "SEU_CHANNEL_ID",
          "messageId": "{{msgToDelete}}"
        }
      }
    },
    {
      "id": "message_1",
      "type": "message",
      "position": { "x": 1100, "y": 100 },
      "data": {
        "label": "Confirmar",
        "parameters": {
          "message": "Mensagem {{msgToDelete}} foi deletada!"
        }
      }
    },
    {
      "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: Mensagem será criada, ID salvo, e depois deletada após 3 segundos.

Parâmetros

Campo Tipo Obrigatório Descrição
operation string Sim Deve ser "delete_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 deletada

Exemplo 1: Auto-Destruct de Mensagem Sensível

Objetivo: Enviar mensagem sensível que se auto-destrói após 30 segundos.

JSON para Importar

{
  "name": "Discord - Auto-Destruct Mensagem",
  "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": "Código Secreto",
        "parameters": {
          "message": "Digite o código de acesso:",
          "variableName": "secretCode"
        }
      }
    },
    {
      "id": "discord_1",
      "type": "discord",
      "position": { "x": 500, "y": 100 },
      "data": {
        "label": "Enviar Código",
        "parameters": {
          "operation": "send_message",
          "authType": "bot",
          "botToken": "SEU_BOT_TOKEN",
          "channelId": "SEU_CHANNEL_ID",
          "content": "🔐 **CÓDIGO DE ACESSO TEMPORÁRIO**\n\n```\n{{secretCode}}\n```\n\n⚠️ Esta mensagem será deletada em 30 segundos por segurança."
        }
      }
    },
    {
      "id": "variable_1",
      "type": "variable",
      "position": { "x": 700, "y": 100 },
      "data": {
        "label": "Salvar ID",
        "parameters": {
          "name": "secretMessageId",
          "value": "{{discord_1.data.id}}"
        }
      }
    },
    {
      "id": "message_1",
      "type": "message",
      "position": { "x": 900, "y": 50 },
      "data": {
        "label": "Avisar Usuário",
        "parameters": {
          "message": "Código enviado! Copie rapidamente, ele será deletado em 30 segundos."
        }
      }
    },
    {
      "id": "delay_1",
      "type": "delay",
      "position": { "x": 900, "y": 150 },
      "data": {
        "label": "Aguardar 30s",
        "parameters": {
          "delay": 30000
        }
      }
    },
    {
      "id": "discord_2",
      "type": "discord",
      "position": { "x": 1100, "y": 150 },
      "data": {
        "label": "Destruir Mensagem",
        "parameters": {
          "operation": "delete_message",
          "authType": "bot",
          "botToken": "SEU_BOT_TOKEN",
          "channelId": "SEU_CHANNEL_ID",
          "messageId": "{{secretMessageId}}"
        }
      }
    },
    {
      "id": "message_2",
      "type": "message",
      "position": { "x": 1300, "y": 150 },
      "data": {
        "label": "Confirmar Destruição",
        "parameters": {
          "message": "🔒 Mensagem sensível foi auto-destruída por segurança."
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 1500, "y": 150 },
      "data": { "label": "Fim" }
    }
  ],
  "edges": [
    { "source": "start_1", "target": "input_1" },
    { "source": "input_1", "target": "discord_1" },
    { "source": "discord_1", "target": "variable_1" },
    { "source": "variable_1", "target": "message_1" },
    { "source": "variable_1", "target": "delay_1" },
    { "source": "message_1", "target": "end_1" },
    { "source": "delay_1", "target": "discord_2" },
    { "source": "discord_2", "target": "message_2" },
    { "source": "message_2", "target": "end_1" }
  ]
}

Saída esperada:

Sistema: Digite o código de acesso:
Usuário: ABC123XYZ

[No Discord - aparece por 30 segundos]
🔐 CÓDIGO DE ACESSO TEMPORÁRIO
ABC123XYZ
⚠️ Esta mensagem será deletada em 30 segundos por segurança.

[Após 30 segundos - mensagem desaparece]

Sistema: Código enviado! Copie rapidamente, ele será deletado em 30 segundos.
[30s depois]
Sistema: 🔒 Mensagem sensível foi auto-destruída por segurança.

Exemplo 2: Limpeza de Status após Conclusão

Objetivo: Remover mensagem "Processando..." após processo ser concluído.

JSON para Importar

{
  "name": "Discord - Limpeza de Status",
  "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": "Status Inicial",
        "parameters": {
          "operation": "send_message",
          "authType": "bot",
          "botToken": "SEU_BOT_TOKEN",
          "channelId": "SEU_CHANNEL_ID",
          "content": "⏳ Gerando relatório mensal... Por favor aguarde."
        }
      }
    },
    {
      "id": "variable_1",
      "type": "variable",
      "position": { "x": 500, "y": 100 },
      "data": {
        "label": "Salvar Status ID",
        "parameters": {
          "name": "statusMsgId",
          "value": "{{discord_1.data.id}}"
        }
      }
    },
    {
      "id": "delay_1",
      "type": "delay",
      "position": { "x": 700, "y": 100 },
      "data": {
        "label": "Simular Processamento",
        "parameters": {
          "delay": 5000
        }
      }
    },
    {
      "id": "discord_2",
      "type": "discord",
      "position": { "x": 900, "y": 50 },
      "data": {
        "label": "Enviar Relatório",
        "parameters": {
          "operation": "send_file",
          "authType": "bot",
          "botToken": "SEU_BOT_TOKEN",
          "channelId": "SEU_CHANNEL_ID",
          "content": "✅ **Relatório Gerado com Sucesso!**\n\n📊 Relatório mensal completo anexado abaixo.",
          "files": [
            {
              "name": "relatorio-mensal.pdf",
              "url": "https://storage.example.com/relatorio.pdf"
            }
          ]
        }
      }
    },
    {
      "id": "discord_3",
      "type": "discord",
      "position": { "x": 900, "y": 150 },
      "data": {
        "label": "Remover Status",
        "parameters": {
          "operation": "delete_message",
          "authType": "bot",
          "botToken": "SEU_BOT_TOKEN",
          "channelId": "SEU_CHANNEL_ID",
          "messageId": "{{statusMsgId}}"
        }
      }
    },
    {
      "id": "message_1",
      "type": "message",
      "position": { "x": 1100, "y": 100 },
      "data": {
        "label": "Confirmar",
        "parameters": {
          "message": "Relatório enviado e status limpo!"
        }
      }
    },
    {
      "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": "discord_3" },
    { "source": "discord_3", "target": "message_1" },
    { "source": "message_1", "target": "end_1" }
  ]
}

Saída esperada no Discord:

[Aparece inicialmente]
⏳ Gerando relatório mensal... Por favor aguarde.

[Após 5 segundos - status desaparece e aparece:]
✅ Relatório Gerado com Sucesso!

📊 Relatório mensal completo anexado abaixo.

[Anexo: relatorio-mensal.pdf - 2.5 MB]

Exemplo 3: Moderação com Rollback

Objetivo: Deletar mensagens automaticamente se contiverem palavras proibidas ou se processo falhar.

JSON para Importar

{
  "name": "Discord - Moderação com Rollback",
  "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": "Mensagem Usuário",
        "parameters": {
          "message": "Digite sua mensagem:",
          "variableName": "userMessage"
        }
      }
    },
    {
      "id": "discord_1",
      "type": "discord",
      "position": { "x": 500, "y": 100 },
      "data": {
        "label": "Postar Mensagem",
        "parameters": {
          "operation": "send_message",
          "authType": "bot",
          "botToken": "SEU_BOT_TOKEN",
          "channelId": "SEU_CHANNEL_ID",
          "content": "👤 **Mensagem do Usuário:**\n\n{{userMessage}}"
        }
      }
    },
    {
      "id": "variable_1",
      "type": "variable",
      "position": { "x": 700, "y": 100 },
      "data": {
        "label": "Salvar Message ID",
        "parameters": {
          "name": "userMsgId",
          "value": "{{discord_1.data.id}}"
        }
      }
    },
    {
      "id": "condition_1",
      "type": "condition",
      "position": { "x": 900, "y": 100 },
      "data": {
        "label": "Contém Spam?",
        "parameters": {
          "condition": "{{userMessage}} contains 'spam'"
        }
      }
    },
    {
      "id": "discord_2",
      "type": "discord",
      "position": { "x": 1100, "y": 50 },
      "data": {
        "label": "Deletar Spam",
        "parameters": {
          "operation": "delete_message",
          "authType": "bot",
          "botToken": "SEU_BOT_TOKEN",
          "channelId": "SEU_CHANNEL_ID",
          "messageId": "{{userMsgId}}"
        }
      }
    },
    {
      "id": "discord_3",
      "type": "discord",
      "position": { "x": 1300, "y": 50 },
      "data": {
        "label": "Avisar Moderação",
        "parameters": {
          "operation": "send_message",
          "authType": "bot",
          "botToken": "SEU_BOT_TOKEN",
          "channelId": "SEU_CHANNEL_ID",
          "content": "🚫 **Mensagem removida por moderação automática**\n\nMotivo: Conteúdo proibido detectado"
        }
      }
    },
    {
      "id": "message_1",
      "type": "message",
      "position": { "x": 1100, "y": 150 },
      "data": {
        "label": "Mensagem OK",
        "parameters": {
          "message": "Mensagem postada com sucesso!"
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 1500, "y": 100 },
      "data": { "label": "Fim" }
    }
  ],
  "edges": [
    { "source": "start_1", "target": "input_1" },
    { "source": "input_1", "target": "discord_1" },
    { "source": "discord_1", "target": "variable_1" },
    { "source": "variable_1", "target": "condition_1" },
    { "source": "condition_1", "target": "discord_2", "label": "true" },
    { "source": "discord_2", "target": "discord_3" },
    { "source": "discord_3", "target": "end_1" },
    { "source": "condition_1", "target": "message_1", "label": "false" },
    { "source": "message_1", "target": "end_1" }
  ]
}

Saída esperada:

Sistema: Digite sua mensagem:
Usuário: Confira este spam incrível!

[No Discord - aparece brevemente]
👤 Mensagem do Usuário:

Confira este spam incrível!

[Mensagem é deletada imediatamente]

🚫 Mensagem removida por moderação automática

Motivo: Conteúdo proibido detectado

Resposta do Node

{
  "deleted": true,
  "messageId": "1234567890123456789"
}

Boas Práticas

SIM:

  • Use apenas com bots (webhooks não suportam deleção)
  • Salve message ID antes de deletar (para logs)
  • Use para mensagens temporárias/auto-destruct
  • Combine com DELAY para timing automático
  • Implemente try-catch para mensagens já deletadas
  • Use para limpar status após conclusão
  • Mantenha logs de deleções para auditoria
  • Verifique permissões do bot antes de deletar
  • Use para rollback em caso de erro
  • Combine com CONDITION para deleção condicional

NÃO:

  • Não tente deletar mensagens de webhooks
  • Não delete logs importantes de auditoria
  • Não abuse de deleções (pode parecer censura)
  • Não ignore erros 404 (mensagem já deletada/não existe)
  • Não delete mensagens de outros bots sem permissão
  • Não hardcode message IDs (sempre use variáveis)
  • Não delete mensagens em canais sem permissão Manage Messages
  • Não esqueça de avisar usuário se mensagem dele for deletada
  • Não use para ocultar erros críticos
  • Não delete evidências em sistemas de auditoria

Dicas

💡 Dica 1: Bot precisa da permissão Manage Messages no canal para deletar mensagens de outros usuários.

💡 Dica 2: Deleção é permanente e não pode ser desfeita. Sempre salve logs antes de deletar se necessário.

💡 Dica 3: Erro 404 significa que a mensagem já foi deletada ou não existe. Trate esse erro gracefully.

💡 Dica 4: Discord API retorna 204 No Content em sucesso (sem body). O executor retorna {deleted: true}.

💡 Dica 5: Combine com SCHEDULE node para criar limpezas automáticas periódicas de canais.

💡 Dica 6: Rate limit: 5 deleções por 1 segundo por canal. Respeite esse limite.

💡 Dica 7: Para deletar múltiplas mensagens (bulk delete), use a API nativa do Discord (não implementado aqui).

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_EDIT_MESSAGE - Editar mensagens existentes