دیسکورد
Discord
اتوماسیون دیسکورد: ارسال پیام، مدیریت سرور، Embeds، نقشها و Webhook
نمای کلی
نود دیسکورد یکی از محبوبترین نودهای n8n برای مدیریت خودکار سرورها و کامیونیتیهاست، به خصوص در جامعه گیمینگ و فناوری ایران.
قابلیتهای کلیدی:
- ارسال پیام متنی و Rich Embed به کانالها
- ویرایش و حذف پیامها
- ارسال فایل و تصویر
- مدیریت اعضا: Kick، Ban، Unban
- مدیریت نقشها: اضافه و حذف Role
- ایجاد و مدیریت کانالها و Threadها
- دریافت لیست اعضا و اطلاعات کاربران
- واکنش (Reaction) به پیامها
- ارسال پیام از طریق Webhook (بدون نیاز به Bot)
Discord Trigger:
- دریافت پیام جدید در کانال
- عضویت و خروج اعضا
- واکنش به پیامها
- رویدادهای سرور (Guild Events)
- تغییر نقشها و دسترسیها
اهمیت Discord در ایران:
- پلتفرم اصلی جامعه گیمرها و توسعهدهندگان ایرانی
- مدیریت کامیونیتی پروژههای Web3 و کریپتو
- گروههای آموزشی و همآموزی برنامهنویسی
- پشتیبانی آنلاین محصولات دیجیتال
- برگزاری رویدادها و مسابقات آنلاین
- مدیریت تیمهای eSports و گیلدهای بازی
احراز هویت
احراز هویت دیسکورد
روش ۱: Bot Token (اصلیترین روش)
#### ساخت Bot در Developer Portal:
- 1به [discord.com/developers/applications](https://discord.com/developers/applications) بروید
- 2روی New Application کلیک کنید
- 3نام اپلیکیشن را وارد کنید (مثل: "n8n Automation Bot")
- 4به بخش Bot بروید و Add Bot بزنید
- 5Token را با Reset Token بگیرید:
MTIzNDU2Nzg5.AbCdEf.GhIjKlMnOpQrStUvWxYz- 1Token را فوراً کپی کنید (فقط یک بار نمایش داده میشود)
#### تنظیم Intents (بسیار مهم): در بخش Bot > Privileged Gateway Intents فعال کنید:
✅ PRESENCE INTENT → دریافت وضعیت آنلاین اعضا
✅ SERVER MEMBERS INTENT → دریافت لیست و تغییرات اعضا
✅ MESSAGE CONTENT INTENT → خواندن محتوای پیامها⚠️ نکته مهم: بدون فعال کردن MESSAGE CONTENT INTENT، ربات محتوای پیامها را نمیخواند!
#### دعوت Bot به سرور:
- 1به بخش OAuth2 > URL Generator بروید
- 2Scopes:
botوapplications.commandsرا انتخاب کنید - 3Bot Permissions مورد نیاز:
✅ 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لینک تولید شده را در مرورگر باز کنید و سرور را انتخاب کنید
#### تنظیم در n8n:
- 1Credentials > Discord Bot API
- 2Bot Token را وارد کنید
- 3Test Connection بزنید
روش ۲: OAuth2 (برای اپلیکیشنها)
- 1در Developer Portal > OAuth2
- 2Client ID و Client Secret را بردارید
- 3Redirect URL را تنظیم کنید
- 4Scopes مورد نیاز:
identify → اطلاعات کاربر
guilds → لیست سرورهای کاربر
guilds.join → عضویت در سرور
messages.read → خواندن پیامهاروش ۳: Webhook URL (سادهترین روش)
برای فقط ارسال پیام بدون نیاز به Bot:
- 1در سرور Discord: Channel Settings > Integrations > Webhooks
- 2New Webhook بزنید
- 3نام و آواتار و کانال مقصد را تنظیم کنید
- 4Copy Webhook URL بزنید:
https://discord.com/api/webhooks/123456/abcdef...- 1این URL را مستقیماً در HTTP Request Node استفاده کنید
#### مزایای Webhook:
- نیازی به ساخت Bot ندارد
- تنظیم سریع و آسان
- مناسب برای اعلانهای یکطرفه
- هر کانال Webhook مجزا دارد
دریافت IDهای دیسکورد:
- 1Developer Mode را فعال کنید:
Settings > Advanced > Developer Mode → ON
- 1روی عنصر مورد نظر راستکلیک > Copy ID:
- Server (Guild) ID
- Channel ID
- User ID
- Role ID
- Message ID
نکات امنیتی:
- Bot Token را هرگز به اشتراک نگذارید
- Webhook URL را محرمانه نگه دارید
- فقط Permissionهای لازم را بدهید
- از Environment Variable برای ذخیره Token استفاده کنید
- دسترسی Bot را به کانالهای مشخص محدود کنید
عملیاتهای موجود
sendMessage
ارسال پیام متنی به کانال دیسکورد
sendEmbed
ارسال پیام Rich Embed با عنوان، توضیح، رنگ، فیلد و تصویر
editMessage
ویرایش پیام ارسال شده قبلی توسط Bot
deleteMessage
حذف یک پیام از کانال
getChannelMessages
دریافت لیست پیامهای یک کانال
createChannel
ایجاد کانال جدید در سرور
getGuildMembers
دریافت لیست اعضای سرور (نیاز به SERVER MEMBERS INTENT)
addRole
اضافه کردن Role به یک عضو سرور
removeRole
حذف Role از یک عضو سرور
banUser
بن (Ban) کردن کاربر از سرور
kickUser
اخراج (Kick) کاربر از سرور (میتواند دوباره بپیوندد)
getUser
دریافت پروفایل و اطلاعات یک کاربر دیسکورد
sendFile
ارسال فایل یا تصویر به کانال
createThread
ایجاد Thread جدید در کانال یا روی پیام خاص
addReaction
اضافه کردن Emoji Reaction به پیام
webhookSend
ارسال پیام از طریق Webhook URL بدون نیاز به Bot
کاربردهای متداول
۱. اعلان سفارش جدید فروشگاه
هر بار که سفارش جدیدی ثبت شود، به کانال فروش اطلاع داده شود:
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')}}"}۲. ربات خوشآمدگویی اعضای جدید
هنگام ورود عضو جدید به سرور، پیام خوشآمدگویی ارسال شود:
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}}۳. مانیتورینگ سرور و هشدار
بررسی وضعیت سرور و ارسال هشدار:
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 برای هر درخواست پشتیبانی:
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):
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۶. گزارش فعالیت روزانه سرور
ارسال آمار روزانه به کانال مدیران:
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:
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)
سادهترین روش برای اعلان:
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
مدیریت خودکار پیامهای نامناسب:
Discord Trigger (messageCreate)
→ Code (بررسی کلمات ممنوع)
→ IF (شامل کلمه ممنوع)
→ Discord (deleteMessage)
MessageId: {{$json.id}}
→ Discord (sendMessage)
Content: "{{$json.author.mention}} پیام شما به دلیل نقض قوانین حذف شد."
→ IF (تکرار بیش از 3 بار)
→ Discord (kickUser)
Reason: "نقض مکرر قوانین سرور"۱۰. ربات اطلاعرسانی قیمت ارز دیجیتال
ارسال قیمت لحظهای کریپتو:
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 و قرعهکشی
برگزاری قرعهکشی در سرور:
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 حرفهای
بهترین فرمت برای پیامهای اطلاعرسانی:
{
"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
**Bold** → متن ضخیم
*Italic* → متن مورب
__Underline__ → زیرخط
~~Strikethrough~~ → خط خورده
`Code` → کد تک خطیCode Block
> Quote → نقلقول
>>> Block Quote → نقلقول بلوکی
||Spoiler|| → اسپویلر۳. Mention در پیامها
<@USER_ID> → منشن کاربر
<@&ROLE_ID> → منشن نقش
<#CHANNEL_ID> → لینک کانال
@everyone → همه اعضا
@here → اعضای آنلاین۴. رنگهای مفید برای Embed
موفقیت (سبز): 0x00FF00 یا 65280
خطا (قرمز): 0xFF0000 یا 16711680
هشدار (زرد): 0xFFFF00 یا 16776960
اطلاعات (آبی): 0x0099FF یا 39423
دیسکورد (بنفش): 0x5865F2 یا 5793266
طلایی: 0xFFD700 یا 16766720
نارنجی: 0xFF8C00 یا 16747520۵. استفاده از Webhook به جای Bot
برای اعلانهای ساده، Webhook سریعتر و بدون نیاز به Bot است:
// فقط HTTP Request Node کافیست
POST → WEBHOOK_URL
Body: {"content": "پیام", "username": "سیستم اعلان"}۶. محدودیتهای مهم Discord API
پیام متنی: 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 و دسترسیها
GUILDS → اطلاعات سرور
GUILD_MEMBERS → لیست اعضا (Privileged)
GUILD_MESSAGES → پیامهای سرور
GUILD_MESSAGE_REACTIONS → واکنشها
DIRECT_MESSAGES → پیامهای خصوصی
MESSAGE_CONTENT → محتوای پیام (Privileged)
GUILD_PRESENCES → وضعیت آنلاین (Privileged)۸. ارسال پیام به چند کانال همزمان
Set (لیست Channel IDها)
→ Loop
→ Discord (sendMessage/sendEmbed)
→ Wait (1 second) // رعایت Rate Limit۹. استفاده از Slash Commands
برای ادغام Slash Commands با n8n:
// در 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ها مکالمات را مرتب نگه میدارند:
// برای هر موضوع جدید Thread بسازید
Discord Trigger (keyword detected)
→ Discord (createThread)
Name: "بحث-{{$json.topic}}"
AutoArchiveDuration: 4320 // آرشیو بعد از 3 روز۱۱. Emojiهای Custom در Reaction
// Unicode emoji:
emoji: "✅"
emoji: "🎉"
// Custom emoji سرور:
emoji: "name:emoji_id"
// مثال: "pepe:123456789"۱۲. مدیریت Error Handling
Discord (sendMessage)
→ Error → Switch
→ 403: "Bot دسترسی ندارد" → Telegram (اعلان ادمین)
→ 404: "کانال پیدا نشد" → Update Config
→ 429: Wait (Retry-After) → Retry
→ Default: Log Error۱۳. تفاوت Bot Message و Webhook Message
Bot:
+ کنترل کامل (ویرایش، حذف، Reaction)
+ دسترسی به API کامل
+ Trigger و Listener
- نیاز به Bot Setup
Webhook:
+ راهاندازی آسان
+ بدون نیاز به Bot
+ Custom Username/Avatar هر بار
- فقط ارسال پیام (نه خواندن/ویرایش)
- بدون Trigger۱۴. بهینهسازی Bot برای سرورهای بزرگ
// برای سرورهای 1000+ عضو:
- از Pagination برای دریافت اعضا استفاده کنید
- Intents فقط لازم را فعال کنید
- Cache نتایج API (مثل لیست اعضا)
- از Bulk Operations استفاده کنید
- Rate Limitها را جدی بگیرید۱۵. Timestamp در Embed
فرمت ISO 8601 و نمایش زمان محلی کاربر:
// در 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
- 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:
✅ 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 استفاده کنید:
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 را برگرداند)
