رفتن به محتوای اصلی
📣 سطح: متوسط · رایگان

سورس ربات اطلاع‌رسانی و ارسال همگانی بله

کاربران را عضو می‌کند و به شما اجازه می‌دهد به همه یک‌جا پیام، خبر و تخفیف بفرستید؛ فقط مدیر ربات می‌تواند ارسال همگانی کند.

طراحی و کدنویسی: به‌روزرسانی: زبان: Python 3حجم کد: حدود ۱۳۰ خطمجوز: آزاد (CC0)

پاسخ کوتاه

ربات ارسال همگانی بله هر کاربری را که /start بزند در فایل subscribers.txt ثبت می‌کند و فقط به chat_id مدیر (ADMIN_CHAT_ID) اجازه می‌دهد با دستور /send یک پیام را به همهٔ مشترک‌ها بفرستد. بین هر ارسال ۰٫۶ ثانیه مکث می‌کند تا از محدودیت نرخ بله (خطای ۴۲۹) عبور نکند.

ربات ارسال همگانی بله چطور کار می‌کند؟

هر کاربری که ربات را /start کند به لیست مشترک‌ها اضافه می‌شود و فقط مدیر ربات می‌تواند با دستور /send متن پیام یک اطلاعیه، خبر یا تخفیف را یک‌جا برای همهٔ مشترک‌ها بفرستد. لیست مشترک‌ها در فایل ذخیره می‌شود. این همان «کانال خصوصی» شماست: برخلاف کانال عمومی، هر مشترک chat_id دارد و بعداً می‌توانید پیام شخصی هم بفرستید.

زبان: پایتون ۳
وابستگی: فقط requests
اجرا: long polling (بدون دامنه و SSL)
هزینه: رایگان

آموزش راه‌اندازی ربات اطلاع‌رسانی و ارسال همگانی بله در ۵ قدم

این مراحل را به‌ترتیب انجام بده تا ربات روی سیستم خودت یا سرور بالا بیاید. زمان تقریبی: ۱۵ دقیقه.

از BotFather در بله توکن ربات را بگیر.
پایتون را نصب کن و pip install requests را اجرا کن.
فایل bot.py را باز کن و مقدار TOKEN را جایگزین کن.
ربات را یک‌بار اجرا کن و /start بزن؛ chat_id تو در ترمینال چاپ می‌شود. آن را در ADMIN_CHAT_ID بگذار.
برای ارسال همگانی، دستور /send متن پیام را بفرست تا پیام برای همهٔ مشترک‌ها برود.

کل سورس ربات اطلاع‌رسانی و ارسال همگانی بله (کپی یا دانلود کن)

این همان کدی است که داخل فایل ZIP هم هست. می‌توانی مستقیم از اینجا کپی کنی. فقط یادت باشد مقدار TOKEN را با توکن رباتت عوض کنی.

bot.py
# -*- coding: utf-8 -*-
# ------------------------------------------------------------
#  ربات اطلاع‌رسانی و ارسال همگانی بله
#  طراحی و کدنویسی: سروش مقدمی — فیلتور (filtori.com)
# ------------------------------------------------------------
#  با این ربات می‌تونی به همهٔ کسایی که ربات رو استارت کردن
#  یک‌جا پیام (اطلاعیه، تخفیف، خبر) بفرستی:
#   - هر کاربری /start بزنه، به لیست مشترک‌ها اضافه می‌شه
#   - فقط «ادمین» می‌تونه با دستور  /send متن_پیام  به همه پیام بده
#  لیست مشترک‌ها در فایل subscribers.txt ذخیره می‌شه.
#
#  آموزش کامل:
#     https://filtori.com/bale-bot-source/broadcast-bot/
#  نسخهٔ اختصاصی با پنل مدیریت و زمان‌بندی؟  09122874862
#  تلگرام ما: https://t.me/filtori
# ------------------------------------------------------------

import time
import requests

TOKEN = "توکن_ربات_خودت_را_اینجا_بگذار"
BASE = f"https://tapi.bale.ai/bot{TOKEN}"

# ------------------------------------------------------------
#  chat_id عددی خودت رو اینجا بذار تا فقط تو بتونی پیام همگانی بفرستی.
#  چطور chat_id خودت رو پیدا کنی؟ ربات رو /start کن، بعد به بله بگو
#  یک پیام بفرست؛ در ترمینال، chat_id چاپ می‌شه (خط print پایین).
# ------------------------------------------------------------
ADMIN_CHAT_ID = 123456789  # <-- این عدد رو با chat_id خودت عوض کن

SUBSCRIBERS_FILE = "subscribers.txt"


def send_message(chat_id, text):
    url = f"{BASE}/sendMessage"
    try:
        requests.post(url, json={"chat_id": chat_id, "text": text}, timeout=15)
    except requests.RequestException as error:
        print("خطا در ارسال پیام:", error)


def get_updates(offset):
    url = f"{BASE}/getUpdates"
    params = {"offset": offset, "timeout": 30}
    try:
        return requests.get(url, params=params, timeout=40).json()
    except requests.RequestException as error:
        print("خطا در دریافت پیام‌ها:", error)
        return {"ok": False, "result": []}


def load_subscribers():
    """خواندن لیست chat_id مشترک‌ها از فایل."""
    try:
        with open(SUBSCRIBERS_FILE, "r", encoding="utf-8") as file:
            return set(line.strip() for line in file if line.strip())
    except FileNotFoundError:
        return set()


def add_subscriber(chat_id):
    """اضافه‌کردن یک مشترک جدید (اگر قبلاً نبوده)."""
    subscribers = load_subscribers()
    if str(chat_id) not in subscribers:
        with open(SUBSCRIBERS_FILE, "a", encoding="utf-8") as file:
            file.write(f"{chat_id}\n")


def broadcast(text):
    """ارسال یک پیام به همهٔ مشترک‌ها."""
    subscribers = load_subscribers()
    sent = 0
    for chat_id in subscribers:
        send_message(chat_id, text)
        sent += 1
        # مهم: بله اجازهٔ بیش از ۲ پیام در ثانیه نمی‌ده،
        # پس بین هر ارسال کمی صبر می‌کنیم تا خطای 429 نگیریم.
        time.sleep(0.6)
    return sent


def handle(chat_id, text):
    if text == "/start":
        add_subscriber(chat_id)
        send_message(
            chat_id,
            "سلام 👋 عضو کانال اطلاع‌رسانی ما شدی!\n"
            "از این به بعد خبرها و تخفیف‌ها رو همین‌جا برات می‌فرستیم.\n"
            "— فیلتور (filtori.com)",
        )
        return

    # فقط ادمین اجازهٔ ارسال همگانی داره
    if text.startswith("/send"):
        if chat_id != ADMIN_CHAT_ID:
            send_message(chat_id, "فقط مدیر ربات می‌تواند پیام همگانی بفرستد.")
            return
        # متن بعد از /send همون پیامیه که به همه می‌ره
        payload = text[len("/send"):].strip()
        if not payload:
            send_message(chat_id, "متن پیام را بعد از دستور بنویس:\n/send سلام به همه!")
            return
        count = broadcast(payload)
        send_message(chat_id, f"پیام برای {count} مشترک ارسال شد ✅")
        return


def main():
    print("ربات اطلاع‌رسانی فیلتور روشن شد... (Ctrl+C برای خاموش‌کردن)")
    offset = 0
    while True:
        updates = get_updates(offset)
        if not updates.get("ok"):
            time.sleep(2)
            continue

        for update in updates.get("result", []):
            offset = update["update_id"] + 1
            message = update.get("message")
            if not message:
                continue
            chat_id = message["chat"]["id"]
            text = message.get("text", "")
            # این خط کمک می‌کنه chat_id خودت رو پیدا کنی تا ADMIN_CHAT_ID رو تنظیم کنی
            print("پیام از chat_id:", chat_id, "->", text)
            if text:
                handle(chat_id, text)

        time.sleep(0.5)


if __name__ == "__main__":
    main()
کل سورس این ربات ↑ — همین حالا کپی یا دانلود کن

کد را خط‌به‌خط بفهم

کپی‌کردن کافی نیست؛ اگر بدانی هر بخش چرا آن‌جاست، می‌توانی ربات را برای کسب‌وکار خودت تغییر بدهی. مهم‌ترین قطعه‌های ربات اطلاع‌رسانی و ارسال همگانی بله:

۱ADMIN_CHAT_ID: قفل امنیتی ربات

ADMIN_CHAT_ID = 123456789
if chat_id != ADMIN_CHAT_ID: return

بدون این شرط، هر کاربری می‌توانست به کل لیست شما پیام بفرستد. chat_id عددی است که بله به هر گفتگو می‌دهد و جعل‌شدنی نیست؛ برای همین امن‌ترین راه شناسایی مدیر است.

۲پیدا کردن chat_id خودت

print("پیام از chat_id:", chat_id, "->", text)

این خط عمداً در حلقهٔ اصلی گذاشته شده: ربات را اجرا کن، یک پیام بفرست، عدد را از ترمینال بردار. بعد از تنظیم می‌توانی حذفش کنی.

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

return set(line.strip() for line in file if line.strip())

هر chat_id یک خط. با set می‌خوانیم تا تکراری نداشته باشیم و عضویت دوباره مشکلی ایجاد نکند. برای چند هزار مشترک همین کافی است؛ بالاتر از آن دیتابیس بهتر است.

۴تجزیهٔ دستور /send

payload = text[len("/send"):].strip()

هرچه بعد از /send بیاید، متن پیام همگانی است. اگر خالی بود، ربات نحوهٔ استفاده را یادآوری می‌کند به‌جای این‌که پیام خالی به همه بفرستد.

۵مکث ۰٫۶ ثانیه: راز نگرفتن خطای ۴۲۹

for chat_id in subscribers:
    send_message(chat_id, text)
    time.sleep(0.6)

بله (مثل تلگرام) ارسال پرسرعت را با خطای 429 Too Many Requests رد می‌کند. با ۰٫۶ ثانیه مکث، ۱۰۰۰ مشترک در حدود ۱۰ دقیقه پیام می‌گیرند. برای لیست‌های بزرگ، ارسال را در یک thread جدا انجام بده تا ربات در این مدت به بقیه هم جواب بدهد.

۶ایدهٔ توسعه: لغو عضویت

# if text == "/stop": remove_subscriber(chat_id)

یک دستور /stop که chat_id را از فایل حذف کند، هم قانونی‌تر است هم نرخ بلاک‌شدن ربات را پایین می‌آورد. کاربری که نمی‌تواند لغو عضویت کند، ربات را گزارش می‌دهد.

🔁 همین کد روی تلگرام هم اجرا می‌شود: فقط BASE را به https://api.telegram.org/bot{TOKEN} تغییر بده. جدول تفاوت API بله و تلگرام را ببین.

سوال‌های پرتکرار دربارهٔ ربات اطلاع‌رسانی و ارسال همگانی بله

چرا فقط من باید بتوانم پیام همگانی بفرستم؟

برای امنیت، ربات فقط به chat_id مدیر (ADMIN_CHAT_ID) اجازهٔ ارسال همگانی می‌دهد تا کاربران عادی نتوانند به همهٔ مشترک‌ها پیام بدهند.

محدودیت تعداد پیام دارد؟

بله تقریباً ۲ پیام در ثانیه به هر چت و ارسال انبوه پرسرعت را رد می‌کند؛ در کد بین هر ارسال ۰٫۶ ثانیه مکث گذاشته شده تا خطای ۴۲۹ نگیرید.

فرق این ربات با کانال بله چیست؟

در کانال، شما اعضا را نمی‌شناسید. اینجا هر مشترک یک chat_id دارد؛ می‌توانید پیام شخصی بفرستید، آمار بگیرید و بعداً به ربات ثبت سفارش وصلش کنید. باشگاه مشتریان کوچک شما همین است.

می‌خواهم پیام‌ها زمان‌بندی‌شده و همراه عکس ارسال شوند؛ ممکن است؟

بله، نسخهٔ حرفه‌ای با زمان‌بندی، ارسال عکس و فایل، دسته‌بندی مخاطبان و پنل مدیریت را فیلتور برایتان می‌سازد؛ سفارش ربات بله.

طراح و برنامه‌نویس این سورس‌ها · بنیان‌گذار فیلتور

مدیر بخش دیتابیس همراه اول و فعال در توسعهٔ نرم‌افزار از سال ۱۳۹۱؛ با سابقهٔ کار روی سامانه‌های بانکی و پرتراکنش. این سورس‌ها را طوری نوشته که ساده، خوانا و قابل توسعه باشند و مستقیم در کسب‌وکار واقعی استفاده شوند.

راه‌اندازی این ربات برایت سخت شد؟

لازم نیست خودت درگیر شوی. تیم فیلتور این ربات را نصب، شخصی‌سازی و به کسب‌وکارت وصل می‌کند.