كيفية الحصول على توكن البوت الخاص بك
لإعداد بوت جديد، ستحتاج إلى التحدث إلى BotFather. لا، إنه ليس شخصًا - إنه أيضًا بوت وهو رئيس جميع بوتات Telegram.
- ابحث عن @botfather في Telegram.
2. ابدأ محادثة مع BotFather بالضغط على زر ابدأ.
3. اكتب /newbot
، واتبع المطالبات لإعداد بوت جديد. سيمنحك BotFather رمزًا مميزًا ستستخدمه لمصادقة بوت الخاص بك ومنحه حق الوصول إلى Telegram API.
ملاحظة: تأكد من تخزين الرمز المميز بشكل آمن. يمكن لأي شخص لديه حق الوصول إلى الرمز المميز الخاص بك التعامل بسهولة مع البوت الخاص بك.
إعداد بيئة الترميز الخاصة بك باستخدام pytelegrambotapi :
لنقم بإعداد بيئة البرمجة. على الرغم من وجود العديد من المكتبات المتاحة لإنشاء روبوت Telegram، فسنستخدم مكتبة pyTelegramBotAPI. إنه تطبيق Python بسيط ولكنه قابل للتوسيع لواجهة برمجة تطبيقات Telegram Bot مع إمكانات متزامنة وغير متزامنة.
قم بتثبيت مكتبة pyTelegramBotAPI باستخدام النقطة:
pip install pyTelegramBotAPI
بعد ذلك، افتح محرر التعليمات البرمجية المفضل لديك وقم بإنشاء ملف .env لتخزين الرمز المميز الخاص بك على النحو التالي:
export BOT_TOKEN=your-bot-token-here
بعد ذلك، قم بتشغيل الأمر .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)
في الكود أعلاه، نستخدم مكتبة نظام التشغيل لقراءة متغيرات البيئة المخزنة في نظامنا. إذا كنت تتذكر، فقد قمنا بتصدير متغير بيئة يسمى 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 من دالة lambda. لديك الآن روبوت بسيط يستجيب لأوامر /start و/hello برسالة ثابتة ويردد جميع الرسائل المرسلة الأخرى. أضف ما يلي إلى نهاية ملفك لتشغيل الروبوت:
bot.infinity_polling()
هذا كل شيء! لدينا بوت Telegram جاهز. لنقم بتشغيل ملف Python والانتقال إلى Telegram لاختبار الروبوت. ابحث عن الروبوت باستخدام اسم المستخدم الخاص به إذا لم تتمكن من العثور عليه. يمكنك اختباره عن طريق إرسال أوامر مثل /hello و/start ونصوص عشوائية أخرى
ملاحظة: يتم اختبار كافة معالجات الرسائل بالترتيب الذي تم الإعلان عنه في الملف المصدر. لمزيد من المعلومات حول استخدام مكتبة pyTelegramBotAPI، يمكنك الرجوع إلى وثائقهم. كيفية ترميز بوت الأبراج دعونا نحول انتباهنا إلى بناء روبوت الأبراج الخاص بنا الآن. سوف نستخدم تسلسل الرسائل في الروبوت. سيطلب منك الروبوت أولاً علامة البروج الخاصة بك، ثم اليوم، وبعد ذلك سوف يستجيب مع برجك لذلك اليوم المحدد. تحت الغطاء، يتفاعل الروبوت مع واجهة برمجة التطبيقات (API) للحصول على بيانات الأبراج. سنستخدم واجهة برمجة تطبيقات Horscope التي قمت بإنشائها في برنامج تعليمي آخر. إذا كنت ترغب في معرفة كيفية إنشاء واحد، يمكنك متابعة هذا البرنامج التعليمي. تأكد من استكشاف واجهات برمجة التطبيقات هنا قبل البدء. كيفية جلب بيانات برجك لنقم بإنشاء وظيفة مساعدة لجلب بيانات برجك ليوم معين
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()
في كود Python أعلاه، أنشأنا دالة تقبل وسيطتين لسلسلة - التوقيع واليوم - وتقوم بإرجاع بيانات 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": 200,
"success": true
}
ملاحظة: يمكنك استكشاف المزيد حول مكتبة الطلبات في Python في هذا البرنامج التعليمي. كيفية إضافة معالج الرسائل الآن بعد أن أصبح لدينا وظيفة تُرجع بيانات الأبراج، فلنقم بإنشاء معالج رسائل في الروبوت الخاص بنا الذي يطلب علامة البروج الخاصة بالمستخدم
@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)
تختلف الوظيفة المذكورة أعلاه قليلاً عن الوظائف الأخرى التي حددناها سابقًا. سيتم استدعاء وظيفة برجك في الروبوت من خلال الأمر /horscope. نحن نرسل رسالة نصية إلى المستخدم، ولكن لاحظ أننا قمنا بضبط parse_mode على Markdown أثناء إرسال الرسالة. وبما أننا سنستخدم تسلسل الرسائل، فقد استخدمنا طريقة Register_next_step_handler() . تقبل هذه الطريقة معلمتين: الرسالة المرسلة من قبل المستخدم ووظيفة رد الاتصال التي يجب استدعاؤها بعد الرسالة. وبالتالي، نقوم بتمرير المتغير send_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_horscope والعلامة. دعونا الآن نحدد الدالة fetch_horscope() التي تقبل الرسالة والعلامة
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_horscope() وإنشاء رسالتنا. في النهاية نرسل الرسالة مع بيانات برجك. عرض بوت بمجرد تشغيل ملف بايثون، يمكنك اختبار هذه الوظيفة.
اقرأ ايضا : إنشاء تطبيق اندرويد باستخدام لغة البرمجة بايثون: دليل تفصيلي لبناء تطبيقك الخاص
اقرأ ايضا : أفضل مكاتب بوتات تيليجرام باللغة بايثون