کلاس AntiSpam – سیستم تشخیص و جلوگیری از اسپم
کلاس AntiSpam ابزاری برای مدیریت و جلوگیری از پیامهای تکراری (Flood) در ربات است. این کلاس با رصد تعداد پیامهای ارسالی هر کاربر در یک بازه زمانی مشخص، رفتارهای مشکوک را شناسایی کرده و تابع/callback تعریف شده را اجرا میکند.
وابستگیها:
Update: کانتکست پیام دریافتیOptionSpamType: اینترفیس تنظیمات اسپمSpamCallbackType: اینترفیس تابع واکنش به اسپم
تنظیمات سازنده (Constructor)
هنگام ساخت نمونهای از این کلاس، باید دو آرگومان را پاس دهید:
| توضیحات | نوع | پارامتر |
|---|---|---|
| تابعی که هنگام تشخیص اسپم اجرا میشود (مثلاً برای بن کردن یا حذف پیام). | Function | spamCallback |
| شیء تنظیمات شامل زمان و محدودیت تعداد پیام. | Object | options |
گزینههای options:
spam_time(عدد): بازه زمانی بر حسب میلیثانیه (پیشفرض: 5000).spam_limit(عدد): حداکثر تعداد پیام مجاز در بازه زمانی فوق (پیشفرض: 4).
متدها
checkSpam(ctx: Update): Promise<void>
این متد باید روی هر پیام ورودی صدا زده شود. وضعیت پیام را بررسی کرده و در صورت تشخیص اسپم، کالبک را فراخوانی میکند.
منطق عملکرد:
- بررسی میکند که پیام جدید باشد (
new_message). - شناسه فرستنده و چت را استخراج میکند.
- زمان ارسال پیام را در کش ذخیره میکند.
- پیامهای قدیمیتر از
spam_timeرا از حافظه پاک میکند. - اگر تعداد پیامهای باقیمانده از
spam_limitبیشتر شد، اسپم تشخیص داده میشود.
نمونه استفاده کامل
در این مثال، ما یک سیستم ضد اسپم راهاندازی میکنیم که اگر کاربری بیش از ۴ پیام در ۵ ثانیه ارسال کرد، ربات واکنش نشان میدهد.
import Bot, { AntiSpam } from "rubika/bot";
const bot = new Bot("YOUR_TOKEN");
// تنظیمات ضد اسپم
const antiSpam = new AntiSpam(
async (ctx) => {
// این تابع هنگام تشخیص اسپم اجرا میشود
console.log(`Spam detected from user: ${ctx.new_message?.sender_id}`);
await ctx.reply("⛔ ارسال پیام سریع ممنوع است!");
// اقدامات دیگر مثل حذف پیام یا بن کردن کاربر
},
{
spam_time: 5000, // ۵ ثانیه
spam_limit: 4, // حداکثر ۴ پیام
},
);
// استفاده در هندلر پیام
bot.on("update", async (ctx) => {
// بررسی اسپم قبل از پردازش اصلی
await antiSpam.checkSpam(ctx);
// ادامه پردازشهای عادی ربات...
console.log("Message processed");
});
bot.run();