چگونه یک ربات مدیریت برای Discord بسازیم
در این صفحه
یک سرور شلوغ Discord به مدیریتی نیاز دارد که هیچوقت نخوابد: فیلتر اسپم، تایماوت سریع، راهی برای پاککردن سیل پیامها و سابقهای از اینکه چه کسی چه کرد. بخشی از این را Discord رایگان با AutoMod به شما میدهد و باقی را یک ربات کوچک از خودتان پوشش میدهد.
این راهنما با AutoMod شروع میکند، چون شاید همان برایتان کافی باشد، سپس دستورهای مدیریتی را با Python (discord.py) یا JavaScript (discord.js) میسازد و مجوزها، intentها و لاگهایی را که این دستورها به آنها وابستهاند توضیح میدهد.
با Discord AutoMod شروع کنید
AutoMod داخل خود Discord ساخته شده و در سمت Discord اجرا میشود، پس حتی وقتی هیچ رباتی آنلاین نیست هم کار میکند. Server Settings → AutoMod را باز کنید؛ به مجوز Manage Server نیاز دارید. امکاناتش:
- فیلترهای کلمات سفارشی با کلیدواژهها، نویسههای عام (wildcard) و عبارتهای منظم خودتان.
- کلمات رایجِ گزارششده: فهرستهای آماده برای فحاشی، محتوای جنسی و توهینهای نژادی و قومی.
- اسپم منشن: واکنش وقتی پیامی همزمان افراد زیادی را منشن میکند، تا سقفی که خودتان تعیین میکنید.
- محتوای اسپم: تشخیص خود Discord برای پیامهای مشکوک به اسپم.
- فیلترهای پروفایل اعضا: کلیدواژههایی که در نامهای کاربری و پروفایلها بررسی میشوند.
برای هر قانون انتخاب میکنید چه اتفاقی بیفتد: پیام مسدود شود، هشداری به کانال ناظران فرستاده شود یا عضو تایماوت بگیرد. میتوانید نقشها و کانالهایی را مستثنا کنید. اعضایی که Manage Server یا Administrator دارند هرگز فیلتر نمیشوند.
اگر مشکل شما اسپم، توهین و منشنهای انبوه است، اول AutoMod را راه بیندازید و ببینید کافی است یا نه. ربات سفارشی وقتی ارزشش را دارد که دستورهایی برای ناظرانتان، قوانین خودتان و یک لاگ درستوحسابی بخواهید.
یک ربات مدیریت سفارشی چه چیزی اضافه میکند
- دستورهای اسلش برای ناظران:
/timeout،/purge،/slowmode، اخراج و بن، با ثبت دلیل در هر بار. - یک کانال لاگ مدیریت با ورودها، خروجها، پیامهای حذفشده و هر اقدامی که ناظرانتان انجام میدهند.
- قوانین خودتان: اخطارهایی که جمع میشوند و به تایماوت میرسند، محدودکردن حسابهای تازه، و مجازبودن لینک فقط در بعضی کانالها.
- همهچیز در یک جا، تنظیمشده برای جامعهٔ شما بهجای پیشفرضهای یک ربات عمومی.
اگر تا حالا ربات نساختهاید، اول راهنمای چگونه یک ربات Discord بسازیم را دنبال کنید تا اپلیکیشن را بسازید، توکن را بگیرید و اولین دستور /ping را اجرا کنید. کد زیر بر همان پایه ساخته شده است.
مجوزها، ترتیب نقشها و intentها
ربات را فقط با مجوزهایی دعوت کنید که دستورهایش استفاده میکنند:
| اقدام | مجوز |
|---|---|
| تایماوتکردن عضو (تا 28 روز) | Moderate Members |
| اخراج عضو | Kick Members |
| بنکردن عضو | Ban Members |
| حذف پیامها | Manage Messages و Read Message History |
| فعالکردن حالت آهسته | Manage Channels |
ترتیب نقشها مهم است. ربات فقط روی اعضایی میتواند اقدام کند که بالاترین نقششان پایینتر از بالاترین نقش خود ربات باشد. در Server Settings → Roles نقش ربات را بالای نقشهایی بکشید که باید مدیریتشان کند. هیچکس نمیتواند مالک سرور یا یک Administrator را تایماوت کند.
Intentها. دستورهای اسلش به هیچ intent ممتازی نیاز ندارند. دو مورد برای مدیریت مفیدند: Server Members برای لاگ ورود و خروج، و Message Content اگر ربات خودش پیامها را برای فیلترکردن میخواند. آنها را در Developer Portal از بخش Bot → Privileged Gateway Intents روشن کنید. از ژوئن 2026، Discord فقط اپلیکیشنهایی را که به بیش از 10,000 کاربر میرسند بررسی میکند؛ پایینتر از آن، روشنکردن کلید کافی است.
دستورهای مدیریتی در Python (discord.py)
با نصب discord.py 2.7 (pip install discord.py)، این فایل bot.py دستورهای /timeout، /purge و /slowmode را اضافه میکند:
import os
from datetime import timedelta
from typing import Optional
import discord
from discord import app_commands
class Bot(discord.Client):
def __init__(self):
super().__init__(intents=discord.Intents.default())
self.tree = app_commands.CommandTree(self)
async def setup_hook(self):
await self.tree.sync()
bot = Bot()
@bot.tree.command(description="Time out a member")
@app_commands.guild_only()
@app_commands.default_permissions(moderate_members=True)
async def timeout(interaction: discord.Interaction, member: discord.Member,
minutes: app_commands.Range[int, 1, 40320], reason: Optional[str] = None):
await member.timeout(timedelta(minutes=minutes), reason=reason)
await interaction.response.send_message(f"{member.mention} is timed out for {minutes} min.", ephemeral=True)
@bot.tree.command(description="Delete recent messages in this channel")
@app_commands.guild_only()
@app_commands.default_permissions(manage_messages=True)
async def purge(interaction: discord.Interaction, count: app_commands.Range[int, 1, 100]):
await interaction.response.defer(ephemeral=True)
deleted = await interaction.channel.purge(limit=count)
await interaction.followup.send(f"Deleted {len(deleted)} messages.", ephemeral=True)
@bot.tree.command(description="Set slow mode in this channel")
@app_commands.guild_only()
@app_commands.default_permissions(manage_channels=True)
async def slowmode(interaction: discord.Interaction, seconds: app_commands.Range[int, 0, 21600]):
await interaction.channel.edit(slowmode_delay=seconds)
await interaction.response.send_message(f"Slow mode is now {seconds} s.", ephemeral=True)
bot.run(os.environ["DISCORD_TOKEN"])
default_permissions هر دستور را از اعضایی که آن مجوز را ندارند پنهان میکند. مدیران سرور میتوانند در Server Settings → Integrations تغییر دهند چه کسی آن را ببیند. محدودیتهای کد همان محدودیتهای Discord هستند: 40,320 دقیقه برابر 28 روز است و حالت آهسته تا 6 ساعت میرسد.
یک دستور تایماوت در JavaScript (discord.js)
با discord.js 14 (npm install discord.js)، همان /timeout این شکلی است. moderatable پیش از تلاش، ترتیب نقشها و مجوز ربات را بررسی میکند:
const { Client, Events, GatewayIntentBits, InteractionContextType, MessageFlags,
PermissionFlagsBits, REST, Routes, SlashCommandBuilder } = require('discord.js');
const commands = [
new SlashCommandBuilder()
.setName('timeout').setDescription('Time out a member')
.addUserOption((o) => o.setName('member').setDescription('Member').setRequired(true))
.addIntegerOption((o) => o.setName('minutes').setDescription('Minutes').setMinValue(1).setMaxValue(40320).setRequired(true))
.addStringOption((o) => o.setName('reason').setDescription('Reason'))
.setDefaultMemberPermissions(PermissionFlagsBits.ModerateMembers)
.setContexts(InteractionContextType.Guild)
.toJSON(),
];
const client = new Client({ intents: [GatewayIntentBits.Guilds] });
client.once(Events.ClientReady, async (c) => {
await new REST().setToken(process.env.DISCORD_TOKEN).put(Routes.applicationCommands(c.user.id), { body: commands });
});
client.on(Events.InteractionCreate, async (interaction) => {
if (!interaction.isChatInputCommand() || interaction.commandName !== 'timeout') return;
const member = interaction.options.getMember('member');
const minutes = interaction.options.getInteger('minutes');
if (!member?.moderatable) {
return interaction.reply({ content: 'I cannot time out that member.', flags: MessageFlags.Ephemeral });
}
await member.timeout(minutes * 60_000, interaction.options.getString('reason') ?? undefined);
await interaction.reply({ content: `${member} is timed out for ${minutes} min.`, flags: MessageFlags.Ephemeral });
});
client.login(process.env.DISCORD_TOKEN);
اخراج و بن هم با همین الگو و با member.kick(reason) و member.ban({ reason, deleteMessageSeconds }) انجام میشوند. بن میتواند پیامهای عضو را تا 7 روز گذشته هم حذف کند.
ثبت هر آنچه اتفاق میافتد
- همیشه دلیل را بفرستید. کتابخانهها آن را به گزارش حسابرسی Discord (Server Settings → Audit Log) میفرستند که مدخلها را 45 روز نگه میدارد.
- هر اقدام را در یک کانال خصوصی لاگ مدیریت هم منتشر کنید: چه کسی، روی چه کسی، چرا و برای چه مدت. برخلاف گزارش حسابرسی، این کانال تاریخچه را تا هر وقت بخواهید نگه میدارد.
- ورود و خروج اعضا به Server Members intent نیاز دارد؛ تاریخ ساخت حساب را ثبت کنید تا حسابهای یکبارمصرفِ تازه را تشخیص دهید.
- پیامهای حذفشده و ویرایششده فقط وقتی همراه متنشان ثبت میشوند که ربات Message Content intent را داشته باشد.
محدودیت حذف گروهی را در نظر داشته باشید: Discord در هر درخواست حداکثر 100 پیام را حذف میکند و پیامهای قدیمیتر از دو هفته را نمیپذیرد، پس /purge برای اسپم تازه است، نه برای پاککردن یک کانال قدیمی.
ربات را آنلاین نگه دارید
AutoMod بدون شما هم به کارش ادامه میدهد، اما دستورها و لاگهای شما همان لحظهای که فرایند ربات متوقف شود از کار میافتند. رباتی که روی کامپیوتر خانگی اجرا میشود دقیقاً وقتی کامپیوتر به خواب میرود آفلاین است، و حملههای گروهی (raid) بهندرت منتظر ساعت اداری میمانند.
در میزبانی ربات Discord در HytHost پروژه را آپلود میکنید، محیط اجرا را انتخاب میکنید (Node.js، Python، Java، Go، C#، Bun یا Lavalink) و توکن را بهجای کد در یک متغیر راهاندازی نگه میدارید. پنل ربات را اجرا میکند و پس از کرش دوباره راهاندازیاش میکند. راهاندازی کامل در چگونه ربات Discord را 24/7 میزبانی کنیم آمده است.
ربات مدیریت فقط تا وقتی اجرا میشود کار میکند: میزبانی ربات Discord در HytHost از Python، Node.js و 5 محیط اجرای دیگر پشتیبانی میکند، از €0.89 در ماه.
پلنهای میزبانی ربات را ببینیدپرسشهای متداول
برای بسیاری از سرورها AutoMod کافی است: کلیدواژهها، کلمات گزارششده، اسپم منشن و اسپم مشکوک را مسدود میکند و میتواند اعضا را تایماوت کند. وقتی ربات اضافه کنید که ناظرانتان به دستورهایی مثل پاکسازی پیام و حالت آهسته، قوانین خودتان یا لاگ کامل اقدامات نیاز دارند.
فقط همانهایی که دستورهایش استفاده میکنند: Moderate Members برای تایماوت، Kick Members، Ban Members، Manage Messages همراه با Read Message History برای حذف پیامها و Manage Channels برای حالت آهسته. از دادن Administrator به آن پرهیز کنید.
معمولاً به خاطر ترتیب نقشها: ربات فقط روی اعضایی میتواند اقدام کند که بالاترین نقششان پایینتر از نقش خودش باشد، پس نقش ربات را در Server Settings بالاتر ببرید. مالک سرور و اعضایی که Administrator دارند اصلاً قابل تایماوت نیستند.
نه بهصورت گروهی. حذف گروهی Discord هر بار حداکثر 100 پیام را میپذیرد و فقط پیامهایی را که کمتر از دو هفته از ارسالشان گذشته است. پیامهای قدیمیتر را فقط میشود یکییکی حذف کرد که کند است.
فقط اگر خودش پیامها را بخواند، مثلاً برای فیلتر کلمات یا ثبت متن پیامهای حذفشده. دستورهای اسلش، تایماوت، بن و پاکسازی پیامها بدون آن هم کار میکنند.
ربات مدیریت خود را میزبانی کنید
میزبانی ربات Discord در HytHost، Python، Node.js، Java، Go، C#، Bun یا Lavalink را اجرا میکند، ربات را پس از کرش دوباره راهاندازی میکند و از €0.89 در ماه شروع میشود.
Live chat 8 AM – 11 PM (Chișinău time) · tickets answered during business hoursاین راهنما برایتان مفید بود؟