This workflow follows the Agent → Discord recipe pattern — see all workflows that pair these two integrations.
The workflow JSON
Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →
{
"name": "darkweb-get-forum-posts",
"nodes": [
{
"parameters": {
"schemaType": "manual",
"inputSchema": "{\n \"type\": \"object\",\n \"properties\": {\n \"task_status\": {\n \"type\": \"string\",\n \"enum\": [\"success\", \"failed\"],\n \"description\": \"Status of the forum parsing task\"\n },\n \"failed_cause\": {\n \"type\": \"string\",\n \"enum\": [\"login_needed\", \"bot_captcha\", \"page_unreachable\"],\n \"description\": \"Reason for task failure (only present when task_status is 'failed')\"\n },\n \"error_details\": {\n \"type\": \"string\",\n \"description\": \"Additional details about the error (optional for failed tasks)\"\n },\n \"forum_posts\": {\n \"type\": \"array\",\n \"description\": \"Array of forum threads extracted from the forum page (only present when task_status is 'success')\",\n \"items\": {\n \"type\": \"object\",\n \"properties\": {\n \"post_title\": {\n \"type\": \"string\",\n \"description\": \"The title/subject of the forum thread as displayed on the forum, with pagination indicators removed\"\n },\n \"post_link\": {\n \"type\": \"string\",\n \"description\": \"Complete URL to the thread, constructed as base forum URL + thread path\"\n },\n \"post_author_name\": {\n \"type\": \"string\",\n \"description\": \"Username of the thread creator/original poster\"\n },\n \"post_author_link\": {\n \"type\": \"string\",\n \"description\": \"Profile URL of the thread author, constructed as base forum URL + '/User-' + username\"\n },\n \"post_date\": {\n \"type\": \"string\",\n \"format\": \"date-time\",\n \"description\": \"Original post creation timestamp in ISO 8601 format (e.g., '2023-11-17T17:14:00+02:00'), converted from forum's raw date format\"\n },\n \"last_post_date\": {\n \"type\": \"string\",\n \"format\": \"date-time\",\n \"description\": \"Last activity timestamp in ISO 8601 format (e.g., '2025-07-24T18:43:00+02:00'), converted from relative time format using current_timestamp as reference\"\n },\n \"last_post_author\": {\n \"type\": \"string\",\n \"description\": \"Username of the last person to post/reply in the thread\"\n },\n \"last_post_author_link\": {\n \"type\": \"string\",\n \"description\": \"Profile URL of the last activity author, constructed as base forum URL + '/User-' + username\"\n }\n },\n \"required\": [\n \"post_title\",\n \"post_link\", \n \"post_author_name\",\n \"post_author_link\",\n \"post_date\",\n \"last_post_date\",\n \"last_post_author\",\n \"last_post_author_link\"\n ],\n \"additionalProperties\": false\n }\n }\n },\n \"required\": [\"task_status\"],\n \"if\": {\n \"properties\": {\n \"task_status\": {\n \"const\": \"success\"\n }\n }\n },\n \"then\": {\n \"required\": [\"forum_posts\"],\n \"not\": {\"required\": [\"failed_cause\"]}\n },\n \"else\": {\n \"if\": {\n \"properties\": {\n \"task_status\": {\"const\": \"failed\"}\n }\n },\n \"then\": {\n \"required\": [\"failed_cause\"],\n \"not\": {\"required\": [\"forum_posts\"]}\n }\n },\n \"additionalProperties\": false\n}",
"autoFix": true
},
"type": "@n8n/n8n-nodes-langchain.outputParserStructured",
"typeVersion": 1.2,
"position": [
-896,
208
],
"id": "0fce51c7-b98f-40e6-a92a-a02243851f2f",
"name": "\u7ed3\u6784\u5316\u8f93\u51fa\u89e3\u6790\u5668"
},
{
"parameters": {
"description": "=## \u4f7f\u7528\u601d\u8003(Think)\u5de5\u5177\n\n\u5728\u63a5\u6536\u5230\u5de5\u5177\u7ed3\u679c\u540e\u91c7\u53d6\u4efb\u4f55\u64cd\u4f5c\u6216\u54cd\u5e94\u4e4b\u524d\uff0c\u8bf7\u4f7f\u7528\u601d\u8003\u5de5\u5177\u4f5c\u4e3a\u8349\u7a3f\u672c\u6765\uff1a\n- \u5217\u51fa\u9002\u7528\u4e8e\u5f53\u524d\u8bba\u575b\u63d0\u53d6\u8bf7\u6c42\u7684\u5177\u4f53\u89c4\u5219\n- \u68c0\u67e5\u5bfc\u822a\u548c\u6570\u636e\u8bbf\u95ee\u662f\u5426\u6210\u529f\n- \u9a8c\u8bc1\u63d0\u53d6\u7684\u6570\u636e\u662f\u5426\u771f\u5b9e\uff08\u800c\u975e\u4f2a\u9020/\u793a\u4f8b\u6570\u636e\uff09\n- \u6839\u636e\u5b9e\u9645\u7ed3\u679c\u89c4\u5212\u6b63\u786e\u7684\u54cd\u5e94\u72b6\u6001\n\n\u4ee5\u4e0b\u662f\u5728\u601d\u8003\u5de5\u5177\u4e2d\u8fed\u4ee3\u7684\u793a\u4f8b\uff1a\n\n<think_tool_example_1>\nDarkForums.io \u7684\u8bba\u575b\u9875\u9762\u63d0\u53d6\u8bf7\u6c42\n- \u9a8c\u8bc1\u89c4\u5219\uff1a\n * \u5fc5\u987b\u6210\u529f\u5bfc\u822a\u5230\u5b9e\u9645URL\n * \u5fc5\u987b\u6355\u83b7\u771f\u5b9e\u7684\u6d4f\u89c8\u5668\u5feb\u7167\n * \u5fc5\u987b\u4ec5\u4ece\u5feb\u7167\u4e2d\u63d0\u53d6\u771f\u5b9e\u7684\u5e16\u5b50\u6570\u636e\n * \u7edd\u4e0d\u751f\u6210\u4f2a\u9020/\u793a\u4f8b\u6570\u636e\n- \u72b6\u6001\u786e\u5b9a\uff1a\n * \u5982\u679c\u5bfc\u822a\u5931\u8d25 \u2192 \"page_unreachable\"\n * \u5982\u679c\u68c0\u6d4b\u5230 CAPTCHA/DDoS-Guard \u2192 \"bot_captcha\"\n * \u5982\u679c\u91cd\u5b9a\u5411\u5230\u767b\u5f55 \u2192 \"login_needed\"\n * \u5982\u679c\u63d0\u53d6\u5230\u771f\u5b9e\u6570\u636e \u2192 \"success\" \n- \u8ba1\u5212\uff1a\u5bfc\u822a \u2192 \u5feb\u7167 \u2192 \u9a8c\u8bc1\u771f\u5b9e\u5185\u5bb9 \u2192 \u4ec5\u63d0\u53d6\u771f\u5b9e\u6570\u636e\n</think_tool_example_1>\n\n<think_tool_example_2>\n\u6d4f\u89c8\u5668\u5bfc\u822a\u5df2\u5b8c\u6210\uff0c\u6b63\u5728\u68c0\u67e5\u5feb\u7167\u7ed3\u679c\n- \u5bfc\u822a\u72b6\u6001\uff1a\u2705 \u6210\u529f - \u65e0\u8d85\u65f6\u6216\u9519\u8bef\n- \u5feb\u7167\u5185\u5bb9\u5206\u6790\uff1a\n * \u9875\u9762\u663e\u793a\uff1a\u5177\u6709\u5e16\u5b50\u5217\u8868\u7684\u771f\u5b9e\u8bba\u575b\u5e03\u5c40\n * \u5e16\u5b50\u6807\u9898\u53ef\u89c1\uff1a\"Morocco PMMP Database\", \"Twitter Leak 200M\"\n * \u4f5c\u8005\u53ef\u89c1\uff1a\"B4baYega\", \"Lucifer\" \n * \u771f\u5b9e\u65e5\u671f\uff1a\"1 minute ago\", \"40 minutes ago\"\n- \u6570\u636e\u9a8c\u8bc1\uff1a\n * \u6240\u6709\u5e16\u5b50\u6570\u636e\u5747\u6765\u81ea\u5b9e\u9645\u5feb\u7167 \u2705\n * \u6ca1\u6709\u50cf \"Username\" \u6216 \"Example\" \u8fd9\u6837\u7684\u4f2a\u9020\u7528\u6237\u540d \u2705\n * URL \u662f\u771f\u5b9e\u7684\u8bba\u575b\u8def\u5f84 \u2705\n- \u8ba1\u5212\uff1a\u63d0\u53d6\u771f\u5b9e\u6570\u636e\u5e76\u8fd4\u56de\u5305\u542b\u5b9e\u9645\u8bba\u575b\u5e16\u5b50\u7684\u6210\u529f\u72b6\u6001\n</think_tool_example_2>\n\n<think_tool_example_3>\n\u6d4f\u89c8\u5668\u5bfc\u822a\u5c1d\u8bd5\u7ed3\u679c\n- \u5bfc\u822a\u72b6\u6001\uff1a\u274c \u5931\u8d25 - 30\u79d2\u540e\u8fde\u63a5\u8d85\u65f6\n- \u9519\u8bef\u8be6\u60c5\uff1a\"net::ERR_TIMED_OUT\"\n- \u5feb\u7167\u7ed3\u679c\uff1a\u672a\u6355\u83b7\u53ef\u7528\u5185\u5bb9\n- \u53ef\u7528\u6570\u636e\uff1a\u65e0 - \u65e0\u6cd5\u63d0\u53d6\u4efb\u4f55\u5185\u5bb9\n- \u89c4\u5219\u68c0\u67e5\uff1a\n * \u65e0\u6cd5\u751f\u6210\u4f2a\u9020\u6570\u636e \u2705\n * \u5fc5\u987b\u62a5\u544a\u5bfc\u822a\u5931\u8d25 \u2705\n- \u8ba1\u5212\uff1a\u8fd4\u56de\u5931\u8d25\u72b6\u6001\uff0c\u5305\u542b \"page_unreachable\" \u548c\u9519\u8bef\u8be6\u60c5\n</think_tool_example_3>"
},
"type": "@n8n/n8n-nodes-langchain.toolThink",
"typeVersion": 1,
"position": [
-608,
208
],
"id": "dec4323d-eebe-46b2-992b-f3f65888bc9b",
"name": "\u601d\u8003(Think)\u5de5\u5177"
},
{
"parameters": {
"method": "POST",
"url": "https://mllfrjetoelmjmgdemlm.supabase.co/rest/v1/rpc/check_existing_forum_posts",
"authentication": "predefinedCredentialType",
"nodeCredentialType": "supabaseApi",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "Content-Type",
"value": "application/json"
}
]
},
"sendBody": true,
"specifyBody": "json",
"jsonBody": "={\n \"post_links_to_check\": {{ $json.output.forum_posts.map(post => post.post_link).toJsonString() }}\n}",
"options": {}
},
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.2,
"position": [
-160,
-304
],
"id": "78ab9a0d-b84b-474b-826a-0830ccfb5060",
"name": "Supabase RPC \u68c0\u67e5\u73b0\u6709URL",
"retryOnFail": true,
"maxTries": 2,
"waitBetweenTries": 5000,
"credentials": {
"supabaseApi": {
"name": "<your credential>"
}
},
"onError": "continueErrorOutput"
},
{
"parameters": {
"mode": "combine",
"advanced": true,
"mergeByFields": {
"values": [
{
"field1": "post_link",
"field2": "existing_post_link"
}
]
},
"joinMode": "keepNonMatches",
"outputDataFrom": "input1",
"options": {}
},
"type": "n8n-nodes-base.merge",
"typeVersion": 3.2,
"position": [
176,
-544
],
"id": "5c20cc93-12c7-4a30-b6eb-400a437e668e",
"name": "\u5408\u5e76\u4ec5\u65b0URL",
"alwaysOutputData": true
},
{
"parameters": {
"authentication": "webhook",
"options": {
"username": "DarkWeb Forums",
"wait": false
},
"embeds": {
"values": [
{
"description": "=### {{ $json.forum_name }}\n- {{ $json.forum_url_path }}",
"author": "=\ud83d\udd04 \u8bba\u575b\u8ffd\u8e2a\u5df2\u542f\u52a8",
"color": "#3498DB",
"timestamp": "={{ $now.toISO() }}"
}
]
}
},
"type": "n8n-nodes-base.discord",
"typeVersion": 2,
"position": [
-848,
-304
],
"id": "ddb72e5b-71e7-40e9-a8bb-444240271480",
"name": "\u901a\u77e5\u5f00\u59cb\u8ffd\u8e2a",
"credentials": {
"discordWebhookApi": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"authentication": "webhook",
"options": {
"username": "DarkWeb Forums",
"wait": true
},
"embeds": {
"values": [
{
"description": "=### {{ $('\u5faa\u73afURL').item.json.forum_name }}\n- {{ $('\u5faa\u73afURL').item.json.forum_url_path }}\n> AI \u667a\u80fd\u4f53\u5c1d\u8bd5\u83b7\u53d6\u6570\u636e\uff0c\u4f46\u53d1\u751f\u4e86\u9519\u8bef\u3002\n> {{ $json.output?.error_details || $json.error || $json.output.failed_cause || '\u53d1\u751f\u4e86\u672a\u77e5\u9519\u8bef' }}\n`\u67e5\u770b\u5de5\u4f5c\u6d41\u65e5\u5fd7 \u2022 \u9700\u8981\u4eba\u5de5\u5ba1\u67e5`",
"author": "=\u26a0\ufe0f \u8bba\u575b\u8ffd\u8e2a\u5931\u8d25",
"color": "#E74C3C",
"timestamp": "={{ $now.toISO() }}"
}
]
}
},
"type": "n8n-nodes-base.discord",
"typeVersion": 2,
"position": [
-160,
-48
],
"id": "74bace14-f374-4807-9636-2068938fd3df",
"name": "\u901a\u77e5\u8ffd\u8e2a\u5931\u8d25",
"executeOnce": true,
"retryOnFail": false,
"credentials": {
"discordWebhookApi": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "loose",
"version": 2
},
"conditions": [
{
"id": "a6e494dc-8c00-4583-a950-510c65468f38",
"leftValue": "={{ $json.forum_posts[0] }}",
"rightValue": 0,
"operator": {
"type": "object",
"operation": "notEmpty",
"singleValue": true
}
}
],
"combinator": "and"
},
"looseTypeValidation": true,
"options": {}
},
"type": "n8n-nodes-base.if",
"typeVersion": 2.2,
"position": [
176,
-304
],
"id": "182864c4-00be-415b-8e4a-554e5fd6e0b0",
"name": "\u6709\u65b0\u5e16\u5b50\u5417?"
},
{
"parameters": {
"authentication": "webhook",
"options": {
"username": "DarkWeb Forums",
"wait": true
},
"embeds": {
"values": [
{
"description": "=### {{ $('\u5faa\u73afURL').item.json.forum_name }}\n- {{ $('\u5faa\u73afURL').item.json.forum_url_path }}",
"author": "=\u26d4 \u672a\u53d1\u73b0\u65b0\u5e16\u5b50",
"color": "#3498DB",
"timestamp": "={{ $now.toISO() }}"
}
]
}
},
"type": "n8n-nodes-base.discord",
"typeVersion": 2,
"position": [
176,
-48
],
"id": "9bdd7173-e138-41f4-9821-3619f5a840a6",
"name": "\u901a\u77e5\u672a\u53d1\u73b0\u65b0\u5e16\u5b50",
"executeOnce": true,
"credentials": {
"discordWebhookApi": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"rule": {
"interval": [
{
"field": "hours",
"hoursInterval": 4
}
]
}
},
"type": "n8n-nodes-base.scheduleTrigger",
"typeVersion": 1.2,
"position": [
-1152,
-544
],
"id": "722af682-ae01-4768-a2c2-f25df02b97a8",
"name": "\u5b9a\u65f6\u89e6\u53d1\u5668"
},
{
"parameters": {
"rules": {
"values": [
{
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "strict",
"version": 2
},
"conditions": [
{
"leftValue": "={{ $json.output.task_status }}",
"rightValue": "success",
"operator": {
"type": "string",
"operation": "equals"
},
"id": "305279dd-7b2b-471c-aba0-0c5fc195c520"
}
],
"combinator": "and"
},
"renameOutput": true,
"outputKey": "success"
},
{
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "strict",
"version": 2
},
"conditions": [
{
"id": "cd9e2a01-3870-4596-a50e-9288ac4fd972",
"leftValue": "={{ $json.output.task_status }}",
"rightValue": "failed",
"operator": {
"type": "string",
"operation": "equals",
"name": "filter.operator.equals"
}
}
],
"combinator": "and"
},
"renameOutput": true,
"outputKey": "failed"
}
]
},
"options": {
"fallbackOutput": 1
}
},
"type": "n8n-nodes-base.switch",
"typeVersion": 3.2,
"position": [
-512,
-304
],
"id": "b5514d01-cd5b-4a2b-a947-b49e7b7a74ce",
"name": "\u5207\u6362\u667a\u80fd\u4f53\u8f93\u51fa",
"onError": "continueErrorOutput"
},
{
"parameters": {
"options": {}
},
"type": "n8n-nodes-base.splitInBatches",
"typeVersion": 3,
"position": [
-1152,
-304
],
"id": "69625e39-4855-4f35-b1c8-c253b74f288d",
"name": "\u5faa\u73afURL",
"executeOnce": false
},
{
"parameters": {
"fieldToSplitOut": "output.forum_posts",
"options": {}
},
"type": "n8n-nodes-base.splitOut",
"typeVersion": 1,
"position": [
-160,
-544
],
"id": "956ed208-036b-44c7-a809-5a7ff3177291",
"name": "\u62c6\u5206\u8bba\u575b\u5e16\u5b50"
},
{
"parameters": {
"aggregate": "aggregateAllItemData",
"destinationFieldName": "forum_posts",
"options": {}
},
"type": "n8n-nodes-base.aggregate",
"typeVersion": 1,
"position": [
480,
-544
],
"id": "93cfe3b1-4905-4053-ab14-2c8c56c8a7a8",
"name": "\u91cd\u7ec4\u65b0\u5e16\u5b50\u6570\u7ec4"
},
{
"parameters": {
"tableId": "darkweb_forums",
"fieldsUi": {
"fieldValues": [
{
"fieldId": "monitored_at",
"fieldValue": "={{ $now.toISO() }}"
},
{
"fieldId": "post_title",
"fieldValue": "={{ $json.post.post_title }}"
},
{
"fieldId": "post_link",
"fieldValue": "={{ $json.post.post_link }}"
},
{
"fieldId": "post_author_name",
"fieldValue": "={{ $json.post.post_author_name }}"
},
{
"fieldId": "post_author_link",
"fieldValue": "={{ $json.post.post_author_link }}"
},
{
"fieldId": "last_post_date",
"fieldValue": "={{ $json.post.last_post_date }}"
},
{
"fieldId": "last_post_author",
"fieldValue": "={{ $json.post.last_post_author }}"
},
{
"fieldId": "last_post_author_link",
"fieldValue": "={{ $json.post.last_post_author_link }}"
},
{
"fieldId": "forum_name",
"fieldValue": "={{ $('\u5faa\u73afURL').item.json.forum_name }}"
},
{
"fieldId": "forum_url",
"fieldValue": "={{ $('\u5faa\u73afURL').item.json.forum_url_path }}"
},
{
"fieldId": "post_alert",
"fieldValue": "={{ $json.post_alert }}"
},
{
"fieldId": "entity_name",
"fieldValue": "={{ $json.entity_name }}"
},
{
"fieldId": "post_date",
"fieldValue": "={{ $json.post.post_date }}"
}
]
}
},
"type": "n8n-nodes-base.supabase",
"typeVersion": 1,
"position": [
480,
-48
],
"id": "b301cc8c-5503-47f4-982d-b58f605cf51b",
"name": "\u6dfb\u52a0\u5e16\u5b50\u5230Supabase",
"credentials": {
"supabaseApi": {
"name": "<your credential>"
}
},
"onError": "continueErrorOutput"
},
{
"parameters": {
"assignments": {
"assignments": [
{
"id": "0a60ead9-cd31-4e48-b81c-71b347d84428",
"name": "forum_name",
"value": "DarkForums.io",
"type": "string"
},
{
"id": "dcdea795-8f21-4213-aa5f-0866bdc6f9e8",
"name": "forum_icon",
"value": "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQCWBDE-GmAiY_vPK4mNsuaPC8-gpK7u7ZFf46RcYP2SBNH4i_UcHc35Uoggs4e3DjvPmw&usqp=CAU",
"type": "string"
},
{
"id": "b8c7e0f0-1936-4e51-82be-b0c577f42734",
"name": "forum_url",
"value": "https://darkforums.io",
"type": "string"
},
{
"id": "e084011b-ec05-4f17-bd25-d448a4ea3eb6",
"name": "forum_url_path[0]",
"value": "https://darkforums.io/Forum-Databases",
"type": "string"
},
{
"id": "86faa3a0-144a-4807-9843-9e0e1f12a3a4",
"name": "forum_url_path[1]",
"value": "https://darkforums.io/Forum-Other-Leaks",
"type": "string"
},
{
"id": "a9b1c2d3-e4f5-46a7-b8c9-d0e1f2a3b4c5",
"name": "forum_url_path[2]",
"value": "https://darkforums.io/Forum-Database-Discussion",
"type": "string"
}
]
},
"options": {}
},
"type": "n8n-nodes-base.set",
"typeVersion": 3.4,
"position": [
-848,
-544
],
"id": "66809d45-b46a-4e22-b843-c6f58a19a338",
"name": "DarkForums.io \u5143\u6570\u636e"
},
{
"parameters": {
"amount": 10
},
"type": "n8n-nodes-base.wait",
"typeVersion": 1.1,
"position": [
784,
192
],
"id": "5ba2e161-c303-462f-8508-03383208167b",
"name": "\u7b49\u5f85"
},
{
"parameters": {
"fieldToSplitOut": "forum_posts",
"options": {
"destinationFieldName": "post"
}
},
"type": "n8n-nodes-base.splitOut",
"typeVersion": 1,
"position": [
480,
-304
],
"id": "ac027284-304c-48d3-84c5-863dab8e77a2",
"name": "\u518d\u6b21\u62c6\u5206\u8bba\u575b\u5e16\u5b50"
},
{
"parameters": {
"workflowId": {
"__rl": true,
"value": "jrZPgmOsShHkTEFl",
"mode": "list",
"cachedResultName": "darkweb-send-forum-posts-to-discord"
},
"workflowInputs": {
"mappingMode": "defineBelow",
"value": {
"forum_name": "={{ $json.forum_name }}",
"forum_url_path": "={{ $json.forum_url }}",
"forum_icon": "={{ $('\u5faa\u73afURL').item.json.forum_icon }}",
"post_id": "={{ $json.id }}",
"post_title": "={{ $json.post_title }}",
"post_link": "={{ $json.post_link }}",
"post_author_name": "={{ $json.post_author_name }}",
"post_author_link": "={{ $json.post_author_link }}",
"last_post_date": "={{ $json.last_post_date }}",
"last_post_author": "={{ $json.last_post_author }}",
"last_post_author_link": "={{ $json.last_post_author_link }}",
"screenshot_filename": "={{ $json.id }}-{{ $json.post_link.split('/').slice(3).join('/').replace(/[^a-zA-Z0-9-_]/g, '-') }}.jpeg",
"post_date": "={{ $json.post_date }}",
"post_alert": "={{ $json.post_alert }}",
"entity_name": "={{ $json.entity_name }}"
},
"matchingColumns": [],
"schema": [
{
"id": "forum_name",
"displayName": "forum_name",
"required": false,
"defaultMatch": false,
"display": true,
"canBeUsedToMatch": true
},
{
"id": "forum_url_path",
"displayName": "forum_url_path",
"required": false,
"defaultMatch": false,
"display": true,
"canBeUsedToMatch": true
},
{
"id": "forum_icon",
"displayName": "forum_icon",
"required": false,
"defaultMatch": false,
"display": true,
"canBeUsedToMatch": true
},
{
"id": "post_id",
"displayName": "post_id",
"required": false,
"defaultMatch": false,
"display": true,
"canBeUsedToMatch": true,
"type": "string"
},
{
"id": "post_title",
"displayName": "post_title",
"required": false,
"defaultMatch": false,
"display": true,
"canBeUsedToMatch": true,
"type": "string"
},
{
"id": "post_link",
"displayName": "post_link",
"required": false,
"defaultMatch": false,
"display": true,
"canBeUsedToMatch": true,
"type": "string"
},
{
"id": "post_author_name",
"displayName": "post_author_name",
"required": false,
"defaultMatch": false,
"display": true,
"canBeUsedToMatch": true,
"type": "string"
},
{
"id": "post_author_link",
"displayName": "post_author_link",
"required": false,
"defaultMatch": false,
"display": true,
"canBeUsedToMatch": true,
"type": "string"
},
{
"id": "post_date",
"displayName": "post_date",
"required": false,
"defaultMatch": false,
"display": true,
"canBeUsedToMatch": true,
"removed": false
},
{
"id": "last_post_date",
"displayName": "last_post_date",
"required": false,
"defaultMatch": false,
"display": true,
"canBeUsedToMatch": true
},
{
"id": "last_post_author",
"displayName": "last_post_author",
"required": false,
"defaultMatch": false,
"display": true,
"canBeUsedToMatch": true,
"type": "string"
},
{
"id": "last_post_author_link",
"displayName": "last_post_author_link",
"required": false,
"defaultMatch": false,
"display": true,
"canBeUsedToMatch": true,
"type": "string"
},
{
"id": "screenshot_filename",
"displayName": "screenshot_filename",
"required": false,
"defaultMatch": false,
"display": true,
"canBeUsedToMatch": true,
"type": "string"
},
{
"id": "post_alert",
"displayName": "post_alert",
"required": false,
"defaultMatch": false,
"display": true,
"canBeUsedToMatch": true,
"removed": false
},
{
"id": "entity_name",
"displayName": "entity_name",
"required": false,
"defaultMatch": false,
"display": true,
"canBeUsedToMatch": true,
"removed": false
}
],
"attemptToConvertTypes": false,
"convertFieldsToString": true
},
"options": {
"waitForSubWorkflow": true
}
},
"type": "n8n-nodes-base.executeWorkflow",
"typeVersion": 1.2,
"position": [
784,
-48
],
"name": "\u53d1\u9001\u5e16\u5b50\u5230Discord",
"id": "0b35f9e1-b415-4868-b377-4f8fede9ca89",
"alwaysOutputData": true,
"onError": "continueRegularOutput"
},
{
"parameters": {
"promptType": "define",
"text": "=[\n {\n \"forum_url\": \"{{ $('\u5faa\u73afURL').item.json.forum_url_path }}\",\n \"current_timestamp\": \"{{ $now.toISO() }}\"\n }\n]",
"hasOutputParser": true,
"needsFallback": true,
"options": {
"systemMessage": "=\u4f60\u662f\u4e00\u4e2a AI \u667a\u80fd\u4f53\uff0c\u8d1f\u8d23\u4f7f\u7528 Playwright MCP \u5de5\u5177\u4ece {{ $('\u5faa\u73afURL').item.json.forum_name }} \u8bba\u575b\u9875\u9762\u89e3\u6790 ARIA \u5feb\u7167 YAML \u6570\u636e\u3002\u4f60\u7684\u4efb\u52a1\u662f\u63d0\u53d6\u6709\u5173\u8bba\u575b\u5e16\u5b50\u7684\u7ed3\u6784\u5316\u4fe1\u606f\uff0c\u5e76\u5c06\u5176\u6c47\u7f16\u6210\u5177\u6709\u6b63\u786e\u72b6\u6001\u5904\u7406\u7684 JSON \u54cd\u5e94\u3002\n\n## \u91cd\u8981\uff1a\u8f93\u51fa\u72b6\u6001\u5904\u7406\n\n\u4f60\u7684\u54cd\u5e94\u5fc5\u987b\u9075\u5faa\u4ee5\u4e0b\u72b6\u6001\u89c4\u5219\uff1a\n\n### \u6210\u529f\u573a\u666f (task_status: \"success\")\n- \u5f53\u4f60\u6210\u529f\u8bbf\u95ee\u8bba\u575b\u9875\u9762\u5e76\u80fd\u63d0\u53d6\u5e16\u5b50\u6570\u636e\u65f6\n- \u8f93\u51fa\u683c\u5f0f\uff1a`{\"task_status\": \"success\", \"forum_posts\": [...]}`\n- \u5373\u4f7f\u662f\u7a7a\u7684\uff08\u672a\u627e\u5230\u5e16\u5b50\uff09\uff0c\u4e5f\u8981\u5305\u542b forum_posts \u6570\u7ec4\n- \u5728\u6210\u529f\u54cd\u5e94\u4e2d**\u7edd\u4e0d**\u5305\u542b \"failed_cause\"\n\n### \u5931\u8d25\u573a\u666f (task_status: \"failed\")\n- \u5f53\u4f60\u56e0\u4efb\u4f55\u539f\u56e0\u65e0\u6cd5\u5b8c\u6210\u4efb\u52a1\u65f6\n- \u8f93\u51fa\u683c\u5f0f\uff1a`{\"task_status\": \"failed\", \"failed_cause\": \"reason\", \"error_details\": \"optional details\"}`\n- \u5728\u5931\u8d25\u54cd\u5e94\u4e2d**\u7edd\u4e0d**\u5305\u542b \"forum_posts\"\n- **\u7edd\u4e0d**\u751f\u6210\u865a\u62df/\u4f2a\u9020\u6570\u636e\n\n**\u5931\u8d25\u539f\u56e0\u9009\u9879\uff1a**\n- `\"login_needed\"`: \u5f53\u9875\u9762\u9700\u8981\u8ba4\u8bc1/\u767b\u5f55\u65f6\n- `\"bot_captcha\"`: \u5f53\u88ab\u53cd\u722c\u866b\u7cfb\u7edf\u3001CAPTCHA \u6216 Cloudflare \u4fdd\u62a4\u963b\u6b62\u65f6\n- `\"page_unreachable\"`: \u5f53\u9875\u9762\u79bb\u7ebf\u3001\u8fd4\u56de\u9519\u8bef\u3001\u8d85\u65f6\u6216\u65e0\u6cd5\u8bbf\u95ee\u65f6\n\n---\n\n## \u63d0\u53d6\u6240\u9700\u6570\u636e\uff08\u4ec5\u9650\u6210\u529f\u60c5\u51b5\uff09\n\n### \u6b65\u9aa4 1\uff1a\u5bfc\u822a\u4e0e\u622a\u56fe\n\n1. \u4f7f\u7528 Think \u5de5\u5177\u89c4\u5212\u4f60\u7684\u65b9\u6cd5\n2. \u4f7f\u7528 `browser_navigate` \u8bbf\u95ee\u76ee\u6807 URL\n3. \u4f7f\u7528 `browser_snapshot` \u6355\u83b7\u8bba\u575b\u9875\u9762\u5185\u5bb9\n4. \u5206\u6790\u54cd\u5e94\u4ee5\u786e\u5b9a\u662f\u5426\u53ef\u80fd\u63d0\u53d6\u6570\u636e\n\n### \u6b65\u9aa4 2\uff1a\u72b6\u6001\u5224\u5b9a\n\n**\u9996\u5148\u68c0\u67e5\u8fd9\u4e9b\u5931\u8d25\u6761\u4ef6\uff1a**\n- \u767b\u5f55\u6240\u9700\u7684\u9875\u9762 / \u9700\u8981\u8ba4\u8bc1\n- \u53cd\u722c\u866b\u4fdd\u62a4 / CAPTCHA / Cloudflare \u6311\u6218\n- \u9875\u9762\u9519\u8bef\uff08404, 500, \u8d85\u65f6\u7b49\uff09\n- \u65e0\u6cd5\u8bbf\u95ee\u7684\u5185\u5bb9\n\n**\u5982\u679c\u6709\u4efb\u4f55\u5931\u8d25\u6761\u4ef6\u88ab\u68c0\u6d4b\u5230\uff1a**\n- \u7acb\u5373\u8fd4\u56de\u5e26\u6709\u9002\u5f53\u5931\u8d25\u72b6\u6001\u7684\u7ed3\u679c\n- **\u4e0d\u8981**\u5c1d\u8bd5\u63d0\u53d6\u6570\u636e\n- **\u4e0d\u8981**\u751f\u6210\u4f2a\u9020/\u865a\u62df\u6570\u636e\n\n### \u6b65\u9aa4 3\uff1a\u89e3\u6790\u5e16\u5b50\u6570\u636e\uff08\u4ec5\u9650\u6210\u529f\uff09\n\n**\u6210\u529f\u8bbf\u95ee\u9875\u9762\u7684\u8bf4\u660e\uff1a**\n\n1. **\u5b9a\u4f4d\u5e16\u5b50\u6761\u76ee**\uff1a\n - \u5728 `table` \u6216 `rowgroup` \u4e0a\u4e0b\u6587\u4e2d\u67e5\u627e `row` \u6216 `cell` \u6761\u76ee\u3002\n - \u5e16\u5b50\u6807\u9898\u901a\u5e38\u51fa\u73b0\u5728\u6807\u8bb0\u6709\u660e\u663e\u6a21\u5f0f\uff08\u5982 `/url` \u4e2d\u5305\u542b `Thread-...` \u6216\u5728\u63d0\u53ca \"by\" \u4f5c\u8005\u7684\u4e0a\u4e0b\u6587\u4e2d\uff09\u7684 `link` \u6807\u7b7e\u4e0b\u3002\n\n2. **\u63d0\u53d6\u6bcf\u4e2a\u5e16\u5b50\u7684\u5b57\u6bb5**\uff1a\n - **post_title**\uff1a\u5e16\u5b50\u4e3b `link` \u7684\u6587\u672c\u5185\u5bb9\u3002\n - **post_link**\uff1a\u8bba\u575b\u57fa\u7840 URL \u52a0\u4e0a\u5305\u542b `Thread-...` \u4e14\u4e0d\u5305\u542b `?action=lastpost` \u7684 `link` URL \u8def\u5f84\u3002\n - **post_author_name**\uff1a\u5728 `by` \u9644\u8fd1\u6216\u63d0\u5230\u4f5c\u8005\u4fe1\u606f\u7684 `link` \u4e2d\u7684\u6587\u672c\u540d\u79f0\u3002\n - **post_author_link**\uff1a\u5305\u542b `/User-<username>` \u7684\u4f5c\u8005 `link` URL\u3002\n - **post_date**\uff1a\u539f\u59cb\u5e16\u5b50\u521b\u5efa\u65e5\u671f/\u65f6\u95f4\uff08\u901a\u5e38\u5982 \"17-11-23, 05:14 PM\"\uff09\u3002\u4f7f\u7528\u8bba\u575b\u7684\u65f6\u533a\u4e0a\u4e0b\u6587\u5c06\u5176\u8f6c\u6362\u4e3a ISO 8601 \u683c\u5f0f\u3002\n - **last_post_date**\uff1a\u5728 `Last Post` \u94fe\u63a5\u6216\u9644\u8fd1\u5143\u6570\u636e\uff08\u53ef\u80fd\u662f\u76f8\u5bf9\u65f6\u95f4\u5982 \"2 minutes ago\"\uff09\u9644\u8fd1\u627e\u5230\u7684\u65e5\u671f/\u65f6\u95f4\u3002\u4f7f\u7528\u63d0\u4f9b\u7684 current_timestamp \u4f5c\u4e3a\u53c2\u8003\u8fdb\u884c\u8f6c\u6362\u3002\n - **last_post_author**\uff1a\u5728 `Last Post` \u90e8\u5206\u663e\u793a\u4e3a\u6700\u65b0\u56de\u590d\u8005\u7684\u540d\u79f0\u3002\n - **last_post_author_link**\uff1a\u6700\u65b0\u56de\u590d\u8005\u5305\u542b `/User-<username>` \u7684\u94fe\u63a5\u3002\n\n3. **\u65e5\u671f\u8f6c\u6362\u89c4\u5219**\uff1a\n - \u6765\u81ea\u7528\u6237\u8f93\u5165\u7684 `current_timestamp` \u5bf9\u4e8e\u5c06\u76f8\u5bf9\u65e5\u671f\uff08\u5982 \"2 minutes ago\"\uff09\u8f6c\u6362\u4e3a ISO 8601 \u683c\u5f0f\u81f3\u5173\u91cd\u8981\u3002\n - **\u5bf9\u4e8e post_date**\uff1a\u4ece\u8bba\u575b\u683c\u5f0f\uff08\u4f8b\u5982 \"17-11-23, 05:14 PM\"\uff09\u8f6c\u6362\u4e3a ISO 8601\u3002\u5047\u8bbe\u8bba\u575b\u7684\u65f6\u533a\u4e0e current_timestamp \u65f6\u533a\u5339\u914d\u3002\n - **\u5bf9\u4e8e last_post_date**\uff1a\n - \u5982\u679c\u662f\u76f8\u5bf9\u7684\uff08\u4f8b\u5982 \"2 minutes ago\", \"1 hour ago\", \"Less than 1 minute ago\"\uff09\uff0c\u4ece current_timestamp \u5411\u540e\u8ba1\u7b97\n - \u5982\u679c\u662f\u7edd\u5bf9\u65e5\u671f\u683c\u5f0f\uff0c\u7c7b\u4f3c\u4e8e post_date \u8fdb\u884c\u8f6c\u6362\n - \u793a\u4f8b\uff08\u5047\u8bbe current_timestamp \u662f \"{{ $now.toISO() }}\"\uff09\uff1a\n - \"Less than 1 minute ago\" \u2192 \u4ece {{ $now.toISO() }} \u51cf\u53bb 30 \u79d2 = \"{{ $now.minus({seconds: 30}).toISO() }}\"\n - \"2 minutes ago\" \u2192 \u4ece {{ $now.toISO() }} \u51cf\u53bb 2 \u5206\u949f = \"{{ $now.minus({minutes: 2}).toISO() }}\"\n - \"1 hour ago\" \u2192 \u4ece {{ $now.toISO() }} \u51cf\u53bb 1 \u5c0f\u65f6 = \"{{ $now.minus({hours: 1}).toISO() }}\"\n - \"3 days ago\" \u2192 \u4ece {{ $now.toISO() }} \u51cf\u53bb 3 \u5929 = \"{{ $now.minus({days: 3}).toISO() }}\"\n - \"Yesterday at 3:45 PM\" \u2192 \u8ba1\u7b97\u5230\u524d\u4e00\u5929\u7684\u7279\u5b9a\u65f6\u95f4\n\n4. **\u8fc7\u6ee4**\uff1a\n - \u5ffd\u7565\u4ec5\u4ec5\u662f\u8bba\u575b\u6807\u9898\u6216\u5206\u9875\u63a7\u4ef6\u7684\u884c\u3002\n - \u786e\u4fdd\u8df3\u8fc7 `Announcement` \u7c7b\u578b\u7684\u884c\uff0c\u9664\u975e\u5b83\u4eec\u9075\u5faa\u76f8\u540c\u7684\u7ed3\u6784\u3002\n\n5. **\u8f93\u51fa**\uff1a\n - \u8fd4\u56de\u683c\u5f0f\u826f\u597d\u7684 JSON\uff0c\u5305\u542b\u6210\u529f\u72b6\u6001\u548c forum_posts \u6570\u7ec4\u3002\n - \u786e\u4fdd\u6240\u6709 URL \u90fd\u662f\u7edd\u5bf9\u8def\u5f84\uff0c\u5fc5\u8981\u65f6\u5728\u524d\u9762\u52a0\u4e0a\u8bba\u575b\u57fa\u7840 URL\u3002\n - \u786e\u4fdd\u6240\u6709\u65e5\u671f\u5747\u4e3a\u5305\u542b\u65f6\u533a\u4fe1\u606f\u7684\u6b63\u786e ISO 8601 \u683c\u5f0f\u3002\n\n### \u6210\u529f\u8f93\u51fa\u793a\u4f8b\uff1a\n\n```json\n{\n \"task_status\": \"success\",\n \"forum_posts\": [\n {\n \"post_title\": \"Example Leak\",\n \"post_link\": \"{{ $('\u5faa\u73afURL').item.json.forum_url_path }}/Thread-Example-Leak\",\n \"post_author_name\": \"Username\",\n \"post_author_link\": \"{{ $('\u5faa\u73afURL').item.json.forum_url_path }}/User-Username\",\n \"post_date\": \"2023-11-17T17:14:00+02:00\",\n \"last_post_date\": \"2024-01-16T18:59:04.164+02:00\",\n \"last_post_author\": \"Replier\",\n \"last_post_author_link\": \"{{ $('\u5faa\u73afURL').item.json.forum_url_path }}/User-Replier\"\n }\n ]\n}\n```\n\n### \u5931\u8d25\u8f93\u51fa\u793a\u4f8b\uff1a\n\n```json\n{\n \"task_status\": \"failed\",\n \"failed_cause\": \"bot_captcha\",\n \"error_details\": \"Cloudflare protection detected on page\"\n}\n```\n\n```json\n{\n \"task_status\": \"failed\",\n \"failed_cause\": \"login_needed\",\n \"error_details\": \"Page redirected to login form\"\n}\n```\n\n```json\n{\n \"task_status\": \"failed\",\n \"failed_cause\": \"page_unreachable\",\n \"error_details\": \"HTTP 503 Service Unavailable\"\n}\n```\n\n---\n\n## \u53cd\u722c\u866b (ANTI-BOT) \u5904\u7406\n\n### \u4ec5\u5f53 browser_snapshot \u663e\u793a\u53cd\u722c\u866b\u4fdd\u62a4\u65f6\uff1a\n\n- \u4f7f\u7528 `browser_wait_for` \u7b49\u5f85\u65f6\u95f4\uff1a10\uff0c\u4ee5\u81ea\u52a8\u7ed5\u8fc7\n- \u518d\u6b21\u62cd\u6444 `browser_snapshot` \u68c0\u67e5\u8bba\u575b\u662f\u5426\u52a0\u8f7d\n- \u5982\u679c\u4ecd\u7136\u88ab\u5c4f\u853d\uff0c\u8fd4\u56de\u5e26\u6709 \"bot_captcha\" \u539f\u56e0\u7684\u5931\u8d25\u72b6\u6001\n\n### \u4ec5\u5f53\u51fa\u73b0\u9a8c\u8bc1\u7801 (captcha) \u65f6\uff1a\n\n- \u4f7f\u7528 `browser_hover` \u7136\u540e `browser_click` \u70b9\u51fb\u9a8c\u8bc1\u6309\u94ae\n- \u4f7f\u7528 `browser_wait_for` \u7b49\u5f85\u65f6\u95f4\uff1a5\n- \u62cd\u6444\u6700\u7ec8 `browser_snapshot` \u7528\u4e8e\u63d0\u53d6\n- \u5982\u679c\u9a8c\u8bc1\u5931\u8d25\uff0c\u8fd4\u56de\u5e26\u6709 \"bot_captcha\" \u539f\u56e0\u7684\u5931\u8d25\u72b6\u6001\n\n## \u5173\u952e\u63d0\u9192\n\n1. **\u7edd\u4e0d\u751f\u6210\u4f2a\u9020/\u865a\u62df\u6570\u636e** - \u5982\u679c\u65e0\u6cd5\u8bbf\u95ee\u771f\u5b9e\u6570\u636e\uff0c\u8fd4\u56de\u5931\u8d25\u72b6\u6001\n2. **\u59cb\u7ec8\u5148\u786e\u5b9a\u72b6\u6001** - \u5728\u5c1d\u8bd5\u63d0\u53d6\u4e4b\u524d\u68c0\u67e5\u5931\u8d25\u60c5\u51b5\n3. **\u4e25\u683c\u9075\u5faa JSON \u6a21\u5f0f** - \u6210\u529f\u54cd\u5e94\u9700\u8981 forum_posts\uff0c\u5931\u8d25\u54cd\u5e94\u9700\u8981 failed_cause\n4. **\u5931\u8d25\u539f\u56e0\u8981\u7cbe\u786e** - \u9488\u5bf9\u5177\u4f53\u60c5\u51b5\u4f7f\u7528\u6b63\u786e\u7684\u679a\u4e3e\u503c\n5. **\u4e0d\u8981\u6df7\u5408\u54cd\u5e94** - \u7edd\u4e0d\u8981\u5728\u540c\u4e00\u54cd\u5e94\u4e2d\u540c\u65f6\u5305\u542b forum_posts \u548c failed_cause\n6. **\u65e5\u671f\u8f6c\u6362\u662f\u5f3a\u5236\u6027\u7684** - \u5fc5\u987b\u4f7f\u7528\u63d0\u4f9b\u7684 current_timestamp \u4f5c\u4e3a\u53c2\u8003\u5c06\u6240\u6709\u65e5\u671f\u8f6c\u6362\u4e3a ISO 8601 \u683c\u5f0f\n7. **\u63d0\u53d6 post_date \u548c last_post_date** - \u8fd9\u4e24\u4e2a\u73b0\u5728\u90fd\u662f\u6bcf\u4e2a\u8bba\u575b\u5e16\u5b50\u7684\u5fc5\u586b\u5b57\u6bb5",
"passthroughBinaryImages": true
}
},
"type": "@n8n/n8n-nodes-langchain.agent",
"typeVersion": 2.1,
"position": [
-848,
-48
],
"id": "9bb9a2ee-ce01-465f-901f-d4dee2099499",
"name": "AI \u667a\u80fd\u4f53",
"retryOnFail": true,
"maxTries": 2,
"waitBetweenTries": 5000,
"onError": "continueErrorOutput"
},
{
"parameters": {
"sseEndpoint": "https://playwright-mcp.zeabur.app/sse",
"include": "except",
"excludeTools": [
"browser_file_upload",
"browser_install",
"browser_pdf_save",
"browser_drag",
"browser_generate_playwright_test"
]
},
"type": "@n8n/n8n-nodes-langchain.mcpClientTool",
"typeVersion": 1,
"position": [
-464,
208
],
"id": "c0710347-a519-4d07-b406-6e1841bf95db",
"name": "Playwright MCP\u5de5\u5177"
},
{
"parameters": {
"assignments": {
"assignments": [
{
"id": "894fbb6f-1112-4f6e-be85-b8ef55519296",
"name": "keywords",
"value": "=[\n [\"lockbit\"],\n [\"facebook\", \"meta\"],\n [\"bank of america\", \"bak\"],\n [\"visa\"],\n [\"united states\", \"united states of america\", \" usa \", \"american\"],\n [\"brasil\", \"brazil\", \".br\", \".com.br\", \"brazilian\"],\n [\"s\u00e3o paulo\", \"sao paulo\", \" sp \", \"saopaulo\"],\n [\"breached\", \"breachforums\", \"breach forums\", \"breached-forums\"]\n]",
"type": "array"
}
]
},
"includeOtherFields": true,
"options": {}
},
"type": "n8n-nodes-base.set",
"typeVersion": 3.4,
"position": [
784,
-544
],
"id": "d87533a9-3ef7-4596-8f42-070e07ef88b3",
"name": "\u5173\u952e\u8bcd",
"notesInFlow": true,
"notes": "This node defines the entity detection dictionary containing grouped arrays of companies and related terms. Each array represents one canonical entity (first element) followed by its variations, abbreviations, and common misspellings. For example, \"facebook\" includes variants like \"face\", \"fbook\", and \"meta\", enabling comprehensive detection of entity mentions regardless of how they're written in forum posts."
},
{
"parameters": {
"jsCode": "const { keywords } = $input.all()[0].json;\n\n function normalizeText(text) {\n return text.toLowerCase()\n .normalize('NFD').replace(/[\\u0300-\\u036f]/g, '') // Remove accents\n .replace(/[^\\w\\s]/g, ' ') // Replace special chars with spaces\n .replace(/\\s+/g, ' ') // Normalize whitespace\n .trim();\n }\n\n function findMatchingEntities(text, keywords) {\n const normalizedText = normalizeText(text);\n const matchedEntities = [];\n\n keywords.forEach(group => {\n const mainEntity = group[0];\n const hasMatch = group.some(variant => {\n const normalizedVariant = normalizeText(variant);\n\n // Strategy based on variant characteristics:\n if (normalizedVariant.length <= 3) {\n // Short terms: exact word boundaries (avoid \"usa\" in \"usage\")\n const regex = new RegExp(`\\\\b${normalizedVariant}\\\\b`, 'i');\n return regex.test(normalizedText);\n } else if (normalizedVariant.includes(' ')) {\n // Multi-word terms: substring matching\n return normalizedText.includes(normalizedVariant);\n } else {\n // Single words: try both approaches\n const wordBoundary = new RegExp(`\\\\b${normalizedVariant}\\\\b`, 'i');\n const substring = normalizedText.includes(normalizedVariant);\n return wordBoundary.test(normalizedText) || substring;\n }\n });\n\n if (hasMatch) {\n matchedEntities.push(mainEntity);\n }\n });\n\n return matchedEntities;\n }\n\n return $input.all().map(item => {\n const postTitle = item.json.post?.post_title || '';\n const foundEntities = findMatchingEntities(postTitle, keywords);\n\n return {\n post: item.json.post,\n entity_name: foundEntities.length > 0 ? foundEntities : null, // null when empty\n post_alert: foundEntities.length > 0\n };\n });"
},
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
784,
-304
],
"id": "b0ad90e0-c1f4-45ce-9568-169ed1ed1c21",
"name": "\u5b9e\u4f53\u5339\u914d\u4ee3\u7801",
"notesInFlow": true,
"notes": "This node performs intelligent entity detection on forum post titles using text normalization and hybrid matching strategies. It processes each post title by removing accents, normalizing whitespace, and applying different matching approaches: exact word boundaries for short terms (\u22643 chars), substring matching for multi-word phrases, and combined word boundary + substring matching for single words. The output includes the original post data plus entity_name (array of detected entities or null) and keyword_alert (boolean flag), providing structured threat intelligence data for database storage."
},
{
"parameters": {
"fieldToSplitOut": "forum_url_path",
"include": "allOtherFields",
"options": {}
},
"type": "n8n-nodes-base.splitOut",
"typeVersion": 1,
"position": [
-512,
-544
],
"id": "4293d486-a32d-40f9-9806-d801437bd8c7",
"name": "\u62c6\u5206\u5f85\u8ffd\u8e2aURL"
},
{
"parameters": {
"amount": 30
},
"type": "n8n-nodes-base.wait",
"typeVersion": 1.1,
"position": [
784,
416
],
"id": "6375f030-7208-47d5-a286-614dfbb04bc5",
"name": "\u7b49\u5f85\u91cd\u8bd5"
},
{
"parameters": {
"authentication": "webhook",
"options": {
"username": "DarkWeb Forums",
"wait": true
},
"embeds": {
"values": [
{
"description": "=### {{ $('\u5faa\u73afURL').item.json.forum_name }}\n- {{ $('\u5faa\u73afURL').item.json.forum_url_path }}\n> AI \u667a\u80fd\u4f53\u5c1d\u8bd5\u83b7\u53d6\u6570\u636e **3\u6b21** \u4f46\u672a\u80fd\u6210\u529f\u3002\n`\u67e5\u770b\u5de5\u4f5c\u6d41\u65e5\u5fd7 \u2022 \u9700\u8981\u4eba\u5de5\u5ba1\u67e5`",
"author": "=\u26a0\ufe0f \u8bba\u575b\u8ffd\u8e2a\u91cd\u8bd5\u5931\u8d25",
"color": "#E74C3C",
"timestamp": "={{ $now.toISO() }}"
}
]
}
},
"type": "n8n-nodes-base.discord",
"typeVersion": 2,
"position": [
176,
192
],
"id": "c14ea7f5-7ebc-4b1c-a024-9f0adad68714",
"name": "\u901a\u77e5\u91cd\u8bd5\u5931\u8d25",
"executeOnce": true,
"retryOnFail": false,
"credentials": {
"discordWebhookApi": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "strict",
"version": 2
},
"conditions": [
{
"id": "a86fbd7e-7add-4cd2-9107-58defd2f9eef",
"leftValue": "={{ $runIndex }}",
"rightValue": 2,
"operator": {
"type": "number",
"operation": "equals"
}
}
],
"combinator": "and"
},
"options": {}
},
"type": "n8n-nodes-base.if",
"typeVersion": 2.2,
"position": [
-160,
192
],
"id": "b48f6536-8945-409c-8ed7-7f19837aab94",
"name": "\u91cd\u8bd5\u8ba1\u6570 (2\u6b21)"
},
{
"parameters": {
"model": "gpt-4o",
"options": {}
},
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"typeVersion": 1,
"position": [
-1136,
-32
],
"id": "68759977-5219-4ed2-8f0d-d6f8b4633e51",
"name": "OpenAI Chat Model (GPT-4o)",
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"model": "gpt-4o-mini",
"options": {
"temperature": 0.2
}
},
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"typeVersion": 1,
"position": [
-1136,
208
],
"id": "712c5b3b-432c-4deb-9aaf-cbfa7d90323d",
"name": "OpenAI Chat Model (GPT-4o Mini)",
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"authentication": "webhook",
"options": {
"username": "DarkWeb Forums",
"wait": false
},
"embeds": {
"values": [
{
"description": "=### {{ $('\u5faa\u73afURL').item.json.forum_name }}\n- {{ $('\u5faa\u73afURL').item.json.forum_url_path }}\n`\u5c1d\u8bd5\u7b2c ({{ $runIndex+1 }}) \u6b21`",
"author": "=\ud83d\udd04 \u65b0\u7684\u8bba\u575b\u8ffd\u8e2a\u5df2\u542f\u52a8",
"color": "#3498DB",
"timestamp": "={{ $now.toISO() }}"
}
]
}
},
"type": "n8n-nodes-base.discord",
"typeVersion": 2,
"position": [
-1152,
416
],
"id": "423b713f-27d5-4afb-b4f4-d542ea104a3e",
"name": "\u901a\u77e5\u5f00\u59cb\u65b0\u91cd\u8bd5",
"credentials": {
"discordWebhookApi": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"jsCode": "const allPosts = $(\"AI \u667a\u80fd\u4f53\").first().json.output?.forum_posts || [];\nconst now = new Date();\nconst twentyFourHoursAgo = new Date(now.getTime() - 24 * 60 * 60 * 1000);\n\nconst activePosts = allPosts.filter(post => {\n const lastPostDate = new Date(post.last_post_date);\n return lastPostDate >= twentyFourHoursAgo;\n});\n\nif (activePosts.length === 0) {\n return { hasActivePosts: false };\n}\n\nconst recapList = activePosts.map(post => `- [${post.post_title}](${post.post_link})`).join('\\n');\n\nreturn {\n hasActivePosts: true,\n recap_message: `### \ud83d\udcca \u4eca\u65e5\u6d3b\u8dc3\u52a8\u6001\u56de\u987e\\n\u4ee5\u4e0b\u662f\u8fc7\u53bb 24 \u5c0f\u65f6\u5185\u6709\u65b0\u52a8\u9759\u7684\u5e16\u5b50\uff1a\\n\\n${recapList}`\n};"
},
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
480,
-48
],
"id": "recap-filter-node-1",
"name": "\u7b5b\u9009\u4eca\u65e5\u6d3b\u8dc3\u5e16\u5b50"
},
{
"parameters": {
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "loose",
"version": 2
},
"conditions": [
{
"id": "c16d",
"leftValue": "={{ $json.hasActivePosts }}",
"rightValue": "",
"operator": {
"type": "boolean",
"operation": "true",
"singleValue": true
}
}
],
"combinator": "and"
},
"looseTypeValidation": true,
"options": {}
},
"type": "n8n-nodes-base.if",
"typeVersion": 2.2,
"position": [
784,
-48
],
"id": "recap-if-node-1",
"name": "\u662f\u5426\u6709\u6d3b\u8dc3\u5e16\u5b50?"
},
{
"parameters": {
"authentication": "webhook",
"options": {
"username": "DarkWeb Forums",
"wait": true
},
"embeds": {
"values": [
{
"description": "={{ $json.recap_message }}",
"author": "=\ud83d\udccb \u4eca\u65e5\u52a8\u6001\u6c47\u603b ({{ $('\u5faa\u73afURL').item.json.forum_name }})",
"color": "#F1C40F",
"timestamp": "={{ $now.toISO() }}"
}
]
}
},
"type": "n8n-nodes-base.discord",
"typeVersion": 2,
"position": [
1088,
-160
],
"id": "recap-discord-node-1",
"name": "\u901a\u77e5\u4eca\u65e5\u6d3b\u8dc3\u6c47\u603b",
"executeOnce": true,
"credentials": {
"discordWebhookApi": {
"name": "<your credential>"
}
}
}
],
"connections": {
"\u7ed3\u6784\u5316\u8f93\u51fa\u89e3\u6790\u5668": {
"ai_outputParser": [
[
{
"node": "AI \u667a\u80fd\u4f53",
"type": "ai_outputParser",
"index": 0
}
]
]
},
"\u601d\u8003(Think)\u5de5\u5177": {
"ai_tool": [
[
{
"node": "AI \u667a\u80fd\u4f53",
"type": "ai_tool",
"index": 0
}
]
]
},
"Supabase RPC \u68c0\u67e5\u73b0\u6709URL": {
"main": [
[
{
"node": "\u5408\u5e76\u4ec5\u65b0URL",
"type": "main",
"index": 1
}
],
[
{
"node": "\u901a\u77e5\u8ffd\u8e2a\u5931\u8d25",
"type": "main",
"index": 0
}
]
]
},
"\u5408\u5e76\u4ec5\u65b0URL": {
"main": [
[
{
"node": "\u91cd\u7ec4\u65b0\u5e16\u5b50\u6570\u7ec4",
"type": "main",
"index": 0
}
]
]
},
"\u901a\u77e5\u5f00\u59cb\u8ffd\u8e2a": {
"main": [
[
{
"node": "AI \u667a\u80fd\u4f53",
"type": "main",
"index": 0
}
]
]
},
"\u901a\u77e5\u8ffd\u8e2a\u5931\u8d25": {
"main": [
[
{
"node": "\u91cd\u8bd5\u8ba1\u6570 (2\u6b21)",
"type": "main",
"index": 0
}
]
]
},
"\u6709\u65b0\u5e16\u5b50\u5417?": {
"main": [
[
{
"node": "\u518d\u6b21\u62c6\u5206\u8bba\u575b\u5e16\u5b50",
"type": "main",
"index": 0
}
],
[
{
"node": "\u7b5b\u9009\u4eca\u65e5\u6d3b\u8dc3\u5e16\u5b50",
"type": "main",
"index": 0
}
]
]
},
"\u7b5b\u9009\u4eca\u65e5\u6d3b\u8dc3\u5e16\u5b50": {
"main": [
[
{
"node": "\u662f\u5426\u6709\u6d3b\u8dc3\u5e16\u5b50?",
"type": "main",
"index": 0
}
]
]
},
"\u662f\u5426\u6709\u6d3b\u8dc3\u5e16\u5b50?": {
"main": [
[
{
"node": "\u901a\u77e5\u4eca\u65e5\u6d3b\u8dc3\u6c47\u603b",
"type": "main",
"index": 0
}
],
[
{
"node": "\u901a\u77e5\u672a\u53d1\u73b0\u65b0\u5e16\u5b50",
"type": "main",
"index": 0
}
]
]
},
"\u901a\u77e5\u672a\u53d1\u73b0\u65b0\u5e16\u5b50": {
"main": [
[
{
"node": "\u7b49\u5f85",
"type": "main",
"index": 0
}
]
]
},
"\u5b9a\u65f6\u89e6\u53d1\u5668": {
"main": [
[
{
"node": "DarkForums.io \u5143\u6570\u636e",
"type": "main",
"index": 0
}
]
]
},
"\u5207\u6362\u667a\u80fd\u4f53\u8f93\u51fa": {
"main": [
[
{
"node": "Supabase RPC \u68c0\u67e5\u73b0\u6709URL",
"type": "main",
"index": 0
},
{
"node": "\u62c6\u5206\u8bba\u575b\u5e16\u5b50",
"type": "main",
"index": 0
}
],
[
{
"node": "\u901a\u77e5\u8ffd\u8e2a\u5931\u8d25",
"type": "main",
"index": 0
}
],
[
{
"node": "\u901a\u77e5\u8ffd\u8e2a\u5931\u8d25",
"type": "main",
"index": 0
}
]
]
},
"\u5faa\u73afURL": {
"main": [
[],
[
{
"node": "\u901a\u77e5\u5f00\u59cb\u8ffd\u8e2a",
"type": "main",
"index": 0
}
]
]
},
"\u62c6\u5206\u8bba\u575b\u5e16\u5b50": {
"main": [
[
{
"node": "\u5408\u5e76\u4ec5\u65b0URL",
"type": "main",
"index": 0
}
]
]
},
"\u91cd\u7ec4\u65b0\u5e16\u5b50\u6570\u7ec4": {
"main": [
[
{
"node": "\u6709\u65b0\u5e16\u5b50\u5417?",
"type": "main",
"index": 0
}
]
]
},
"\u6dfb\u52a0\u5e16\u5b50\u5230Supabase": {
"main": [
[
{
"node": "\u53d1\u9001\u5e16\u5b50\u5230Discord",
"type": "main",
"index": 0
}
],
[
{
"node": "\u7b49\u5f85",
"type": "main",
"index": 0
}
]
]
},
"DarkForums.io \u5143\u6570\u636e": {
"main": [
[
{
"node": "\u62c6\u5206\u5f85\u8ffd\u8e2aURL",
"type": "main",
"index": 0
}
]
]
},
"\u7b49\u5f85": {
"main": [
[
{
"node": "\u5faa\u73afURL",
"type": "main",
"index": 0
}
]
]
},
"\u518d\u6b21\u62c6\u5206\u8bba\u575b\u5e16\u5b50": {
"main": [
[
{
"node": "\u5173\u952e\u8bcd",
"type": "main",
"index": 0
}
]
]
},
"\u53d1\u9001\u5e16\u5b50\u5230Discord": {
"main": [
[
{
"node": "\u7b49\u5f85",
"type": "main",
"index": 0
}
]
]
},
"AI \u667a\u80fd\u4f53": {
"main": [
[
{
"node": "\u5207\u6362\u667a\u80fd\u4f53\u8f93\u51fa",
"type": "main",
"index": 0
}
],
[
{
"node": "\u901a\u77e5\u8ffd\u8e2a\u5931\u8d25",
"type": "main",
"index": 0
}
]
]
},
"Playwright MCP\u5de5\u5177": {
"ai_tool": [
[
{
"node": "AI \u667a\u80fd\u4f53",
"type": "ai_tool",
"index": 0
}
]
]
},
"\u5173\u952e\u8bcd": {
"main": [
[
{
"node": "\u5b9e\u4f53\u5339\u914d\u4ee3\u7801",
"type": "main",
"index": 0
}
]
]
},
"\u5b9e\u4f53\u5339\u914d\u4ee3\u7801": {
"main": [
[
{
"node": "\u6dfb\u52a0\u5e16\u5b50\u5230Supabase",
"type": "main",
"index": 0
}
]
]
},
"\u62c6\u5206\u5f85\u8ffd\u8e2aURL": {
"main": [
[
{
"node": "\u5faa\u73afURL",
"type": "main",
"index": 0
}
]
]
},
"\u7b49\u5f85\u91cd\u8bd5": {
"main": [
[
{
"node": "\u901a\u77e5\u5f00\u59cb\u65b0\u91cd\u8bd5",
"type": "main",
"index": 0
}
]
]
},
"\u901a\u77e5\u91cd\u8bd5\u5931\u8d25": {
"main": [
[
{
"node": "\u7b49\u5f85",
"type": "main",
"index": 0
}
]
]
},
"\u91cd\u8bd5\u8ba1\u6570 (2\u6b21)": {
"main": [
[
{
"node": "\u901a\u77e5\u91cd\u8bd5\u5931\u8d25",
"type": "main",
"index": 0
}
],
[
{
"node": "\u7b49\u5f85\u91cd\u8bd5",
"type": "main",
"index": 0
}
]
]
},
"OpenAI Chat Model (GPT-4o)": {
"ai_languageModel": [
[
{
"node": "AI \u667a\u80fd\u4f53",
"type": "ai_languageModel",
"index": 1
}
]
]
},
"OpenAI Chat Model (GPT-4o Mini)": {
"ai_languageModel": [
[
{
"node": "\u7ed3\u6784\u5316\u8f93\u51fa\u89e3\u6790\u5668",
"type": "ai_languageModel",
"index": 0
},
{
"node": "AI \u667a\u80fd\u4f53",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"\u901a\u77e5\u5f00\u59cb\u65b0\u91cd\u8bd5": {
"main": [
[
{
"node": "AI \u667a\u80fd\u4f53",
"type": "main",
Credentials you'll need
Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.
discordWebhookApiopenAiApisupabaseApi
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
darkweb-get-forum-posts. Uses outputParserStructured, toolThink, httpRequest, discord. Scheduled trigger; 32 nodes.
Source: https://github.com/adminlove520/DarkWeb-Forums-Tracking/blob/d3cbfee4f10338ba091739caf7dda246e7e74904/n8n/workflows/darkweb-get-forum-posts.json — original creator credit. Request a take-down →
Related workflows
Workflows that share integrations, category, or trigger type with this one. All free to copy and import.
kisisel asistan. Uses toolWorkflow, toolHttpRequest, toolCalculator, toolThink. Scheduled trigger; 43 nodes.
This workflow automatically generates professional, branded LinkedIn posts using your custom Figma designs. Perfect for marketers, agencies, content creators, and businesses who want to maintain consi
Generate AI video clips to promote products, services or events on social media. Use gotoHuman as an interface to control and supervise each step of the workflow to create content that's actually wort
System Architecture Two integrated N8N workflows providing automated US stock portfolio management through Telegram:
This workflow automates the complete blog publishing process. It removes manual work from content creation, image generation, category management, and WordPress publishing by using AI and n8n. It help