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:
- Mensagens Temporárias: Remover mensagens após um período (auto-destruct)
- Limpeza de Spam: Deletar mensagens indesejadas ou duplicadas automaticamente
- Remover Erros: Apagar mensagens com informações incorretas ou sensíveis
- Gerenciar Status: Remover mensagens de status após processo concluir
Como funciona internamente?
Quando o DISCORD_DELETE_MESSAGE é executado, o sistema:
- Valida Autenticação: Verifica bot token (webhooks NÃO suportam deleção)
- Valida Message ID: Garante que messageId foi fornecido
- Valida Permissões: Bot precisa de permissão
Manage Messagesno canal - Envia DELETE: Remove mensagem via
DELETE /channels/{channelId}/messages/{messageId} - Processa Resposta: API retorna 204 No Content em sucesso
- Retorna Confirmação: Devolve objeto com {deleted: true, messageId}
- 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
- Auto-Destruct: "Deletar mensagem sensível após 30 segundos"
- Limpeza de Status: "Remover 'Processando...' após conclusão"
- Moderação: "Deletar mensagens que contenham palavras proibidas"
- Temporários: "Remover avisos/alertas após serem lidos"
- 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
⚠️ 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