برای طرح سوال و دسترسی به آموزش ها  کانال ما در تلگرام بپویندید  

آموزش نحوه نوشتن یک ربات bot برای Telegram

به نام دانای بر حق

مقدمه

با این که من خودم مخالف ۱۰۰٪ این تکنولوژی هایی هستم که هر روز زندگی بشر رو بیشتر به پوچی نزدیک می کنه ولی خب بد نیستش که از نظر فنی بیایم و به این موضوع نگاهی بندازیم همونجوری که میدونین تلگرام یه شبکه ای هستش شبیه وایبر منتهی با حذف یه سری محدودیت ها که وایبر داره محبوب تر شده و با داشتن ربات ها متمایز شده از سایر شبکات دیگر، ما در این آموزش در مورد نحوه راهندازی یک ربات صحبت می کنیم ما تک تک api ها رو معرفی نمیکنیم یک ربات  رو تعریف می کنیم  از ۰ تا ۱۰۰ اما تا حد زیادیش رو میگم بقیه با شما شاید هم یک آموزش تکمیلی در این مورد ارسال کردیم.

اگر شما به زبان جاواسکریپت تسلط بیشتری دارید پیشنهاد میکنم از این آموزش استفاده کنین.

پیش فرض ها

اول از همه شما باید به سیستم عامل خودتون تسلط داشته دارید ( من تو آموزش از لینوکس توزیع ubuntu استفاده می کنم و به شما هم همین os رو پیشنهاد می کنم.) .

دوم با زبان پایتون حداقل دست پا شکسته آشنایی داشته باشید.

سوم تسلط به یک زبان وب و نوشتن یک ربات برای پرسش و پاسخ ( ضروری نیست)

دانلود و نصب

ابتدا پایتون روی سیستمتون نصب کنین اگر لینوکسی هستید نصب شده است نگران نباشید البته نسخه ۲.x نه ۳

سپس python pip رو نصب کنید در اوبنتو با دستور زیر:

sudo apt-get install python-pip

سپس کتابخانه telegram bot رو با Pip نصب کنید به شکل زیر:

pip install python-telegram-bot --upgrade

سپس git را نصب کنید در Ubuntu به شکل زیر:

sudo apt-get install git

در نهایت میریم به پوشه مشخص مثل desktop بعد یه همزاد یا همون clone از ربات github میگیریم با دستور زیر:

git clone https://github.com/leandrotoledo/python-telegram-bot

بعد وارد پوشه همزاده شده می شویم:

cd python-telegram-bot

دو دستور زیر رو اجرا می کنیم برای آماده سازی کتابخانه:

make test
make help

خب حالا آنچه نیاز بودش رو نصب کردیم .

 

نحوه ایجاد bot

برای ایجاد روبوت شما باید با botfather صحبت کنید برای این کار Telegram نسخه دسکتاپ رو دانلود کنید و واردش بشین و با کلیک روی این لینک میتونین تو تلگرامتون با بات فادر صحبت کنید

ضرورت صحبت با botfather این هستش که شما باید api مورد نیاز رو از این ربات خود تلگرام بگیرین:

برای ایجادش اول:

/newbot

رو بزنین اسم ربات رو از شما میخواد مثلا میزنیم: xmen

بعد نام کاربری برای ربات میخوادش که حتما باید به _bot ختم شود مثل: xmen_bot

خب حالا یه چیزی تو این مایه ها به شما میده در پاسخ میده که api شما هستش:

Use this token to access the HTTP API:
۱۲۵۹۴۲۳۹۰:AAEWWJ_gwxw11vw8o0qHwiNu7hjBNZLi9E4

خب تا ایجا درست ‍پیش رفتین.

نحوه راهندازی bot

برای راهندازی از یه editor , IDE معروف python مثل spyder استفاده کنین خب وارد پوشه exmaples بشین و فایل زیر رو باز کنین:

roboed.py

 

محتوای داخل این هستش:

#!/usr/bin/env python
# encoding: utf-8

'''Robô Ed Telegram Bot'''

__author__ = 'leandrotoledodesouza@gmail.com'

import telegram
import requests


def main():
    bot = telegram.Bot('token')  # Telegram Bot Authorization Token

    global LAST_UPDATE_ID
    LAST_UPDATE_ID = bot.getUpdates()[-1].update_id  # Get lastest update

    while True:
        for update in bot.getUpdates(offset=LAST_UPDATE_ID):
            text = update.message.text
            chat_id = update.message.chat.id
            update_id = update.update_id

            if LAST_UPDATE_ID < update_id:  # If newer than the initial
                                            # LAST_UPDATE_ID
                if text:
                    roboed = ed(text)  # Ask something to Robô Ed 
                    bot.sendMessage(chat_id=chat_id, text=roboed)
                    LAST_UPDATE_ID = update_id


def ed(text):
    url = 'http://www.ed.conpet.gov.br/mod_perl/bot_gateway.cgi?server=0.0.0.0%3A8085&charset_post=utf-8&charset=utf-8&pure=1&js=0&tst=1&msg=' + text
    data = requests.get(url).content

    return data.strip()

if __name__ == '__main__':
    main()

خب به جای leandrotoledodesouza@gmail.com ایمیل خودتون رو بزنین ضروری نیست این حرکت

در خط زیر :

telegram.Bot('token')

token اون api دریافت شده رو بذارین ۱۰۰٪ ضروری هستش.

خب حالا به تابع ed مراجعه می کنیم:

در این تابع یه پرس و جو از آدرس اج وجق خودش میشه اما برای سرور خودنون عوض می کنیم که توضیح دقیق تر رو به عهده خودتون میذارم که برین سراغش سخت نیست.

حال من یه تغییر دیگه توش ایجاد می کنیم:

                    roboed = ed(text)  # Ask something to Robô Ed 
                    bot.sendMessage(chat_id=chat_id, text=roboed)
                    LAST_UPDATE_ID = update_id

به شکل زیر عوض می کنیم

                    roboed = ed(text)  # Ask something to Robô Ed 
                    if (text == 'pic' ):
                        bot.sendPhoto(chat_id,'https://pypi.python.org/static/images/python-logo.png','Thanks for watching');
                    else:
                        bot.sendMessage(chat_id=chat_id, text=roboed)
                    LAST_UPDATE_ID = update_id

خب معنی کد بالا اینه اگر pic رو فرستاد براش عکس میفرسته در غیر این صورت پاسخ پرس و جو رو ارسال میکند.

run کردن ربات

run کردن ربات توسط ترمینال در لینوکس و یا cmd در ویندوز وارد پوشه examples میشیم و دستور زیر رو مینویسیم:

python roboed.py

خب الان ربات ما به تلگرام وصل هستش و تا مادامی که ترمینال یا cmd باز هستش ربات ما توانایی پاسخگویی رو داره به مراجعه کننده.

برای ‍پیدا کردن ربات همون زمان ساخت api بهتون‌ آدرسش هم میدهد.

البته برای دائم الجرا شدنش باید اون روی یه سرور استارت آپ کنید.

به همین سختی و به همین خوشمزگی 😀 چون پایتون بود خوشمزه شد.

اگر مایل بودین میتونیم تکمیلی هم صحبت کنیم اینجا لینوکسه و دنیا دنیا اتفاق خوب 😀


انتشار

در

, , ,

توسط

برچسب‌ها:

نظرات

36 پاسخ به “آموزش نحوه نوشتن یک ربات bot برای Telegram”
  1. hadi نیم‌رخ
    hadi

    خوب بود دمت گرم .

  2. حمید نیم‌رخ
    حمید

    با سلام و تشکر فراوان. امکانش هست اموزشی برای ساخت روبات با PHP به همین سبک بگذارید. اموزش در سایتهای مثل
    http://amirh.ir/how-to-build-telegram-bot/#comment-544
    وجود داره ولی به این کاملی توضیح داده نشده.
    مزیت ان روش اینه که باهاست کار راه میوفته و نیاز به سرور نیست

    1. Mahdiam نیم‌رخ
      Mahdiam

      ربات های php نیز وجود دارند اما نظر به این که پیش نیاز هایی برای run شدن نیاز دارند که مدیران سرور از نصب اون ها امتناع می کنند.
      مثال این نمونه باید composer رو نصب باشه: https://github.com/zelenin/telegram-bot-api

  3. علی نیم‌رخ
    علی

    سلام وقتی می خوام این کد رو اجرا کنم با ارور :
    Traceback (most recent call last):
    File “test.py”, line 32, in
    main()
    File “test.py”, line 11, in main
    LAST_UPDATE_ID = bot.getUpdates()[-1].update_id # Get lastest update
    IndexError: list index out of range

    مواجه می شم .

    1. Mahdiam نیم‌رخ
      Mahdiam

      سلام همینطوری که نمیشه جواب داد دوست عزیز.
      بدون هیچ کد چیزی.

  4. سمانه نیم‌رخ
    سمانه

    سلام.باید حتنا رو ویندوز انجام داد یا با تبلت و گوشی هم میشه

    1. Mahdiam نیم‌رخ
      Mahdiam

      باید حتما در یک محیط دسکتاپ ( مثل ویندوز، لینوکس و یا مک) این کار رو انجام بدین.

  5. محمد نیم‌رخ
    محمد

    میشه یکم بیشتر توضیح بدهید که اگر همین ربات بخاد فید از سایت ها بخونه و بفرسته باید چکار کنه‌؟ یکم راهنمایی کنید یا کد مثالش رو گیت‌هاپ رو بدید ؟ ممنون 🙂

    1. lord_viper نیم‌رخ
      lord_viper

      با سلام
      معمولا سایتها یک ادرس فید دارن که محتوی اون به صورت xml هست شما با استفاده از ادرس rss اون سایت و یک تابع مثل زیر میتونین فیدهای سایت رو دربیارین و پاس بدید به ربات تا ارسال کنه

      function getFeed($feed_url) {
           
          $content = file_get_contents($feed_url);
          $x = new SimpleXmlElement($content);
           
          echo "
      "; }
  6. meehran نیم‌رخ
    meehran

    سلام
    اگه این اسکریپت رو بخوام رو ی vps قرار بدم که همیشه اجرا بشه باید اون تحت چه سرویسی اجرا کنم(apach,django,flask) یا باید از cgi استفاده کنم در کد بالا؟ در کل اگه ممکنه یک توضیح بدید که همین اسکریپت که رو کلاینت اجرا میشه بدون تغییر چه طوری رو سرور اپلود و اجرا کرد
    ممنون

    1. Mahdiam نیم‌رخ
      Mahdiam

      روی هر وی پی اسی میتونی اجرا کنی فقط پایتون نیاز داری.
      اما اگر لینوکس داشته باشی با برنامه forever میتونی اطمینان حاصل کنی که همیشه یک instance از برنامه ات در حال اجراس.
      برای آپلود نمیدونم از چه روشی فایل هات رو میفرستی سرورت
      برای اجراش از طریق ssh یا cmd در ویندوز به سادگی میتونی اجرا کنی

      1. mehran نیم‌رخ
        mehran

        پس فقط پایتون و ماژول های که لازم داره نصب کنم. با این برنامه ای که معرفی کردید دیگه نیازی به قراردادن کد در while برای در حال اجرا بودن برنامه نیست؟ اگه کسی ادرس فایل رو داخل url بزنه می تونه فایل رو بگیره راه ی هست که کسی دسترسی نداسته باشه؟
        ممنون

        1. Mahdiam نیم‌رخ
          Mahdiam

          درسته دقیقا.
          forever مسئول run بودن برنامه تو هر شرایطی هستش ثانیاْ اصلا برنامه هیچ ربطی به مکانی که دسترسی به هاست یا همون پوشه public شما نداره که بشه دانلود کرد
          مثل یک گوشی یه سرور تلگرام وصل میشه و اطلاعات رو دریافت و پاسخ مناسب را میدهد به همین سادگی.

          1. mehran نیم‌رخ
            mehran

            اخه روی همون vps می خوام یه وب سایت هم بزارم با اسکن کردن فولدرای سایت مشخص میشه پس باید سایت رو یه هاست دیگه بزارم ؟
            ممنون

          2. Mahdiam نیم‌رخ
            Mahdiam

            قبل از پوشه پابلیک بذارش یا با یه .htaccess دسترسی مستقیم رو به فایل هاش ببند

  • mehran نیم‌رخ
    mehran

    ببخشید زیاد سوال پرسیدم چون با سرور اشنایی نداشتم
    خیلی ممنون

  • فرحان نیم‌رخ
    فرحان

    سلام
    ممنون از آموزشتون
    چه جوری میشه به تمام user های بات، پیغام فرستاد…؟

    تشکر

    1. ‌A1Gard نیم‌رخ
      ‌A1Gard

      به حرکت می گویند boradcast کردن.
      به لینک زیر مراجعه کن:
      https://core.telegram.org/bots/faq#how-can-i-message-all-of-my-bot-39s-subscribers-at-once

  • علی نیم‌رخ
    علی

    سلام
    عالیه
    من هنوز انجام ندادم این کارو ولی برنامه ریزی کردم که انجامش بدم حتما
    فقط ممنون میشم اپلود ربات روی هاست دایرکت ادمین استفاده ۲۴ ساعته از اون رو بزارید ممنون
    و نمونه ای از نوشتن پرسش و پاسخ از ربات رو هم بدید به اضافه دریافت و ارسال مطالب از rrs یک سایت D;

  • مهدی نیم‌رخ
    مهدی

    چگونه لوگوی شخصی خود را در روبوت بسازم

  • محمد مهدی نیم‌رخ

    سلام.
    آقا درباره خودتون رو خیلی قشنگ نوشتید…
    « تا الان حضرت حق اینا رو به ما داده و هر وقت که بخواد ازمون میگیره دست خودشه. یا حق، با حق، تا حق»

    ممنون

    1. ‌A1Gard نیم‌رخ
      ‌A1Gard

      خواهش میکنم لطف دارین
      واقعا حقیقتی هستش.

  • Arman نیم‌رخ
    Arman

    سلام …
    لطفا نحوه ایجاد و کارکردن باهاش تحت django رو هم بگید . ( اون فایل اصلی رو که میسازیم کجا باید قرارش بدیم )

    با برنامه نویسی ربات میشه برای کانال هم مطلب فرستاد یا اون یه چیز جداگونس ؟ ( اگه بله که یه راهنمایی بکنید و اگرم نه که یه کتابخونه براش بگید )

    ممنون

    1. ‌A1Gard نیم‌رخ
      ‌A1Gard

      با دیجانگو کار نکردم نمیتونم راهنمایی دقیقی بکنم.
      در جریان هستم ربات عضو کانال میشه اما این که مطل بذاره رو تا حالا ندیدم.

  • mostaaf نیم‌رخ
    mostaaf

    سلام
    وقت بخیر
    من اگه بخوام رباتم پیام هایی که خودم دستی بهش میدم رو به گروه ها و کانالها و اشخاصی که استارت کردن ربات رو ارسال کنه
    بازم باید این کارها رو انجام بده؟؟

  • سامان22 نیم‌رخ
    سامان22

    سلام خسته نباشید.
    من با سایت گیت هاب ربات ساختم ولی برای ران کردنش نیاز ب میز کار لینوکس داره ….
    الان سورسشو دارم فقط پوشه examples هم نداره چجوری باید رانش کنم .بدون کار با لینوکس. ممنون

    1. ‌A1Gard نیم‌رخ
      ‌A1Gard

      نه نیازی به لینوکس نیست اگر pip رو نصب کردین میتونین درستش کنین فقط کافی با command line فایل پایتون رو اجرا کنین.

  • محسن نیم‌رخ

    جالب بود مرسی

  • کامپیوتری نیم‌رخ

    سلام
    ممنون از شما بخاطر آموزشهای مفید و کاربردیتون

  • سعید نیم‌رخ
    سعید

    سلام
    لطفاً یکی که وقت داره و میتونه یه رباط ساده برای من بسازه. فقط میخوام دکمه داشته باشه و با زدن دکمه های مختلف متون مختلف یا عکس یا صدا یا فرمتهای دیگه بفرسته. زیادم نمیخوام شلوغ باشه. نحوه ساخت و یا حالت ساده ش رو بسازید بفرستید ممنون میشم.

    1. SadeghPM نیم‌رخ
      SadeghPM

      سلام. چه امکاناتی مد نظر دارید؟

  • محمود نیم‌رخ

    سلام
    من با php یه کدی نوشتم که به برای ربات getupdates بکنه و به پیغام ها جواب بده
    دو تا مشکل وجود داره
    اول این که هر بار که کد اجرا میشه، دو باره به پیغام های قبلی که قبلا پاسخ داده باز پاسخ میده
    دوم اینکه به پیغام هایی که تو گروه فرستاده شده پاسخ نمیده اصلا
    ایراد از کجاست
    چه باید کرد؟
    ممنون میشم زود پاسخ بدید

    1. ‌A1Gard نیم‌رخ
      ‌A1Gard

      سوالتون کاملا نا مفهوم هشتش این یادداشت مربوط به پایتون هستش لطفا سوالتون رو دقیق تر مطرح کنید. در صورتی که مرتبط با موضوع مطلب هستش

  • تراز نیم‌رخ

    ممنون از شما و سایت خوبتون

  • adib.uss34 نیم‌رخ
    adib.uss34

    مطالب بسیار پرمحتوایی دارید.
    ممنون
    موفق باشید

  • دیدگاهتان را بنویسید

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