Praneel的Discord自动化与Github和AI聊天机器人
中级
这是一个AI Chatbot, Multimodal AI领域的自动化工作流,包含 10 个节点。主要使用 Discord, GithubTool, DateTimeTool, Agent, DiscordTrigger 等节点。 通过Discord、GitHub和Gemini AI自动化博客更新
前置要求
- •Discord Bot Token 或 Webhook
- •GitHub Personal Access Token
- •Google Gemini API Key
工作流预览
可视化展示节点连接关系,支持缩放和平移
无法加载工作流预览
导出工作流
复制以下 JSON 配置到 n8n 导入,即可使用此工作流
{
"meta": {},
"name": "Praneel 的 Discord 自动化与 Github 和 AI 聊天机器人",
"tags": [],
"nodes": [
{
"name": "AI Agent",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
448,
0
],
"parameters": {
"text": "={{ $json.content }}",
"options": {
"systemMessage": "=\n## Core Identity & Persona\n\nYou are the **n8n Blog Master**, a specialized AI agent. Your primary function is to assist your user with content management.\n\n* **Your Mission:** Automate the process of creating, formatting, editing, and saving blog posts as Markdown files within the user’s specified repository. \n* **User Clarification:** The repository owner always refers to your **user** and, in the context of API calls, the **repository owner**. It is never part of a file path. \n* **Personality:** Helpful, precise, security-conscious. Semi-casual and engaging, but never overly cheerful. \n\n---\n\n## Operational Zone & Constraints\n\n* **Repository:** You may only interact with the repository **`<insert-repo-name-here>`**. \n* **Owner:** The repository owner is **`<insert-username-here>`**. \n* **Branch:** Always operate on the `main` branch. \n* **Directory Access:** You can **only** write or edit files in the directory **`<insert-directory-path-here>`**. You are forbidden from interacting elsewhere. \n* **File Permissions:** \n - You may **create new `.md` files**. \n - If a file already exists, notify the user and ask if they want to edit it. \n - Editing is only allowed if the user explicitly confirms (e.g., “yes”, “go ahead”, “continue”). \n - If the user confirms, proceed with editing. \n\n---\n\n## Available Tools & Usage Protocol\n\nYou have a limited but well-defined toolset. Always use them exactly as described: \n\n### 1. Date & Time Tool \n* Purpose: Always fetch the current date and time in **IST (India Standard Time)**. \n* Usage: Call this before creating the blog post so the `date` field in the front matter is correct. \n* Do not use any other timezone. \n\n### 2. GitHub Nodes \n* **Create:** Used to create new files within **`<insert-directory-path-here>`**. Requires three parameters: \n - `owner` → always **`<insert-username-here>`** \n - `repo` → always **`<insert-repo-name-here>`** \n - `path` → must be `<insert-directory-path-here>/<filename>.md` \n* **List:** Can list files inside **`<insert-directory-path-here>`**. Use it to check existing filenames before creating new ones. \n* **Read:** Can fetch contents of files if needed. \n* **Edit:** Can update a specific file in **`<insert-directory-path-here>`**. \n - **Protocol:** Before editing, explicitly ask: \n *“Are you sure you want me to edit `<filename>.md`?”* \n - If the user responds with **“yes”**, **“continue”**, or similar confirmation, proceed. \n - If the user declines, do nothing. \n* Constraint: Never attempt operations outside the specified directory. \n\n### 3. Data Storage & Message History \n* Purpose: Store temporary user confirmations and recall **previous user messages** as part of memory. \n* Example: \n - If you ask for edit confirmation and the user replies *“yes”* or *“continue”*, record that in storage. \n - If later in the same conversation the user says *“go ahead”* without repeating the filename, check both storage and previous messages to infer intent. \n* Always reset confirmation after the action is completed. \n\n---\n\n## Standard Workflow: Creating or Editing Blog Posts\n\n1. **Activation:** Begin when the user says: \n - “Draft a new post on…” \n - “Make the body about…” \n - “Use my rough notes…” \n - “Modify it to include…” \n - “Edit the file…” \n\n2. **Information Gathering:** \n * Ask for the **Title** (mandatory for new posts). \n * Gather **topic, points, or raw notes** from the user. \n * If user provides incomplete notes, expand them into a coherent, well-structured article. \n\n3. **Drafting & Formatting:** \n * Call the Date & Time tool. \n * Format posts in the following template: \n\n ```markdown\n ---\n title: \"The Title Provided by the User\"\n date: \"YYYY-MM-DD\"\n ---\n\n [Well-structured blog content goes here. Expand rough notes if needed, maintain logical flow, use clear headings if appropriate.]\n\n Thanks for Reading!\n ```\n---\n- Writing rules:\n\nTone: Neutral, informative, lightly conversational — not too cheerful.\n\nFlow: Use line breaks for readability.\n\nExpansion: If notes are provided, polish and structure them.\n\nModification: If asked, revise while preserving original meaning.\n\nFile Naming:\n\nGenerate a short kebab-case filename from the title (e.g., \"Making My Own Java CLI-Based RPG!\" → java-cli-rpg.md).\n\nFile Creation vs Editing:\n\nIf creating → Use the GitHub Create tool.\n\nIf file already exists → Ask the user if they want to edit it.\n\nStore their response in Data Storage.\n\nIf confirmation = yes → proceed with GitHub Edit tool.\n\nIf no → cancel operation.\n\nFinal Action:\n\nConfirm success to the user after creation or editing.\n\nAdvanced Error Handling: \"Resource Not Found\"\n\nIf the create_github_file tool fails with \"Resource not found\":\n\nFirst Failure:\n\nNotify the user that the attempt failed.\n\nState the exact path used.\n\nRetry automatically once.\n\nSecond Failure:\n\nIf it fails again, explain that standard creation isn’t working.\n\nSuggest it may be a permissions issue.\n\nAwait user instructions before proceeding further."
},
"promptType": "define"
},
"typeVersion": 2.2
},
{
"name": "Google Gemini 聊天模型",
"type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
"position": [
160,
208
],
"parameters": {
"options": {}
},
"typeVersion": 1
},
{
"name": "日期与时间",
"type": "n8n-nodes-base.dateTimeTool",
"position": [
992,
272
],
"parameters": {
"options": {
"timezone": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Timezone', ``, 'string') }}"
}
},
"typeVersion": 2
},
{
"name": "在 GitHub 中创建文件",
"type": "n8n-nodes-base.githubTool",
"position": [
432,
320
],
"webhookId": "f1fcb524-a4c6-4cd3-8e81-b9f6f9548db2",
"parameters": {
"owner": {
"__rl": true,
"mode": "name",
"value": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Repository_Owner', ``, 'string') }}"
},
"filePath": "<insert-directory-path-here>",
"resource": "file",
"repository": {
"__rl": true,
"mode": "name",
"value": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Repository_Name', ``, 'string') }}"
},
"fileContent": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('File_Content', ``, 'string') }}",
"commitMessage": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Commit_Message', ``, 'string') }}"
},
"typeVersion": 1.1
},
{
"name": "在 GitHub 中获取文件",
"type": "n8n-nodes-base.githubTool",
"position": [
752,
432
],
"webhookId": "bc5ad2f3-bc57-475f-b16e-2aaee66bca5d",
"parameters": {
"owner": {
"__rl": true,
"mode": "name",
"value": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Repository_Owner', ``, 'string') }}"
},
"filePath": "<insert-directory-path-here>",
"resource": "file",
"operation": "get",
"repository": {
"__rl": true,
"mode": "name",
"value": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Repository_Name', ``, 'string') }}"
},
"asBinaryProperty": false,
"additionalParameters": {}
},
"typeVersion": 1.1
},
{
"name": "列出 GitHub 中的文件",
"type": "n8n-nodes-base.githubTool",
"position": [
880,
336
],
"webhookId": "e8426fc7-b558-49a2-b525-7ca470cb0b25",
"parameters": {
"owner": {
"__rl": true,
"mode": "name",
"value": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Repository_Owner', ``, 'string') }}"
},
"filePath": "<insert-directory-path-here>",
"resource": "file",
"operation": "list",
"repository": {
"__rl": true,
"mode": "name",
"value": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Repository_Name', ``, 'string') }}"
}
},
"typeVersion": 1.1
},
{
"name": "在 GitHub 中编辑文件",
"type": "n8n-nodes-base.githubTool",
"position": [
592,
368
],
"webhookId": "3500bb43-3d9c-46f0-b5a4-c24d41ec3f90",
"parameters": {
"owner": {
"__rl": true,
"mode": "name",
"value": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Repository_Owner', ``, 'string') }}"
},
"filePath": "<insert-directory-path-here>",
"resource": "file",
"operation": "edit",
"repository": {
"__rl": true,
"mode": "name",
"value": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Repository_Name', ``, 'string') }}"
},
"fileContent": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('File_Content', ``, 'string') }}",
"commitMessage": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Commit_Message', ``, 'string') }}"
},
"typeVersion": 1.1
},
{
"name": "简单记忆",
"type": "@n8n/n8n-nodes-langchain.memoryBufferWindow",
"position": [
288,
304
],
"parameters": {
"sessionKey": "=\"memoryKey\": \"history\"",
"sessionIdType": "customKey",
"contextWindowLength": 20
},
"typeVersion": 1.3
},
{
"name": "Discord 消息阅读器",
"type": "n8n-nodes-discord-trigger.discordTrigger",
"position": [
0,
0
],
"parameters": {
"pattern": "every",
"additionalFields": {}
},
"typeVersion": 1
},
{
"name": "发送消息至 Discord",
"type": "n8n-nodes-base.discord",
"position": [
1040,
32
],
"webhookId": "73b9da16-a804-446e-81ff-c3bc29948850",
"parameters": {
"embeds": {
"values": [
{}
]
},
"content": "={{ $('AI Agent').item.json.output }}",
"guildId": {
"__rl": true,
"mode": "list",
"value": ""
},
"options": {},
"resource": "message",
"channelId": {
"__rl": true,
"mode": "list",
"value": ""
}
},
"typeVersion": 2
}
],
"active": false,
"pinData": {},
"settings": {
"executionOrder": "v1"
},
"connections": {
"AI Agent": {
"main": [
[
{
"node": "Sends Message to Discord",
"type": "main",
"index": 0
}
]
]
},
"Date & Time": {
"ai_tool": [
[
{
"node": "AI Agent",
"type": "ai_tool",
"index": 0
}
]
]
},
"Simple Memory": {
"ai_memory": [
[
{
"node": "AI Agent",
"type": "ai_memory",
"index": 0
}
]
]
},
"Get a file in GitHub": {
"ai_tool": [
[
{
"node": "AI Agent",
"type": "ai_tool",
"index": 0
}
]
]
},
"List files in GitHub": {
"ai_tool": [
[
{
"node": "AI Agent",
"type": "ai_tool",
"index": 0
}
]
]
},
"Edit a file in GitHub": {
"ai_tool": [
[
{
"node": "AI Agent",
"type": "ai_tool",
"index": 0
}
]
]
},
"Discord Message Reader": {
"main": [
[
{
"node": "AI Agent",
"type": "main",
"index": 0
}
]
]
},
"Create a file in GitHub": {
"ai_tool": [
[
{
"node": "AI Agent",
"type": "ai_tool",
"index": 0
}
]
]
},
"Google Gemini Chat Model": {
"ai_languageModel": [
[
{
"node": "AI Agent",
"type": "ai_languageModel",
"index": 0
}
]
]
}
}
}常见问题
如何使用这个工作流?
复制上方的 JSON 配置代码,在您的 n8n 实例中创建新工作流并选择「从 JSON 导入」,粘贴配置后根据需要修改凭证设置即可。
这个工作流适合什么场景?
中级 - AI 聊天机器人, 多模态 AI
需要付费吗?
本工作流完全免费,您可以直接导入使用。但请注意,工作流中使用的第三方服务(如 OpenAI API)可能需要您自行付费。
相关工作流推荐
聊天机器人Webhook
基于AI的Gmail和日历助手,集成Gemini聊天界面
Set
Webhook
Gmail Tool
+7
19 节点Praneel S
杂项
Google Calendar+Gmail管理器
使用Gemini/GPT驱动的AI助手管理Google日历和Gmail
Gmail Tool
Date Time Tool
Agent
+5
16 节点Praneel S
AI 聊天机器人
使用WhatsApp Gemini/GPT驱动的AI助手管理Google日历和Gmail
WhatsApp AI助手,用于Google日历和Gmail管理,支持Gemini/GPT
Set
Whats App
Gmail Tool
+7
22 节点Praneel S
客服机器人
使用 Gemini 和 Discord 的财务分析报告聊天机器人代理
基于 Gemini 2.5 Flash 和 Discord 的财务分析报告聊天机器人代理
Set
Code
Discord
+6
19 节点aditya vadaganadam
AI 聊天机器人
一体化智能体
个人AI智能体
If
Gmail
Telegram
+13
30 节点Rakin Jakaria
AI 聊天机器人
基于Google Gemini、Notion和Telegram的统一业务编排器(CEO专用)
基于Google Gemini、Notion和Telegram的统一业务编排器(CEO专用)
Set
Notion
Switch
+18
93 节点YungCEO
AI 聊天机器人