سلام دوستان امروز با آموزش ساخت ربات تلگرام به زبان «پایتون» در خدمتتون هستیم!

زیاد خستتون نمیکنم چیزهایی که نیازه :

  • اکانت تلگرام
  • توکن ربات
  • سرور و مفسر پایتون

خب اول از همه باید توکن ربات رو بسازید، برای ساخت توکن اول باید در تلگرام به آیدی botfather@ مراجعه کنید و بعد طبق عکس زیر عمل کنید.

ساخت ربات تلگرام در بات فادر

مراحل به ترتیب :

  • ارسال دستور استارت به ربات
  • ارسال دستور ساخت ربات
  • ارسال نام پروفایل ربات
  • ارسال آیدی پروفایل ربات ( بدون “@” و حتما باید با کلمه bot یا bot_ ختم بشه)
  • دریافت توکن و آیدی ربات ساخته شده توسط بات فادر

خب شما ربات رو ساختید.

مراحل ساخت یک اکو بات ( echo bot ) به وسیله ماژول telebot برای پایتون :

اول از همه باید ماژول telebot نصب بشه

$ pip install pyTelegramBotAPI

و بعد فایلی که میخوایم کد رو درونش بنویسیم رو ایجاد میکنیم ( برای مثال bot.py )

ماژول رو ایمپورت میکنیم و توکن مورد نظر رو به ماژول میدیم تا به API تلگرام وصل بشه:

import telebot
API_TOKEN = 'XXXXXXXXX:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
bot = telebot.TeleBot(API_TOKEN)

هندلر های دستور رو به ربات وصل میکنیم تا اگه دستور ارسال شد کد اجرا بشه و پاسخ “Hi there, I am EchoBot” ارسال بشه:

@bot.message_handler(commands=['help', 'start'])
def send_welcome(message):
    bot.reply_to(message, "Hi there, I am EchoBot.")

و هندلر دوم که به همه پیام ها پاسخ میده و همون پیام رو برمیگردونه ( عمل اکو ):

@bot.message_handler(func=lambda message: True)
def echo_message(message):
    bot.reply_to(message, message.text)

درآخر دستور پولینگ که جهت درخواست های آپدیت متوالی به API تلگرام هست:

bot.polling()

کد در آخر :

import telebot
API_TOKEN = 'XXXXXXXXX:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
bot = telebot.TeleBot(API_TOKEN)

@bot.message_handler(commands=['help', 'start'])
def send_welcome(message):
    bot.reply_to(message, "Hi there, I am EchoBot.")


@bot.message_handler(func=lambda message: True)
def echo_message(message):
    bot.reply_to(message, message.text)

bot.polling()

لینک gist گیتهاب

24 پاسخ به “ساخت ربات تلگرام با پایتون”

  1. سلام من این کدو زدم ولی این خطا اومد:
    ۲۰۱۸-۰۷-۱۷ ۲۳:۲۳:۰۵,۶۸۸ (util.py:65 PollingThread) ERROR – TeleBot: “ApiException occurred, args=(‘A request to the Telegram API was unsuccessful. The server returned HTTP 401 Unauthorized. Response body:\n[{“ok”:false,”error_code”:401,”description”:”Unauthorized”}]’,)
    Traceback (most recent call last):
    File “C:\Python27\lib\site-packages\telebot\util.py”, line 59, in run
    task(*args, **kwargs)
    File “C:\Python27\lib\site-packages\telebot\__init__.py”, line 158, in __retrieve_updates
    updates = self.get_updates(offset=(self.last_update_id + 1), timeout=timeout)
    File “C:\Python27\lib\site-packages\telebot\__init__.py”, line 128, in get_updates
    json_updates = apihelper.get_updates(self.token, offset, limit, timeout, allowed_updates)
    File “C:\Python27\lib\site-packages\telebot\apihelper.py”, line 180, in get_updates
    return _make_request(token, method_url, params=payload)
    File “C:\Python27\lib\site-packages\telebot\apihelper.py”, line 56, in _make_request
    return _check_result(method_name, result)[‘result’]
    File “C:\Python27\lib\site-packages\telebot\apihelper.py”, line 75, in _check_result
    raise ApiException(msg, method_name, result)
    ApiException: A request to the Telegram API was unsuccessful. The server returned HTTP 401 Unauthorized. Response body:
    [{“ok”:false,”error_code”:401,”description”:”Unauthorized”}]

    ۲۰۱۸-۰۷-۱۷ ۲۳:۲۳:۰۵,۷۰۱ (__init__.py:299 MainThread) ERROR – TeleBot: “A request to the Telegram API was unsuccessful. The server returned HTTP 401 Unauthorized. Response body:
    [{“ok”:false,”error_code”:401,”description”:”Unauthorized”}]”
    چطوری حلش کنم

  2. سلام ببخشید ورژن پایتون باید چند باشه؟ میشه با پایتون ۳٫۷ با استفاده دو کتابخانه telebot و telegram ربات ساخت؟

    1. سلام کتابخانه telebot با پایتون ۲ و ۳ سازگار هست
      نیازی هم به استفاده از کتابخانه telegram نیست، telebot کامل هستش.

      1. خیلی ممنون. این کتابخانه سایتی داره؟ و منم اموزش بالا رو رفتم ارور پایین رو گرفتم و کتابخانه رو هم نصب کردم
        Traceback (most recent call last):
        File “C:/Users/Mehran/PycharmProjects/Pbot/newbotbot.py”, line 1, in
        import telebot
        File “C:\Users\Mehran\PycharmProjects\Pbot\venv\lib\site-packages\telebot\__init__.py”, line 1353
        @util.async()
        ^
        SyntaxError: invalid syntax

          1. برنامه pycharm رو هم بایسیتی به پراکسی فیلتر شکن وصل میکردم که تازه یاد گرفتم. این آموزش تو پایتون ۲٫۷ جواب داد و ۳٫۷ همون ارور رو داد.خیلی ممنون بابت کمک

    1. سلام، تلگرام جدیدا هوش مصنوعی و حساسیت زیادی برای رباتای تبچی قرار داده، که تقریبا دور زدن این حساسیت ها غیرممکنه، هر نسخه جدیدی از تبچی ساخته بشه تلگرام تشخیص میده و دلیت میکنه اکانتش رو!

  3. سلام . من این کد رو ک نوشتم خطا میده که اتصال بی نتیجه ماند. با کامنت کردن دستور polling (آخرین دستور) اجرا میشه ولی خب اپدیتی نداره روی بوت. میخواستم ببینم این مشکل از فیلتر بودن سایت تلگرام هست یا نه؟

    1. درسته، url های وب سرویس تلگرام رو هم فیلتر کردن، که باعث میشه صفحه پیوند هارو جای آپدیت بگیره :))
      ربات رو با فیلترشکن و یا روی یک سرور خارج از ایران تست کنین.

  4. سلام عالی بود ولی برای من ارور connection داره که بعد از یه مدت متوجه شدم مشکل از فیلتر بودن تلگرامه من از اوبونتو استفاده میکنم و socks5 رو تلگرامم ست کردم.
    میشه همین socks5 روی ربات ست کرد؟منظورم اینه خود ربات یک پراکسی داشته باشه و اینکه ماژولی برای این هست؟ ممنون میشم پاسخ بدین

  5. سلام وقت بخیر برای من این ارور میده علتش چیه:
    @bot.message_handler(commands=[‘start’])
    AttributeError: ‘TeleBot’ object has no attribute ‘message_handler’

  6. سلام
    من از سیستم عامل لینوکس توزیع دبیان استفاده میکنم و برای اجرای ربات های تلگرام به زبان پایتون به علت فیلتر بودن تلگرام به مشکل بر میخورم
    لطفا میشه بگید باید چیکار کنم ؟ اگه vpn یا تور یا چیزی میخواد راهنمایی کنید

  7. سلام 2 تا سوال داشتم میشه کد این هم بزارین که وقتی کاربر پیامی ارسال میکنه در جواب ربات بهش بگه پیام شما ارسال شد
    و دیگه که میشه بگین چرا وقتی کامپیوتر خاموش میکنم ربات دیگه پاسخ نمیده

    1. سلام درمورد سوال اولتون در لاین 12، میتونین جای message.text عبارت موردنظرتون رو وارد کنین؛ درمورد سوال دومتون باید بگم که کامپیوتر شما مسئولیت پردازش و روشن نگه داشتن ربات رو داره، اگه کامپیوتر رو خاموش کنین ربات از کار میوفته، میتونین ربات رو روی سرور راه اندازی کنین تا مشکل خاموش شدن ربات برطرف بشه.

  8. سلام . من با پایتون کد شما رو روی ربات خواستم ران کنم ولی پیام ارور میده؟
    فکر میکنید مربوطه به پروکسی هست؟
    چکار باید کرد که مشکل حل بشه؟
    C:\Users\ASUS\Desktop>python main.py
    Traceback (most recent call last):
    File “C:\Users\ASUS\AppData\Local\Programs\Python\Python38-32\lib\site-packages\telegram\vendor\ptb_urllib3\urllib3\connection.py”, line 140, in _new_conn
    conn = connection.create_connection(
    File “C:\Users\ASUS\AppData\Local\Programs\Python\Python38-32\lib\site-packages\telegram\vendor\ptb_urllib3\urllib3\util\connection.py”, line 83, in create_connection
    raise err
    File “C:\Users\ASUS\AppData\Local\Programs\Python\Python38-32\lib\site-packages\telegram\vendor\ptb_urllib3\urllib3\util\connection.py”, line 73, in create_connection
    sock.connect(sa)
    socket.timeout: timed out

    During handling of the above exception, another exception occurred:

    Traceback (most recent call last):
    File “C:\Users\ASUS\AppData\Local\Programs\Python\Python38-32\lib\site-packages\telegram\vendor\ptb_urllib3\urllib3\connectionpool.py”, line 614, in urlopen
    httplib_response = self._make_request(conn, method, url,
    File “C:\Users\ASUS\AppData\Local\Programs\Python\Python38-32\lib\site-packages\telegram\vendor\ptb_urllib3\urllib3\connectionpool.py”, line 360, in _make_request
    self._validate_conn(conn)
    File “C:\Users\ASUS\AppData\Local\Programs\Python\Python38-32\lib\site-packages\telegram\vendor\ptb_urllib3\urllib3\connectionpool.py”, line 857, in _validate_conn
    super(HTTPSConnectionPool, self)._validate_conn(conn)
    File “C:\Users\ASUS\AppData\Local\Programs\Python\Python38-32\lib\site-packages\telegram\vendor\ptb_urllib3\urllib3\connectionpool.py”, line 289, in _validate_conn
    conn.connect()
    File “C:\Users\ASUS\AppData\Local\Programs\Python\Python38-32\lib\site-packages\telegram\vendor\ptb_urllib3\urllib3\connection.py”, line 284, in connect
    conn = self._new_conn()
    File “C:\Users\ASUS\AppData\Local\Programs\Python\Python38-32\lib\site-packages\telegram\vendor\ptb_urllib3\urllib3\connection.py”, line 144, in _new_conn
    raise ConnectTimeoutError(
    telegram.vendor.ptb_urllib3.urllib3.exceptions.ConnectTimeoutError: (, ‘Connection to api.telegram.org timed out. (connect timeout=5.0)’)

    During handling of the above exception, another exception occurred:

    Traceback (most recent call last):
    File “C:\Users\ASUS\AppData\Local\Programs\Python\Python38-32\lib\site-packages\telegram\utils\request.py”, line 225, in _request_wrapper
    resp = self._con_pool.request(*args, **kwargs)
    File “C:\Users\ASUS\AppData\Local\Programs\Python\Python38-32\lib\site-packages\telegram\vendor\ptb_urllib3\urllib3\request.py”, line 64, in request
    return self.request_encode_url(method, url, fields=fields,
    File “C:\Users\ASUS\AppData\Local\Programs\Python\Python38-32\lib\site-packages\telegram\vendor\ptb_urllib3\urllib3\request.py”, line 87, in request_encode_url
    return self.urlopen(method, url, **extra_kw)
    File “C:\Users\ASUS\AppData\Local\Programs\Python\Python38-32\lib\site-packages\telegram\vendor\ptb_urllib3\urllib3\poolmanager.py”, line 244, in urlopen
    response = conn.urlopen(method, u.request_uri, **kw)
    File “C:\Users\ASUS\AppData\Local\Programs\Python\Python38-32\lib\site-packages\telegram\vendor\ptb_urllib3\urllib3\connectionpool.py”, line 691, in urlopen
    return self.urlopen(method, url, body, headers, retries,
    File “C:\Users\ASUS\AppData\Local\Programs\Python\Python38-32\lib\site-packages\telegram\vendor\ptb_urllib3\urllib3\connectionpool.py”, line 691, in urlopen
    return self.urlopen(method, url, body, headers, retries,
    File “C:\Users\ASUS\AppData\Local\Programs\Python\Python38-32\lib\site-packages\telegram\vendor\ptb_urllib3\urllib3\connectionpool.py”, line 691, in urlopen
    return self.urlopen(method, url, body, headers, retries,
    File “C:\Users\ASUS\AppData\Local\Programs\Python\Python38-32\lib\site-packages\telegram\vendor\ptb_urllib3\urllib3\connectionpool.py”, line 665, in urlopen
    retries = retries.increment(method, url, error=e, _pool=self,
    File “C:\Users\ASUS\AppData\Local\Programs\Python\Python38-32\lib\site-packages\telegram\vendor\ptb_urllib3\urllib3\util\retry.py”, line 376, in increment
    raise MaxRetryError(_pool, url, error or ResponseError(cause))
    telegram.vendor.ptb_urllib3.urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host=’api.telegram.org’, port=443): Max retries exceeded with url: /bot1142422427:AAHL5nQ2dt8NwfrGueTMCbqkru-tIf2eq4E/getMe (Caused by ConnectTimeoutError(, ‘Connection to api.telegram.org timed out. (connect timeout=5.0)’))

    During handling of the above exception, another exception occurred:

    Traceback (most recent call last):
    File “main.py”, line 13, in
    updater.start_polling()
    File “C:\Users\ASUS\AppData\Local\Programs\Python\Python38-32\lib\site-packages\telegram\ext\updater.py”, line 260, in start_polling
    self.job_queue.start()
    File “C:\Users\ASUS\AppData\Local\Programs\Python\Python38-32\lib\site-packages\telegram\ext\jobqueue.py”, line 314, in start
    name=”Bot:{}:job_queue”.format(self._dispatcher.bot.id))
    File “C:\Users\ASUS\AppData\Local\Programs\Python\Python38-32\lib\site-packages\telegram\bot.py”, line 54, in decorator
    self.get_me()
    File “”, line 2, in get_me
    File “C:\Users\ASUS\AppData\Local\Programs\Python\Python38-32\lib\site-packages\telegram\bot.py”, line 70, in decorator
    result = func(*args, **kwargs)
    File “C:\Users\ASUS\AppData\Local\Programs\Python\Python38-32\lib\site-packages\telegram\bot.py”, line 292, in get_me
    result = self._request.get(url, timeout=timeout)
    File “C:\Users\ASUS\AppData\Local\Programs\Python\Python38-32\lib\site-packages\telegram\utils\request.py”, line 277, in get
    result = self._request_wrapper(‘GET’, url, **urlopen_kwargs)
    File “C:\Users\ASUS\AppData\Local\Programs\Python\Python38-32\lib\site-packages\telegram\utils\request.py”, line 231, in _request_wrapper
    raise NetworkError(‘urllib3 HTTPError {0}’.format(error))
    telegram.error.NetworkError: urllib3 HTTPError HTTPSConnectionPool(host=’api.telegram.org’, port=443): Max retries exceeded with url: /bot1142422427:AAHL5nQ2dt8NwfrGueTMCbqkru-tIf2eq4E/getMe (Caused by ConnectTimeoutError(, ‘Connection to api.telegram.org timed out. (connect timeout=5.0)’))

پاسخی بگذارید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *