{"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","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 ☝️**\nDon’t 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":"### 👨‍🎤 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 👇**\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,"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":{"Get all Discord channels":{"main":[[]]},"Get messages from Channel":{"main":[[]]},"Delete Message":{"main":[[]]}},"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."}