شرح مسئله: 

از میان رسانه های اجتماعی که در جهان موجود هستند، نام Telegram میان ۲۰ مورد اول به چشم می خورد که در حال حاضر (آپریل ۲۰۲۰) دارای ۴۰۰ میلیون کاربر فعال بوده و میان ما ایرانی ها از محبوبیت بسیاری برخوردار است؛ تا آنجا که ۵۰ میلیون کاربر ایرانی دارد و می توان گفت پر استفاده ترین رسانه اجتماعی در ایران است.

تلگرام هم مانند بسیاری از دیگر رسانه های اجتماعی قابلیت افزودن ربات (یا به اختصار «بات» ) را دارد. کاربرد این ربات ها از زمینه های کاری هست تا …  بازی و سرگرمی.

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

نیازمندی ها:

برای اینکه بتوانیم کد یک ربات تلگرام را بنویسیم، لازم است یک سری برنامه ها را نصب و یک سری مقدمات را انجام دهیم:

نصب پایتون:
sudo apt-get install software-properties-common
sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt-get update
sudo apt-get install python3.8


نصب IDE (محیط توسعه نرم افزار):

از میان IDE های موجود برای پایتون، ما نرم افزار Pycharm را پیشنهاد می کنیم.

برای این کار دو راه وجود دارد:

۱. نصب Pycharm از طریق برنامه Ubuntu Software

۲. نصب Pycharm از سایت JetBrains

ایجاد بات و شروع کد نویسی:

گام اول: ایجاد بات از طریق ربات BotFather درون خود تلگرام

  • در صفحه چت BotFather بنویسید: newbot/
  • سپس باید یک نام برای بات خود انتخاب کنید (این همان نامی است که همه جا دیده می شود).
  • در مرحله بعد باید یک username (نام کاربری) برای بات خود تعیین کنید. این username باید با کلمه «bot» ختم شود.
  • در آخر، بات پیامی به شما می دهد که  یک token در خط دوم پاراگراف دوم آن وجود دارد. آن را کپی کنید.

گام دوم: ایجاد پروژه در Pycharm

  • پایچرم را باز کرده و از منوی File (بالا چپ) گزینه New Project را بزنید.
  • در Location (مسیر) پیش فرض می توانید نام پروژه خود را از pythonProject به یک نام دلخواه تغییر دهید.
  • در پایین باید گزینه New environment using استفاده شود و باید مسیر نصب پایتون را در Base interpreter انتخاب کنید. سپس می توانید دکمه create را از پایین صفحه بزنید.
  • در پروژه ایجاد شده، در منوی project (سمت چپ) بر روی نام پروژه کلیک راست نموده و گزینه New → Python File را انتخاب کرده و نام آن را bot بگذارید.

گام سوم: نصب کتابخانه pyTelegramBotAPI

برای این کار در Pycharm، گزینه Terminal را از پایین صفحه بزنید و در صفحه ای که باز می شود دستور زیر را وارد کنید:

گام چهارم: شروع کد نویسی

درون فایلی که ایجاد کردید:

این قالب کلی لازم برای پیاده سازی بات می باشد. هر پیامی که به بات داده شود، به این تابع پاس داده می شود و در آن چک می کنیم که به ازای هر پیام چه کاری انجام شود. (البته قالب دیگری نیز وجود دارد. همانطور که اصلا کتابخانه های دیگری هم برای پیاده سازی بات تلگرام وجود دارند.)

در ادامه:

توابع بسیار زیادی برای کارهای مختلف در این کتابخانه و کتابخانه هایی که این از آن ها استفاده می کند وجود دارند که تقریبا می توان گفت پاسخگوی تماااام نیاز های ما هستند. اعم از فرستادن ویدئو تا گذاشتن نظرسنجی.

برای آگاهی از آن ها می توان به لینک های زیر مراجعه نمود:

https://pydoc.net/pyTelegramBotAPI/3.5.1/telebot/

https://core.telegram.org/bots/api

مثالی که از توابع هر دو لینک استفاده شده:

  • (bot.register_next_step_handler(msg, func از لینک اول
  • (‘bot.sned_message(chat_id, ‘message از لینک دوم

باعث می شود پیام بعدی کاربر به تابع func پاس داده شود به جای handler.

مثال:

استفاده از database (پایگاه داده) در پروژه:

برای ذخیره داده های اصلی پروژه نیاز است که از پایگاه داده استفاده شود تا هم قالب مناسب و مرسوم (و سهل و الوصول و ایمن) داشته باشد و هم دایمی باشند و مثلا با قطعی برق (یا خاموشی سیستم) داده ها از بین نروند.

برای این منظور پیشنهاد می کنیم از میان سیستم های مدیریت پایگاهی ( (DBMS (database management system) موجود PostgreSQL را برگزینید.

گام اول: نصب

sudo sh -c ‘echo “deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main” > /etc/apt/sources.list.d/pgdg.list’

wget –quiet -O – https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add –

sudo apt-get update

sudo apt-get -y install postgresql

گام دوم: ساختن دیتابیس

*حواستان باشد که به جای myuser, mypass, mydatabase اسامی مد نظر خود را وارد کنید.

گام سوم: نصب کتابخانه در پروژه

درون Terminal (پایین صفحه) دستور زیر را وارد کنید.

گام چهارم: اتصال به دیتابیس

درون پروژه خود یک فایل به نام database.py بسازید.

*دقت کنید که به جای myuser, mypass, mydatabase باید همان اسامی که در گام دوم تعیین کردید را قرار دهید (خطوط ۱۰،۱۱،۱۴)

همچنین در خط ۲۰ جدول مد نظر را ساخته ایم (پارامتر drop_table از نوع بولین می باشد). به طریق مشابه می توانید توابع دیگری برای ساختن جدول های جدید اضافه کنید.

حال در هرجای پروژه نیاز به درج، ویرایش و یا حذف در دیتابیس وجود داشت، باید یک شیء از کلاس DBHelper ساخته شود و تابع مورد نیاز  را از طریق آن صدا زد.

دقت داشته باشید در تابع _select و _insert آخرین پارامتر ورودی تابع باید از نوع tuple باشد.

مثال:

استفاده از فریمورک flask:

اگر نیاز داشتید که از پروژه ای دیگر به بات خود request (درخواست) دهید که عملیاتی را انجام دهد‌، نیاز است تا از این فریمورک استفاده کنید. این فریمورک بدین صورت کار می کند که بر روی یک url با یک port گوش می ایستد و اگر درخواستی به آن url ارسال شد آن را دریافت کرده و درون تابعی از آن استفاده می کند.

برای درخواست دادن به یک url باید از کتابخانه requests استفاده شود.

گام اول: نصب

گام دوم: اجرا کردن flask app

درون پروژه خود یک فایل به نام flask_api.py بسازید.

همچنین اگر از این روش استفاده می کنید، خط bot.polling() را از آخر فایل bot.py پاک کنید. منتها برای حفظ عملکرد آن نیاز است وقتی flask app اجرا می شود، یک بار به دامنه ای که روی آن اجرا شده باید درخواست داده شود (مثلا با باز کردن آن در مرورگر).

حال اگر یک request به url نوشته شده  درون app.route() با پیشوند دامنه ای که flask app روی آن اجرا شده ارسال شود، تابع زیر آن اجرا خواهد شد.

در آخر: فایل main.py

درون پروژه خود یک فایل به نام flask_api.py بسازید.

*حواستان باشد که برای اجرا شدن بات باید ابتدا یک درخواست به localhost یا 127.0.0.1:5000 ارسال کنید‌ (مثلا آن را در مرورگر باز کنید) (این url و پورت به صورت پیش فرض در تابع app.run() هستند که می توان آن ها را تغییر داد).

نتیجه و جمع بندی:

در نهایت می توانیم یک ربات با تمام قابلیت های مد نظر را پیاده سازی کنیم و حتی قابلیت هماهنگ شدن با دیگر پروژه ها را هم به آن اضافه کنیم.

منابع:

https://novinhub.com/blog/telegram-statistics/

https://pydoc.net/pyTelegramBotAPI/3.5.1/telebot/

https://core.telegram.org/bots/api

https://github.com/eternnoir/pyTelegramBotAPI#getting-started

درباره نیلوا

ایران،تهران

ناحیه نوآوری شریف

بلوار جواد اکبری

برج فناوری بنتک

T: 09150773830
E: admin[@]nilva.ir