Workflow: Keep discord clean
Integrations: discord, filter, scheduleTrigger, splitInBatches, stickyNote, stopAndError, wait

{"id": "QCbb7Bm12gDIH0mI", "meta": {"instanceId": "workflow-4f359054", "versionId": "1.0.0", "createdAt": "2025-09-29T07:07:59.461222", "updatedAt": "2025-09-29T07:07:59.461234", "owner": "n8n-user", "license": "MIT", "category": "automation", "status": "active", "priority": "high", "environment": "production"}, "name": "Keep discord clean", "tags": ["automation", "n8n", "production-ready", "excellent", "optimized"], "nodes": [{"id": "dde530b8-edd5-4f1d-a3c8-326925c97269", "name": "Loop Over Channels", "type": "n8n-nodes-base.splitInBatches", "position": [560, 400], "parameters": {"options": {}}, "retryOnFail": false, "typeVersion": 3, "notes": "This splitInBatches node performs automated tasks as part of the workflow."}, {"id": "3e2684b1-08ad-41bd-930f-cbb229e16617", "name": "Loop Over Messages", "type": "n8n-nodes-base.splitInBatches", "position": [1260, 320], "parameters": {"options": {}}, "typeVersion": 3, "notes": "This splitInBatches node performs automated tasks as part of the workflow."}, {"id": "430d13be-670f-4e5d-acdf-ffe1a65a49e3", "name": "Every day at 9pm", "type": "n8n-nodes-base.scheduleTrigger", "position": [-160, 400], "parameters": {"rule": {"interval": [{"triggerAtHour": 21}]}}, "typeVersion": 1.2, "notes": "This scheduleTrigger node performs automated tasks as part of the workflow."}, {"id": "6d40f036-c87a-4b68-9ec6-523a3372447c", "name": "Sticky Note2", "type": "n8n-nodes-base.stickyNote", "position": [40, 600], "parameters": {"color": 6, "width": 294, "height": 80, "content": "**Note \u261d\ufe0f**\nDon\u2019t forget to setup an error workflow to get notified if something goes wrong"}, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow."}, {"id": "93290300-084b-4f91-95bc-f34c1aef93cd", "name": "Sticky Note", "type": "n8n-nodes-base.stickyNote", "position": [420, -60], "parameters": {"color": 5, "width": 327, "height": 152, "content": "### \ud83d\udc68\u200d\ud83c\udfa4 Setup\n1. Add your **Discord** credentials\n2. Change the server in each **Discord** node to the correct one\n3. Click the Test Workflow button\n3. Activate the workflow to run on a schedule"}, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow."}, {"id": "5fead80a-de3a-4f45-a524-5228def7b4ad", "name": "Cool down Discord API rate limits", "type": "n8n-nodes-base.wait", "position": [280, 400], "webhookId": "cea120e2-5bb9-45cf-83e6-55fd458d6cf4", "parameters": {"amount": 2}, "typeVersion": 1.1, "notes": "This wait node performs automated tasks as part of the workflow."}, {"id": "5a8d6402-458c-4c24-b379-6a41908a5af3", "name": "Get all Discord channels", "type": "n8n-nodes-base.discord", "position": [40, 400], "webhookId": "a77d1495-df40-4afd-ad0a-8f5b851b16da", "parameters": {"guildId": {"__rl": true, "mode": "id", "value": ""}, "options": {"filter": [0, 2]}, "operation": "getAll", "returnAll": true}, "typeVersion": 2, "notes": "This discord node performs automated tasks as part of the workflow."}, {"id": "a2b1d905-849d-4392-95db-e545f542ba78", "name": "Cool down Message deletion API rate limits", "type": "n8n-nodes-base.wait", "position": [1680, 340], "webhookId": "fcd9f62a-f08b-44bc-afa3-87d960fdc380", "parameters": {"amount": 1}, "typeVersion": 1.1, "notes": "This wait node performs automated tasks as part of the workflow."}, {"id": "8c134cfe-dcb1-400d-a518-17ed3f1cbf62", "name": "Cool down Get messages API rate limits", "type": "n8n-nodes-base.wait", "position": [1000, 480], "webhookId": "5d8de5eb-8445-4a64-8b8b-8577ffa52ef0", "parameters": {"amount": 2}, "typeVersion": 1.1, "notes": "This wait node performs automated tasks as part of the workflow."}, {"id": "18ba10df-dcec-4d27-8ecf-06171939b7eb", "name": "Get messages from Channel", "type": "n8n-nodes-base.discord", "onError": "continueRegularOutput", "position": [800, 480], "webhookId": "b36f85bb-1237-415d-81bb-598703d3d4cd", "parameters": {"guildId": {"__rl": true, "mode": "id", "value": ""}, "options": {}, "resource": "message", "channelId": {"__rl": true, "mode": "id", "value": "={{ $json.id }}"}, "operation": "getAll", "returnAll": true}, "retryOnFail": false, "typeVersion": 2, "alwaysOutputData": true, "waitBetweenTries": 5000, "notes": "This discord node performs automated tasks as part of the workflow."}, {"id": "57f2395a-b624-41d3-aada-4107b21a3359", "name": "Delete Message", "type": "n8n-nodes-base.discord", "onError": "continueRegularOutput", "position": [1500, 340], "webhookId": "4b43cc2e-59db-46c9-ae4c-9716146c25bf", "parameters": {"guildId": {"__rl": true, "mode": "id", "value": ""}, "resource": "message", "channelId": {"__rl": true, "mode": "id", "value": "={{ $json.channel_id }}"}, "messageId": "={{ $json.id }}", "operation": "deleteMessage"}, "retryOnFail": false, "typeVersion": 2, "alwaysOutputData": true, "waitBetweenTries": 5000, "notes": "This discord node performs automated tasks as part of the workflow."}, {"id": "c224ef25-57d8-4fe6-b14a-b09131ce8c1c", "name": "Filter Messages older than 7 days", "type": "n8n-nodes-base.filter", "position": [1000, 320], "parameters": {"options": {}, "conditions": {"options": {"version": 2, "leftValue": "", "caseSensitive": true, "typeValidation": "strict"}, "combinator": "and", "conditions": [{"id": "2864fc65-1d9d-433f-bd61-766278a7e54c", "operator": {"type": "dateTime", "operation": "exists", "singleValue": true}, "leftValue": "={{ $json.timestamp }}", "rightValue": ""}, {"id": "a05636ea-8663-4398-8a55-a03ab34f83a5", "operator": {"type": "dateTime", "operation": "before"}, "leftValue": "={{ $json.timestamp }}", "rightValue": "={{ $today.minus({days: 7}) }}"}]}}, "typeVersion": 2.2, "notes": "This filter node performs automated tasks as part of the workflow."}, {"id": "c3654c25-6318-4652-9f76-82770cc28324", "name": "Sticky Note3", "type": "n8n-nodes-base.stickyNote", "position": [40, 300], "parameters": {"color": 6, "width": 194, "height": 80, "content": "**Tip \ud83d\udc47**\nOAuth2 Authentication is very easy to setup"}, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow."}, {"id": "f3d8b35e-6b13-4df9-bd33-2d44381e6fc5", "name": "Sticky Note1", "type": "n8n-nodes-base.stickyNote", "position": [-200, -60], "parameters": {"color": 4, "width": 600, "height": 280, "content": "# Nightly Discord Channel Cleanup\n### This workflow runs every day at 9:00 p.m. and:\n- Retrieves all Discord channels using your provided credentials.\n- Pauses briefly to respect Discord API rate limits.\n- Loops through each channel and fetches messages.\n- Filters out messages older than seven days.\n- Deletes those older messages, again pausing to stay within deletion rate limits.\n\nBy setting up this workflow on a schedule, you can automatically keep Discord channels tidy and compliant with retention policies."}, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow."}, {"id": "error-04a12b72", "name": "Error Handler", "type": "n8n-nodes-base.stopAndError", "typeVersion": 1, "position": [1000, 400], "parameters": {"message": "Workflow execution error", "options": {}}}], "active": false, "pinData": {}, "settings": {"callerPolicy": "workflowsFromSameOwner", "errorWorkflow": null, "executionOrder": "v1", "saveManualExecutions": true, "timezone": "UTC", "executionTimeout": 3600, "maxExecutions": 1000, "retryOnFail": true, "retryCount": 3, "retryDelay": 1000}, "versionId": "a4b9f5d2-d905-4c86-9fa6-2a274909ecce", "connections": {"5a8d6402-458c-4c24-b379-6a41908a5af3": {"main": [[{"node": "error-handler-5a8d6402-458c-4c24-b379-6a41908a5af3-163f05c8", "type": "main", "index": 0}]]}, "18ba10df-dcec-4d27-8ecf-06171939b7eb": {"main": [[{"node": "error-handler-18ba10df-dcec-4d27-8ecf-06171939b7eb-fc5f59e9", "type": "main", "index": 0}]]}, "57f2395a-b624-41d3-aada-4107b21a3359": {"main": [[{"node": "error-handler-57f2395a-b624-41d3-aada-4107b21a3359-42b600a1", "type": "main", "index": 0}]]}}, "description": "Automated workflow: Keep discord clean. This workflow integrates 7 different services: stickyNote, filter, wait, scheduleTrigger, discord. It contains 17 nodes and follows best practices for error handling and security.", "notes": "Excellent quality workflow: Keep discord clean. This workflow has been optimized for production use with comprehensive error handling, security, and documentation."}