ربات های سخنگو خودکار برای تحریک تعاملات بسیار مفید هستند، همچنین ما می توانیم ربات های چت برای Slack، Discord و دیگر پلتفرم ها ایجاد کنیم که در این مقاله به نحوه ساخت ربات تلگرام با استفاده از زبان پایتون خواهیم پرداخت.
در این مقاله به شما آموزش می دهیم که چگونه یک ربات سخنگو تلگرام به زبان پایتون بسازید که طالع بینی و فال شما را به شما بگوید. بنابراین، بیایید شروع کنیم!
چگونه توکن ربات خود را دریافت کنید
در اولین مرحله از مقاله نحوه ساخت ربات تلگرام با استفاده از زبان پایتون به نحوه ساخت ربات و دریافت توکن از ربات بات فادر خواهیم پرداخت.
برای راه اندازی یک ربات جدید، باید با BotFather کار کنید. نه، او یک شخص نیست – او همچنین یک ربات است و او رئیس تمام ربات های تلگرام است.
- @botfather را در تلگرام جستجو کنید.
- با کلیک بر روی دکمه Start مکالمه را با BotFather شروع کنید.
- /newbot را تایپ کنید و دستورات را دنبال کنید تا یک ربات جدید راه اندازی کنید. BotFather یک توکن به شما می دهد که از آن برای احراز هویت ربات خود استفاده می کنید و به آن اجازه دسترسی به API تلگرام را می دهید.
چگونه محیط کدنویسی خود را تنظیم کنید
بیایید محیط کدنویسی را تنظیم کنیم. در حالی که کتابخانه های مختلفی برای ایجاد ربات تلگرام در دسترس است، ما از کتابخانه pyTelegramBotAPI استفاده خواهیم کرد. این یک پیادهسازی ساده اما قابل توسعه پایتون برای API ربات تلگرام با قابلیتهای sync و async است.
کتابخانه pyTelegramBotAPI را با استفاده از pip نصب کنید :
pip install pyTelegramBotAPI
سپس، ویرایشگر کد مورد علاقه خود را باز کنید و یک فایل .env ایجاد کنید تا توکن خود را به صورت زیر ذخیره کنید :
export BOT_TOKEN=your-bot-token-here
پس از آن، دستور source .env را اجرا کنید تا متغیرهای محیطی را از فایل env. بگیرید.
چگونه اولین ربات پایتون خود را در تلگرام بسازیم
در این مرحله از مقاله نحوه ساخت ربات تلگرام با استفاده از زبان پایتون به نحوه ساخت ابتدایی کد های ربات تلگرامی به زبان پایتون خواهیم پرداخت.
تمام پیاده سازی های API در یک کلاس به نام TeleBot ذخیره می شوند. راههای زیادی برای گوش دادن به پیامهای دریافتی و همچنین توابعی مانند send_message()، send_document() و موارد دیگر برای ارسال پیام ارائه میدهد.
یک فایل bot.py جدید ایجاد کنید و کد زیر را در آنجا قرار دهید :
import os
import telebot
BOT_TOKEN = os.environ.get('BOT_TOKEN')
bot = telebot.TeleBot(BOT_TOKEN)
در کد بالا از کتابخانه os برای خواندن متغیرهای محیط ذخیره شده در سیستم خود استفاده می کنیم.
اگر به خاطر داشته باشید، در مرحله قبل یک متغیر محیطی به نام BOT_TOKEN را صادر کردیم. مقدار BOT_TOKEN در متغیری به نام BOT_TOKEN خوانده می شود. علاوه بر این، ما از کلاس TeleBot برای ایجاد یک نمونه ربات استفاده می کنیم و BOT_TOKEN را به آن ارسال می کنیم.
سپس باید کنترل کننده های پیام را ثبت کنیم. این کنترل کننده های پیام حاوی فیلترهایی هستند که پیام باید از آنها عبور کند. اگر پیامی از فیلتر عبور کند، تابع فراخوانی می شود و پیام ورودی به عنوان آرگومان ارائه می شود.
بیایید یک کنترل کننده پیام تعریف کنیم که دستورات /start و /hello ورودی را کنترل کند.
@bot.message_handler(commands=['start', 'hello'])
def send_welcome(message):
bot.reply_to(message, "Howdy, how are you doing?")
هر نامی برای تابعی که توسط یک کنترل کننده پیام است قابل قبول است، اما فقط می تواند یک پارامتر (پیام) داشته باشد.
بیایید یک کنترل کننده دیگر اضافه کنیم که همه پیام های متنی دریافتی را به فرستنده بازتاب می دهد.
@bot.message_handler(func=lambda msg: True)
def echo_all(message):
bot.reply_to(message, message.text)
کد بالا از یک عبارت لامبدا برای آزمایش یک پیام استفاده می کند. از آنجایی که باید همه پیامها را بازتاب دهیم، همیشه True را از تابع لامبدا برمیگردانیم.
اکنون یک ربات ساده دارید که به دستورات /start و /hello با یک پیام ثابت پاسخ می دهد و همه پیام های ارسالی دیگر را بازتاب می دهد. برای راه اندازی ربات موارد زیر را به انتهای فایل خود اضافه کنید :
bot.infinity_polling()
خودشه! ما یک ربات تلگرام آماده داریم. بیایید فایل پایتون را اجرا کنیم و برای تست ربات به تلگرام برویم.
اگر ربات را پیدا نکردید با استفاده از نام کاربری آن جستجو کنید. می توانید با ارسال دستوراتی مانند /hello و /start و سایر متون تصادفی آن را آزمایش کنید.
برای اطلاعات بیشتر در مورد استفاده از کتابخانه pyTelegramBotAPI، می توانید به مستندات کتابخانه pyTelegramBotAPI مراجعه کنید.
نحوه کدنویسی ربات فالگیر به زبان پایتون
بیایید اکنون و در اینجای مقاله ی نحوه ساخت ربات تلگرام با استفاده از زبان پایتون توجه خود را به ساخت ربات فال خود معطوف کنیم. ما از زنجیره پیام در ربات استفاده خواهیم کرد. ربات ابتدا علامت زودیاک شما و سپس روز را می پرسد و سپس با فال آن روز خاص پاسخ می دهد.
در پشت قضایا، ربات با یک API تعامل می کند تا داده های فال را دریافت کند. ما قصد داریم از Horoscope API استفاده کنیم.
چگونه داده های فالگیر را واکشی یا fetch کنیم
بیایید یک تابع کاربردی برای واکشی داده های فال برای یک روز خاص ایجاد کنیم.
import requests
def get_daily_horoscope(sign: str, day: str) -> dict:
"""Get daily horoscope for a zodiac sign.
Keyword arguments:
sign:str - Zodiac sign
day:str - Date in format (YYYY-MM-DD) OR TODAY OR TOMORROW OR YESTERDAY
Return:dict - JSON data
"""
url = "https://horoscope-app-api.vercel.app/api/v1/get-horoscope/daily"
params = {"sign": sign, "day": day}
response = requests.get(url, params)
return response.json()
در کد پایتون بالا، تابعی ایجاد کردیم که دو آرگومان رشته ای – sign و day – را می پذیرد و داده های JSON را برمی گرداند. ما یک درخواست GET در URL API ارسال می کنیم و علامت و روز را به عنوان پارامترهای کوئری ارسال می کنیم.
اگر تابع را تست کنید، خروجی مشابه زیر دریافت خواهید کرد :
{
"data":{
"date": "Dec 15, 2022",
"horoscope_data": "Lie low during the day and try not to get caught up in the frivolous verbiage that dominates the waking hours. After sundown, feel free to speak your mind. You may notice that there is a sober tone and restrictive sensation today that leaves you feeling like you will never be able to break free from your current situation. Don't get caught in this negative mindset."
},
"status": ۲۰۰,
"success": true
}
نحوه اضافه کردن یک کنترل کننده پیام
اکنون که تابعی داریم که داده های فال را برمی گرداند، بیایید یک کنترل کننده پیام در ربات خود ایجاد کنیم که علامت زودیاک کاربر را می خواهد.
@bot.message_handler(commands=['horoscope'])
def sign_handler(message):
text = "What's your zodiac sign?\nChoose one: *Aries*, *Taurus*, *Gemini*, *Cancer,* *Leo*, *Virgo*, *Libra*, *Scorpio*, *Sagittarius*, *Capricorn*, *Aquarius*, and *Pisces*."
sent_msg = bot.send_message(message.chat.id, text, parse_mode="Markdown")
bot.register_next_step_handler(sent_msg, day_handler)
تابع فوق با توابع دیگری که قبلا تعریف کردیم کمی متفاوت است. عملکرد طالع بینی ربات با دستور /horoscope فراخوانی می شود. ما در حال ارسال یک پیام متنی برای کاربر هستیم، اما توجه داشته باشید که هنگام ارسال پیام، parse_mode را روی Markdown قرار داده ایم.
از آنجایی که از زنجیره پیام استفاده خواهیم کرد، از متد register_next_step_handler() استفاده کردیم. این روش دو پارامتر را می پذیرد :
- پیام ارسال شده توسط کاربر
- تابع callback که باید بعد از پیام فراخوانی شود
بنابراین، متغیر sent_msg و یک تابع day_handler جدید را که در ادامه تعریف خواهیم کرد، ارسال می کنیم.
بیایید تابع ()day_handler را تعریف کنیم که پیام را می پذیرد.
def day_handler(message):
sign = message.text
text = "What day do you want to know?\nChoose one: *TODAY*, *TOMORROW*, *YESTERDAY*, or a date in format YYYY-MM-DD."
sent_msg = bot.send_message(
message.chat.id, text, parse_mode="Markdown")
bot.register_next_step_handler(
sent_msg, fetch_horoscope, sign.capitalize())
ما علامت زودیاک را از ویژگی message.text دریافت می کنیم. مشابه عملکرد قبلی، روزی را که می خواهید فال را بدانید نیز می پرسد.
در پایان از همان متد register_next_step_handler() استفاده می کنیم و send_msg، تابع fetch_horoscope callback و علامت را ارسال می کنیم.
اکنون تابع fetch_horoscope() را تعریف می کنیم که پیام و علامت را می پذیرد.
def fetch_horoscope(message, sign):
day = message.text
horoscope = get_daily_horoscope(sign, day)
data = horoscope["data"]
horoscope_message = f'*Horoscope:* {data["horoscope_data"]}\\n*Sign:* {sign}\\n*Day:* {data["date"]}'
bot.send_message(message.chat.id, "Here's your horoscope!")
bot.send_message(message.chat.id, horoscope_message, parse_mode="Markdown")
این تابع نهایی است که در آن علامت را از پارامتر تابع و روز را از ویژگی message.text دریافت می کنیم.
بعد، با استفاده از تابع get_daily_horoscope() فال را واکشی می کنیم و پیام خود را می سازیم. در پایان پیام را با داده های فال ارسال می کنیم.
گام های بعدی توصیه شده برای اجرا و ساخت ربات
در حال حاضر، به محض توقف برنامه پایتون، ربات کار خود را متوقف می کند. برای اینکه همیشه اجرا شود، میتوانید ربات را در پلتفرمهایی مانند Heroku، Render و غیره مستقر کنید.
در اینجا پیوندی به مخزن GitHub برای این پروژه وجود دارد – با خیال راحت آن را بررسی کنید. همچنین می توانید با کاوش در API های تلگرام، قابلیت های بیشتری را به ربات اضافه کنید.
یکی دیگر از مجموعه آموزش های نرم افزار به اتمام رسید. امیدواریم این آموزش به جهت یادگیری و شناخت نحوه ساخت ربات تلگرام با استفاده از زبان پایتون برای شما عزیزان مفید واقع شده باشد؛ اگر شما نیز آموزش خاص یا سورس کد ربات خاصی به زبان پایتون را، میدانید میتوانید آن را در بخش کامنت ها مطرح کنید تا با نام شما این مقاله بروزرسانی گردد.