مستندات n8n
74+ نود
🎮

دیسکورد

Discord

اتوماسیون دیسکورد: ارسال پیام، مدیریت سرور، Embeds، نقش‌ها و Webhook

ارتباطات
متوسط
۰ بازدید
n8n 1.0+

نمای کلی

نود دیسکورد یکی از محبوب‌ترین نودهای n8n برای مدیریت خودکار سرورها و کامیونیتی‌هاست، به خصوص در جامعه گیمینگ و فناوری ایران.

قابلیت‌های کلیدی:

  • ارسال پیام متنی و Rich Embed به کانال‌ها
  • ویرایش و حذف پیام‌ها
  • ارسال فایل و تصویر
  • مدیریت اعضا: Kick، Ban، Unban
  • مدیریت نقش‌ها: اضافه و حذف Role
  • ایجاد و مدیریت کانال‌ها و Thread‌ها
  • دریافت لیست اعضا و اطلاعات کاربران
  • واکنش (Reaction) به پیام‌ها
  • ارسال پیام از طریق Webhook (بدون نیاز به Bot)

Discord Trigger:

  • دریافت پیام جدید در کانال
  • عضویت و خروج اعضا
  • واکنش به پیام‌ها
  • رویدادهای سرور (Guild Events)
  • تغییر نقش‌ها و دسترسی‌ها

اهمیت Discord در ایران:

  • پلتفرم اصلی جامعه گیمرها و توسعه‌دهندگان ایرانی
  • مدیریت کامیونیتی پروژه‌های Web3 و کریپتو
  • گروه‌های آموزشی و هم‌آموزی برنامه‌نویسی
  • پشتیبانی آنلاین محصولات دیجیتال
  • برگزاری رویدادها و مسابقات آنلاین
  • مدیریت تیم‌های eSports و گیلدهای بازی

احراز هویت

احراز هویت دیسکورد

روش ۱: Bot Token (اصلی‌ترین روش)

#### ساخت Bot در Developer Portal:

  1. 1به [discord.com/developers/applications](https://discord.com/developers/applications) بروید
  2. 2روی New Application کلیک کنید
  3. 3نام اپلیکیشن را وارد کنید (مثل: "n8n Automation Bot")
  4. 4به بخش Bot بروید و Add Bot بزنید
  5. 5Token را با Reset Token بگیرید:
code
MTIzNDU2Nzg5.AbCdEf.GhIjKlMnOpQrStUvWxYz
  1. 1Token را فوراً کپی کنید (فقط یک بار نمایش داده می‌شود)

#### تنظیم Intents (بسیار مهم): در بخش Bot > Privileged Gateway Intents فعال کنید:

code
✅ PRESENCE INTENT        → دریافت وضعیت آنلاین اعضا
✅ SERVER MEMBERS INTENT  → دریافت لیست و تغییرات اعضا
✅ MESSAGE CONTENT INTENT → خواندن محتوای پیام‌ها

⚠️ نکته مهم: بدون فعال کردن MESSAGE CONTENT INTENT، ربات محتوای پیام‌ها را نمی‌خواند!

#### دعوت Bot به سرور:

  1. 1به بخش OAuth2 > URL Generator بروید
  2. 2Scopes: bot و applications.commands را انتخاب کنید
  3. 3Bot Permissions مورد نیاز:
code
✅ Send Messages          → ارسال پیام
   ✅ Manage Messages        → حذف/پین پیام
   ✅ Embed Links            → ارسال Embed
   ✅ Attach Files           → ارسال فایل
   ✅ Read Message History   → خواندن تاریخچه پیام
   ✅ Add Reactions          → اضافه کردن واکنش
   ✅ Manage Channels        → مدیریت کانال‌ها
   ✅ Manage Roles           → مدیریت نقش‌ها
   ✅ Kick Members           → اخراج اعضا
   ✅ Ban Members            → بن کردن اعضا
   ✅ Create Public Threads  → ایجاد Thread
  1. 1لینک تولید شده را در مرورگر باز کنید و سرور را انتخاب کنید

#### تنظیم در n8n:

  1. 1Credentials > Discord Bot API
  2. 2Bot Token را وارد کنید
  3. 3Test Connection بزنید

روش ۲: OAuth2 (برای اپلیکیشن‌ها)

  1. 1در Developer Portal > OAuth2
  2. 2Client ID و Client Secret را بردارید
  3. 3Redirect URL را تنظیم کنید
  4. 4Scopes مورد نیاز:
code
identify      → اطلاعات کاربر
   guilds        → لیست سرورهای کاربر
   guilds.join   → عضویت در سرور
   messages.read → خواندن پیام‌ها

روش ۳: Webhook URL (ساده‌ترین روش)

برای فقط ارسال پیام بدون نیاز به Bot:

  1. 1در سرور Discord: Channel Settings > Integrations > Webhooks
  2. 2New Webhook بزنید
  3. 3نام و آواتار و کانال مقصد را تنظیم کنید
  4. 4Copy Webhook URL بزنید:
code
https://discord.com/api/webhooks/123456/abcdef...
  1. 1این URL را مستقیماً در HTTP Request Node استفاده کنید

#### مزایای Webhook:

  • نیازی به ساخت Bot ندارد
  • تنظیم سریع و آسان
  • مناسب برای اعلان‌های یک‌طرفه
  • هر کانال Webhook مجزا دارد

دریافت ID‌های دیسکورد:

  1. 1Developer Mode را فعال کنید:

Settings > Advanced > Developer Mode → ON

  1. 1روی عنصر مورد نظر راست‌کلیک > Copy ID:
  • Server (Guild) ID
  • Channel ID
  • User ID
  • Role ID
  • Message ID

نکات امنیتی:

  • Bot Token را هرگز به اشتراک نگذارید
  • Webhook URL را محرمانه نگه دارید
  • فقط Permission‌های لازم را بدهید
  • از Environment Variable برای ذخیره Token استفاده کنید
  • دسترسی Bot را به کانال‌های مشخص محدود کنید

عملیات‌های موجود

1

sendMessage

ارسال پیام متنی به کانال دیسکورد

2

sendEmbed

ارسال پیام Rich Embed با عنوان، توضیح، رنگ، فیلد و تصویر

3

editMessage

ویرایش پیام ارسال شده قبلی توسط Bot

4

deleteMessage

حذف یک پیام از کانال

5

getChannelMessages

دریافت لیست پیام‌های یک کانال

6

createChannel

ایجاد کانال جدید در سرور

7

getGuildMembers

دریافت لیست اعضای سرور (نیاز به SERVER MEMBERS INTENT)

8

addRole

اضافه کردن Role به یک عضو سرور

9

removeRole

حذف Role از یک عضو سرور

10

banUser

بن (Ban) کردن کاربر از سرور

11

kickUser

اخراج (Kick) کاربر از سرور (می‌تواند دوباره بپیوندد)

12

getUser

دریافت پروفایل و اطلاعات یک کاربر دیسکورد

13

sendFile

ارسال فایل یا تصویر به کانال

14

createThread

ایجاد Thread جدید در کانال یا روی پیام خاص

15

addReaction

اضافه کردن Emoji Reaction به پیام

16

webhookSend

ارسال پیام از طریق Webhook URL بدون نیاز به Bot

کاربردهای متداول

۱. اعلان سفارش جدید فروشگاه

هر بار که سفارش جدیدی ثبت شود، به کانال فروش اطلاع داده شود:

code
Webhook (سفارش جدید)
  → Discord (sendEmbed)
    ChannelId: SALES_CHANNEL_ID
    Embed:
      Title: "سفارش جدید #{{$json.orderId}}"
      Color: 0x00FF00 (سبز)
      Fields: [
        {name: "مشتری", value: "{{$json.name}}", inline: true},
        {name: "مبلغ", value: "{{$json.amount}} تومان", inline: true},
        {name: "محصولات", value: "{{$json.items.join('\n')}}"}
      ]
      Footer: {text: "{{$now.toFormat('yyyy/MM/dd HH:mm')}}"}

۲. ربات خوش‌آمدگویی اعضای جدید

هنگام ورود عضو جدید به سرور، پیام خوش‌آمدگویی ارسال شود:

code
Discord Trigger (guildMemberAdd)
  → Discord (sendEmbed)
    ChannelId: WELCOME_CHANNEL_ID
    Embed:
      Title: "به سرور ما خوش آمدید!"
      Description: "سلام {{$json.user.username}}!
      برای شروع قوانین سرور را در #rules بخوانید."
      Color: 0x5865F2 (بنفش دیسکورد)
      Thumbnail: {{$json.user.avatarURL}}
  → Discord (addRole)
    RoleId: MEMBER_ROLE_ID
    UserId: {{$json.user.id}}

۳. مانیتورینگ سرور و هشدار

بررسی وضعیت سرور و ارسال هشدار:

code
Schedule (هر 5 دقیقه)
  → HTTP Request (Health Check سرور)
  → IF (status != 200)
    → Discord (sendEmbed)
      ChannelId: ALERTS_CHANNEL_ID
      Embed:
        Title: "هشدار: سرور Down شد!"
        Description: "سرور {{$json.name}} پاسخ نمی‌دهد"
        Color: 0xFF0000 (قرمز)
        Fields: [
          {name: "URL", value: "{{$json.url}}"},
          {name: "Status", value: "{{$json.statusCode}}"},
          {name: "زمان", value: "{{$now.toFormat('HH:mm:ss')}}"}
        ]

۴. سیستم تیکت پشتیبانی

ایجاد Thread برای هر درخواست پشتیبانی:

code
Discord Trigger (پیام در #support)
  → Discord (createThread)
    ChannelId: SUPPORT_CHANNEL_ID
    Name: "تیکت-{{$json.author.username}}"
    MessageId: {{$json.id}}
    AutoArchiveDuration: 1440
  → Discord (sendMessage)
    ChannelId: THREAD_ID
    Content: "تیکت شما ثبت شد. تیم پشتیبانی به زودی پاسخ می‌دهد."
  → Discord (addReaction)
    MessageId: {{$json.id}}
    Emoji: "✅"

۵. مدیریت خودکار نقش‌ها با واکنش

اضافه کردن نقش با React به پیام (Reaction Roles):

code
Discord Trigger (messageReactionAdd)
  → Switch (بر اساس emoji)
    → Case "🎮": Discord (addRole) → GAMER_ROLE
    → Case "💻": Discord (addRole) → DEV_ROLE
    → Case "🎨": Discord (addRole) → DESIGNER_ROLE
    → Case "📢": Discord (addRole) → NEWS_ROLE

۶. گزارش فعالیت روزانه سرور

ارسال آمار روزانه به کانال مدیران:

code
Schedule (هر شب ساعت 23:30)
  → Discord (getGuildMembers)
    GuildId: SERVER_ID
  → Code (محاسبه آمار)
  → Discord (sendEmbed)
    ChannelId: ADMIN_CHANNEL_ID
    Embed:
      Title: "گزارش روزانه - {{$now.toFormat('yyyy/MM/dd')}}"
      Fields: [
        {name: "کل اعضا", value: "{{$json.totalMembers}}", inline: true},
        {name: "اعضای جدید", value: "+{{$json.newMembers}}", inline: true},
        {name: "اعضای خارج شده", value: "-{{$json.leftMembers}}", inline: true},
        {name: "پیام‌های ارسالی", value: "{{$json.messageCount}}"}
      ]

۷. همگام‌سازی GitHub با Discord

اطلاع‌رسانی رویدادهای Git:

code
GitHub Trigger (push, pull_request, issues)
  → Switch (بر اساس event)
    → push: Discord (sendEmbed)
        Title: "Push جدید به {{$json.ref}}"
        Description: "{{$json.commits.length}} commit توسط {{$json.pusher.name}}"
        Color: 0x24292E
    → pull_request: Discord (sendEmbed)
        Title: "PR: {{$json.pull_request.title}}"
        Description: "{{$json.action}} توسط {{$json.sender.login}}"
    → issues: Discord (sendEmbed)
        Title: "Issue: {{$json.issue.title}}"

۸. ارسال اعلان با Webhook (بدون Bot)

ساده‌ترین روش برای اعلان:

code
Webhook/Schedule/Trigger
  → HTTP Request (POST)
    URL: DISCORD_WEBHOOK_URL
    Content-Type: JSON
    Body: {
      "content": "پیام ساده",
      "username": "n8n Bot",
      "embeds": [{
        "title": "عنوان",
        "description": "توضیحات",
        "color": 5814783
      }]
    }

۹. سیستم Auto-Moderation

مدیریت خودکار پیام‌های نامناسب:

code
Discord Trigger (messageCreate)
  → Code (بررسی کلمات ممنوع)
  → IF (شامل کلمه ممنوع)
    → Discord (deleteMessage)
      MessageId: {{$json.id}}
    → Discord (sendMessage)
      Content: "{{$json.author.mention}} پیام شما به دلیل نقض قوانین حذف شد."
    → IF (تکرار بیش از 3 بار)
      → Discord (kickUser)
        Reason: "نقض مکرر قوانین سرور"

۱۰. ربات اطلاع‌رسانی قیمت ارز دیجیتال

ارسال قیمت لحظه‌ای کریپتو:

code
Schedule (هر ساعت)
  → HTTP Request (API قیمت کریپتو)
  → Discord (sendEmbed)
    ChannelId: CRYPTO_CHANNEL_ID
    Embed:
      Title: "قیمت لحظه‌ای ارز دیجیتال"
      Color: 0xF7931A
      Fields: [
        {name: "BTC", value: "${{$json.bitcoin}}", inline: true},
        {name: "ETH", value: "${{$json.ethereum}}", inline: true},
        {name: "BNB", value: "${{$json.bnb}}", inline: true}
      ]
      Footer: {text: "آخرین بروزرسانی: {{$now.toFormat('HH:mm')}}"}

۱۱. سیستم Giveaway و قرعه‌کشی

برگزاری قرعه‌کشی در سرور:

code
Webhook (شروع Giveaway)
  → Discord (sendEmbed)
    Embed:
      Title: "قرعه‌کشی: {{$json.prize}}"
      Description: "برای شرکت، به این پیام React بزنید! 🎉"
      Color: 0xFFD700
  → Discord (addReaction) → "🎉"
  → Wait (مدت Giveaway)
  → HTTP Request (دریافت reactions)
  → Code (انتخاب تصادفی برنده)
  → Discord (sendEmbed)
    Title: "برنده قرعه‌کشی!"
    Description: "تبریک به <@{{$json.winnerId}}>! 🎉"

نکات حرفه‌ای

نکات حرفه‌ای

۱. ساختار Rich Embed حرفه‌ای

بهترین فرمت برای پیام‌های اطلاع‌رسانی:

json
{
  "embeds": [{
    "title": "عنوان اعلان",
    "description": "توضیح کامل",
    "color": 5814783,
    "fields": [
      {"name": "فیلد 1", "value": "مقدار", "inline": true},
      {"name": "فیلد 2", "value": "مقدار", "inline": true},
      {"name": "فیلد کامل", "value": "متن بلندتر", "inline": false}
    ],
    "thumbnail": {"url": "https://..."},
    "image": {"url": "https://..."},
    "footer": {"text": "پاورقی", "icon_url": "https://..."},
    "timestamp": "2025-01-01T00:00:00.000Z",
    "author": {"name": "نام", "url": "https://...", "icon_url": "https://..."}
  }]
}

۲. فرمت‌دهی Markdown در Discord

code
**Bold**           → متن ضخیم
*Italic*           → متن مورب
__Underline__      → زیرخط
~~Strikethrough~~  → خط خورده
`Code`             → کد تک خطی

Code Block

→ بلوک کد
> Quote            → نقل‌قول
>>> Block Quote    → نقل‌قول بلوکی
||Spoiler||        → اسپویلر

۳. Mention در پیام‌ها

code
<@USER_ID>       → منشن کاربر
<@&ROLE_ID>      → منشن نقش
<#CHANNEL_ID>    → لینک کانال
@everyone        → همه اعضا
@here            → اعضای آنلاین

۴. رنگ‌های مفید برای Embed

code
موفقیت (سبز):    0x00FF00  یا  65280
خطا (قرمز):      0xFF0000  یا  16711680
هشدار (زرد):     0xFFFF00  یا  16776960
اطلاعات (آبی):   0x0099FF  یا  39423
دیسکورد (بنفش):  0x5865F2  یا  5793266
طلایی:           0xFFD700  یا  16766720
نارنجی:          0xFF8C00  یا  16747520

۵. استفاده از Webhook به جای Bot

برای اعلان‌های ساده، Webhook سریع‌تر و بدون نیاز به Bot است:

code
// فقط HTTP Request Node کافیست
POST → WEBHOOK_URL
Body: {"content": "پیام", "username": "سیستم اعلان"}

۶. محدودیت‌های مهم Discord API

code
پیام متنی:       2000 کاراکتر
Embed Description: 4096 کاراکتر
Embed Fields:     25 عدد
Field Name:       256 کاراکتر
Field Value:      1024 کاراکتر
کل Embed:         6000 کاراکتر
Embeds per Message: 10 عدد
فایل:             25MB (بدون Boost)
فایل (Boost Lv2): 50MB
فایل (Boost Lv3): 100MB
Reactions:        20 per message
Rate Limit:       50 req/sec global

۷. Gateway Intents و دسترسی‌ها

code
GUILDS                → اطلاعات سرور
GUILD_MEMBERS         → لیست اعضا (Privileged)
GUILD_MESSAGES        → پیام‌های سرور
GUILD_MESSAGE_REACTIONS → واکنش‌ها
DIRECT_MESSAGES       → پیام‌های خصوصی
MESSAGE_CONTENT       → محتوای پیام (Privileged)
GUILD_PRESENCES       → وضعیت آنلاین (Privileged)

۸. ارسال پیام به چند کانال همزمان

code
Set (لیست Channel IDها)
  → Loop
    → Discord (sendMessage/sendEmbed)
    → Wait (1 second)  // رعایت Rate Limit

۹. استفاده از Slash Commands

برای ادغام Slash Commands با n8n:

code
// در Developer Portal: Interactions Endpoint URL = n8n Webhook URL
Webhook (POST از Discord)
  → Switch (بر اساس command)
    → /price → HTTP (API قیمت) → Discord Response
    → /status → MySQL (وضعیت) → Discord Response
    → /help → Discord (ارسال راهنما)

۱۰. Thread برای سازماندهی بحث‌ها

Thread‌ها مکالمات را مرتب نگه می‌دارند:

code
// برای هر موضوع جدید Thread بسازید
Discord Trigger (keyword detected)
  → Discord (createThread)
    Name: "بحث-{{$json.topic}}"
    AutoArchiveDuration: 4320  // آرشیو بعد از 3 روز

۱۱. Emoji‌های Custom در Reaction

code
// Unicode emoji:
emoji: "✅"
emoji: "🎉"

// Custom emoji سرور:
emoji: "name:emoji_id"
// مثال: "pepe:123456789"

۱۲. مدیریت Error Handling

code
Discord (sendMessage)
  → Error → Switch
    → 403: "Bot دسترسی ندارد" → Telegram (اعلان ادمین)
    → 404: "کانال پیدا نشد" → Update Config
    → 429: Wait (Retry-After) → Retry
    → Default: Log Error

۱۳. تفاوت Bot Message و Webhook Message

code
Bot:
  + کنترل کامل (ویرایش، حذف، Reaction)
  + دسترسی به API کامل
  + Trigger و Listener
  - نیاز به Bot Setup

Webhook:
  + راه‌اندازی آسان
  + بدون نیاز به Bot
  + Custom Username/Avatar هر بار
  - فقط ارسال پیام (نه خواندن/ویرایش)
  - بدون Trigger

۱۴. بهینه‌سازی Bot برای سرورهای بزرگ

code
// برای سرورهای 1000+ عضو:
- از Pagination برای دریافت اعضا استفاده کنید
- Intents فقط لازم را فعال کنید
- Cache نتایج API (مثل لیست اعضا)
- از Bulk Operations استفاده کنید
- Rate Limit‌ها را جدی بگیرید

۱۵. Timestamp در Embed

فرمت ISO 8601 و نمایش زمان محلی کاربر:

code
// در Embed:
"timestamp": "{{$now.toISO()}}"

// در متن پیام (Dynamic Timestamp):
<t:1234567890:R>  → "2 ساعت پیش"
<t:1234567890:F>  → "جمعه، 1 بهمن 1403 ساعت 15:30"
<t:1234567890:t>  → "15:30"
<t:1234567890:d>  → "01/11/2025"

۱۶. امنیت و محافظت Bot

code
- Token را در Environment Variable ذخیره کنید
- Permission‌های Bot را حداقلی نگه دارید
- دسترسی Bot را به کانال‌های خاص محدود کنید
- Audit Log سرور را مانیتور کنید
- از Rate Limiting خودتان هم استفاده کنید
- Webhook URL را محرمانه نگه دارید

رفع مشکلات

خطاهای رایج و راه‌حل‌ها

۱. خطای "Unauthorized" (401)

علت: Bot Token اشتباه یا منقضی شده

راه‌حل

  • Token را از Developer Portal مجدداً بگیرید (Reset Token)
  • مطمئن شوید Token کامل کپی شده
  • Bot حذف نشده باشد
  • Token در n8n Credentials بروز باشد

۲. خطای "Missing Permissions" (403)

علت: Bot دسترسی کافی ندارد

راه‌حل

  • نقش Bot در سرور باید دسترسی‌های لازم را داشته باشد
  • ترتیب نقش‌ها مهم است: نقش Bot باید بالاتر از نقش هدف باشد
  • Permission Overwrites کانال را بررسی کنید
  • برای مدیریت نقش: Bot باید نقش بالاتر از نقش هدف داشته باشد
  • Bot را با لینک دعوت جدید با Permission‌های کامل دوباره اضافه کنید

۳. خطای "Missing Access" (50001)

علت: Bot به کانال دسترسی ندارد

راه‌حل

  • Bot باید عضو سرور باشد
  • Bot باید دسترسی View Channel به کانال مورد نظر داشته باشد
  • اگر کانال Private است، Bot باید دسترسی داشته باشد
  • Channel Permission Overwrites را بررسی کنید

۴. خطای "Unknown Channel" (10003)

علت: Channel ID اشتباه یا کانال حذف شده

راه‌حل

  • Channel ID را مجدد از Discord کپی کنید (راست‌کلیک > Copy Channel ID)
  • مطمئن شوید Developer Mode فعال است
  • کانال حذف نشده باشد
  • Bot به سرور آن کانال دسترسی داشته باشد

۵. خطای "MESSAGE_CONTENT Intent Required"

علت: Intent محتوای پیام فعال نشده

راه‌حل

  • در Developer Portal > Bot > Privileged Gateway Intents:
code
✅ MESSAGE CONTENT INTENT → فعال کنید
  • بعد از فعال‌سازی، Bot را restart کنید
  • برای سرورهای بالای 100 عضو، باید Verification از Discord بگیرید

۶. خطای Rate Limit (429)

علت: تعداد درخواست‌ها بیش از حد مجاز

راه‌حل

  • محدودیت‌های Discord:
  • Global: 50 request/second
  • Per-Channel: 5 message/5 seconds
  • Per-Guild: بسته به عملیات متفاوت
  • از Wait Node استفاده کنید:
code
Loop → Discord → Wait (1 second) → Next
  • Header Retry-After را بخوانید و همان مقدار صبر کنید
  • پیام‌ها را Batch کنید

۷. Embed نمایش داده نمی‌شود

علت: ساختار Embed نادرست

راه‌حل

  • حداقل یکی از title، description یا fields باید وجود داشته باشد
  • Color باید عدد Decimal باشد (نه Hex string)
  • Fields حداکثر 25 عدد
  • هر Field Name حداکثر 256 کاراکتر
  • هر Field Value حداکثر 1024 کاراکتر
  • Description حداکثر 4096 کاراکتر
  • کل Embed حداکثر 6000 کاراکتر

۸. Webhook کار نمی‌کند

علت: URL نامعتبر یا Webhook حذف شده

راه‌حل

  • Webhook URL را مجدد از Channel Settings کپی کنید
  • مطمئن شوید Webhook حذف نشده
  • Content-Type باید application/json باشد
  • حداقل content یا embeds باید ارسال شود
  • Webhook URL را در مرورگر تست کنید (GET باید اطلاعات Webhook را برگرداند)
اشتراک‌گذاری:

آیا این مستندات مفید بود؟