به نام دانای بر حق
مقدمه
با این که من خودم مخالف ۱۰۰٪ این تکنولوژی هایی هستم که هر روز زندگی بشر رو بیشتر به پوچی نزدیک می کنه ولی خب بد نیستش که از نظر فنی بیایم و به این موضوع نگاهی بندازیم همونجوری که میدونین تلگرام یه شبکه ای هستش شبیه وایبر منتهی با حذف یه سری محدودیت ها که وایبر داره محبوب تر شده و با داشتن ربات ها متمایز شده از سایر شبکات دیگر، ما در این آموزش در مورد نحوه راهندازی یک ربات صحبت می کنیم ما تک تک 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 بهتون آدرسش هم میدهد.
البته برای دائم الجرا شدنش باید اون روی یه سرور استارت آپ کنید.
به همین سختی و به همین خوشمزگی 😀 چون پایتون بود خوشمزه شد.
اگر مایل بودین میتونیم تکمیلی هم صحبت کنیم اینجا لینوکسه و دنیا دنیا اتفاق خوب 😀
خوب بود دمت گرم .
با سلام و تشکر فراوان. امکانش هست اموزشی برای ساخت روبات با PHP به همین سبک بگذارید. اموزش در سایتهای مثل
http://amirh.ir/how-to-build-telegram-bot/#comment-544
وجود داره ولی به این کاملی توضیح داده نشده.
مزیت ان روش اینه که باهاست کار راه میوفته و نیاز به سرور نیست
ربات های php نیز وجود دارند اما نظر به این که پیش نیاز هایی برای run شدن نیاز دارند که مدیران سرور از نصب اون ها امتناع می کنند.
مثال این نمونه باید composer رو نصب باشه: https://github.com/zelenin/telegram-bot-api
سلام وقتی می خوام این کد رو اجرا کنم با ارور :
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
مواجه می شم .
سلام همینطوری که نمیشه جواب داد دوست عزیز.
بدون هیچ کد چیزی.
سلام.باید حتنا رو ویندوز انجام داد یا با تبلت و گوشی هم میشه
باید حتما در یک محیط دسکتاپ ( مثل ویندوز، لینوکس و یا مک) این کار رو انجام بدین.
میشه یکم بیشتر توضیح بدهید که اگر همین ربات بخاد فید از سایت ها بخونه و بفرسته باید چکار کنه؟ یکم راهنمایی کنید یا کد مثالش رو گیتهاپ رو بدید ؟ ممنون 🙂
با سلام
معمولا سایتها یک ادرس فید دارن که محتوی اون به صورت xml هست شما با استفاده از ادرس rss اون سایت و یک تابع مثل زیر میتونین فیدهای سایت رو دربیارین و پاس بدید به ربات تا ارسال کنه
"; foreach($x->channel->item as $entry) { echo "- " . $entry->title . "
";
}
echo "
"; }سلام
اگه این اسکریپت رو بخوام رو ی vps قرار بدم که همیشه اجرا بشه باید اون تحت چه سرویسی اجرا کنم(apach,django,flask) یا باید از cgi استفاده کنم در کد بالا؟ در کل اگه ممکنه یک توضیح بدید که همین اسکریپت که رو کلاینت اجرا میشه بدون تغییر چه طوری رو سرور اپلود و اجرا کرد
ممنون
روی هر وی پی اسی میتونی اجرا کنی فقط پایتون نیاز داری.
اما اگر لینوکس داشته باشی با برنامه forever میتونی اطمینان حاصل کنی که همیشه یک instance از برنامه ات در حال اجراس.
برای آپلود نمیدونم از چه روشی فایل هات رو میفرستی سرورت
برای اجراش از طریق ssh یا cmd در ویندوز به سادگی میتونی اجرا کنی
پس فقط پایتون و ماژول های که لازم داره نصب کنم. با این برنامه ای که معرفی کردید دیگه نیازی به قراردادن کد در while برای در حال اجرا بودن برنامه نیست؟ اگه کسی ادرس فایل رو داخل url بزنه می تونه فایل رو بگیره راه ی هست که کسی دسترسی نداسته باشه؟
ممنون
درسته دقیقا.
forever مسئول run بودن برنامه تو هر شرایطی هستش ثانیاْ اصلا برنامه هیچ ربطی به مکانی که دسترسی به هاست یا همون پوشه public شما نداره که بشه دانلود کرد
مثل یک گوشی یه سرور تلگرام وصل میشه و اطلاعات رو دریافت و پاسخ مناسب را میدهد به همین سادگی.
اخه روی همون vps می خوام یه وب سایت هم بزارم با اسکن کردن فولدرای سایت مشخص میشه پس باید سایت رو یه هاست دیگه بزارم ؟
ممنون
قبل از پوشه پابلیک بذارش یا با یه .htaccess دسترسی مستقیم رو به فایل هاش ببند
ببخشید زیاد سوال پرسیدم چون با سرور اشنایی نداشتم
خیلی ممنون
سلام
ممنون از آموزشتون
چه جوری میشه به تمام user های بات، پیغام فرستاد…؟
تشکر
به حرکت می گویند boradcast کردن.
به لینک زیر مراجعه کن:
https://core.telegram.org/bots/faq#how-can-i-message-all-of-my-bot-39s-subscribers-at-once
سلام
عالیه
من هنوز انجام ندادم این کارو ولی برنامه ریزی کردم که انجامش بدم حتما
فقط ممنون میشم اپلود ربات روی هاست دایرکت ادمین استفاده ۲۴ ساعته از اون رو بزارید ممنون
و نمونه ای از نوشتن پرسش و پاسخ از ربات رو هم بدید به اضافه دریافت و ارسال مطالب از rrs یک سایت D;
چگونه لوگوی شخصی خود را در روبوت بسازم
سلام.
آقا درباره خودتون رو خیلی قشنگ نوشتید…
« تا الان حضرت حق اینا رو به ما داده و هر وقت که بخواد ازمون میگیره دست خودشه. یا حق، با حق، تا حق»
ممنون
خواهش میکنم لطف دارین
واقعا حقیقتی هستش.
سلام …
لطفا نحوه ایجاد و کارکردن باهاش تحت django رو هم بگید . ( اون فایل اصلی رو که میسازیم کجا باید قرارش بدیم )
با برنامه نویسی ربات میشه برای کانال هم مطلب فرستاد یا اون یه چیز جداگونس ؟ ( اگه بله که یه راهنمایی بکنید و اگرم نه که یه کتابخونه براش بگید )
ممنون
با دیجانگو کار نکردم نمیتونم راهنمایی دقیقی بکنم.
در جریان هستم ربات عضو کانال میشه اما این که مطل بذاره رو تا حالا ندیدم.
سلام
وقت بخیر
من اگه بخوام رباتم پیام هایی که خودم دستی بهش میدم رو به گروه ها و کانالها و اشخاصی که استارت کردن ربات رو ارسال کنه
بازم باید این کارها رو انجام بده؟؟
سلام خسته نباشید.
من با سایت گیت هاب ربات ساختم ولی برای ران کردنش نیاز ب میز کار لینوکس داره ….
الان سورسشو دارم فقط پوشه examples هم نداره چجوری باید رانش کنم .بدون کار با لینوکس. ممنون
نه نیازی به لینوکس نیست اگر pip رو نصب کردین میتونین درستش کنین فقط کافی با command line فایل پایتون رو اجرا کنین.
جالب بود مرسی
سلام
ممنون از شما بخاطر آموزشهای مفید و کاربردیتون
سپاسگزارم
سلام
لطفاً یکی که وقت داره و میتونه یه رباط ساده برای من بسازه. فقط میخوام دکمه داشته باشه و با زدن دکمه های مختلف متون مختلف یا عکس یا صدا یا فرمتهای دیگه بفرسته. زیادم نمیخوام شلوغ باشه. نحوه ساخت و یا حالت ساده ش رو بسازید بفرستید ممنون میشم.
سلام. چه امکاناتی مد نظر دارید؟
سلام
من با php یه کدی نوشتم که به برای ربات getupdates بکنه و به پیغام ها جواب بده
دو تا مشکل وجود داره
اول این که هر بار که کد اجرا میشه، دو باره به پیغام های قبلی که قبلا پاسخ داده باز پاسخ میده
دوم اینکه به پیغام هایی که تو گروه فرستاده شده پاسخ نمیده اصلا
ایراد از کجاست
چه باید کرد؟
ممنون میشم زود پاسخ بدید
سوالتون کاملا نا مفهوم هشتش این یادداشت مربوط به پایتون هستش لطفا سوالتون رو دقیق تر مطرح کنید. در صورتی که مرتبط با موضوع مطلب هستش
ممنون از شما و سایت خوبتون
مطالب بسیار پرمحتوایی دارید.
ممنون
موفق باشید