على حبري ، وليس هذا فحسب ، لقد قيل الكثير عن البوتات لدرجة أنه أكثر من اللازم. لكن بعد أن أصبحت مهتمة بهذا الموضوع قبل أسبوعين ، لم أتمكن من العثور على مادة عادية: كانت جميع المقالات إما مخصصة للدمى على الإطلاق وكانت مقصورة على إرسال رسالة استجابةً لرسالة مستخدم ، أو كانت غير ذات صلة. دفعني هذا إلى كتابة مقالة تشرح للمبتدئ مثلي كيفية الكتابة وإطلاق روبوت أكثر أو أقل معنى (مع إمكانية توسيع الوظيفة).
الجزء 1: تسجيل روبوت
الجزء الأبسط والأكثر وصفًا. باختصار شديد: تحتاج إلى العثور على
botFather @ bot ،
وكتابته / start ، أو
/ newbot ،
وقم بملء الحقول التي يسألها (اسم
الروبوت واسمه المختصر) ، واحصل على رسالة تحتوي على رمز bot ورابط إلى الوثائق. يجب حفظ الرمز المميز ، ويُفضل أن يكون موثوقًا به ، لأن هذا هو المفتاح الوحيد لترخيص الروبوت والتفاعل معه.
الجزء 2: التحضير لكتابة التعليمات البرمجية
كما سبق ذكره في العنوان ، سنكتب الروبوت في بيثون. توضح هذه المقالة كيفية العمل مع مكتبة PyTelegramBotAPI (Telebot). إذا لم يكن Python مثبتًا لديك ، فأنت بحاجة أولاً إلى القيام بذلك: في محطة Linux ، تحتاج إلى الدخول
sudo apt-get install python python-pip
إذا كنت تستخدم Windows ، فأنت بحاجة إلى تنزيل Python من الموقع الرسمي.
بعد ذلك ، في محطة Linux أو موجه أوامر Windows ، أدخل
pip install pytelegrambotapi
أنت الآن جاهز لكتابة الرمز.
الجزء 3: تلقي الرسائل ونقول "مرحبا"
استطراد صغير. يمكن للبرق أن يخبر الروبوت عن إجراءات المستخدم بطريقتين: من خلال الاستجابة لطلب الخادم (Long Poll) ، ومن خلال Webhook ، عندما يرسل خادم Telegram نفسه رسالة كتبها شخص ما إلى الروبوت. من الواضح أن الطريقة الثانية تبدو أفضل ، ولكنها تتطلب عنوان IP مخصصًا ، ويتم تثبيت SSL على الخادم. في هذه المقالة أريد أن أتحدث عن كتابة روبوت ، وليس إعداد خادم ، لذلك سنستخدم Long Poll.افتح محرر النصوص المفضل لديك ، ودعنا نكتب رمز الروبوت!
أول شيء فعله هو استيراد مكتبتنا وتوصيل الرمز المميز للبوت:
import telebot; bot = telebot.TeleBot('% %');
أعلن الآن طريقة لتلقي الرسائل النصية:
@bot.message_handler(content_types=['text']) def get_text_messages(message):
في هذا القسم من الشفرة ، أعلنا مستمعًا للرسائل النصية وطريقة معالجتها. يمكن أن يأخذ حقل content_types قيمًا مختلفة ، وليس واحدة فقط ، على سبيل المثال
@bot.message_handler(content_types=['text', 'document', 'audio'])
سوف تستجيب للرسائل النصية والوثائق والصوت. يمكن الاطلاع على مزيد من التفاصيل في
الوثائق الرسمية.سنقوم الآن بإضافة القليل من الوظائف إلى طريقتنا: إذا كتب المستخدم "Hello" إلينا ، فسنقول "Hello ، كيف يمكنني مساعدتك؟" ، وإذا كتبوا لنا الأمر "/ help" ، فسوف نطلب من المستخدم كتابة "Hello":
if message.text == "": bot.send_message(message.from_user.id, ", ?") elif message.text == "/help": bot.send_message(message.from_user.id, " ") else: bot.send_message(message.from_user.id, " . /help.")
هذا الجزء من الكود لا يحتاج إلى تعليقات ، كما يبدو لي. نحتاج الآن إلى إضافة سطر واحد فقط إلى الكود الخاص بنا (خارج كل الطرق).
bot.polling(none_stop=True, interval=0)
الآن سوف يسأل برنامج الروبوت الخاص بنا باستمرار خادم Telegram "هل كتب لي أحدهم؟" وإذا كتبنا إلى برنامج الروبوت الخاص بنا ، فسيقوم Telegram بإرسال رسالتنا. نحن نحفظ الملف بأكمله ، والكتابة في وحدة التحكم
python bot.py
حيث bot.py هو اسم ملفنا.
الآن يمكنك كتابة روبوت وإلقاء نظرة على النتيجة:
الجزء 4: أزرار المواضيع والرسالة
يعد إرسال الرسائل أمرًا ممتعًا بلا شك ، لكنه أكثر متعة في إجراء حوار مع المستخدم: اطرح عليه أسئلة واحصل على إجابات عليها. لنفترض الآن أن برنامجنا سوف يطلب من المستخدم بدوره اسمه واللقب والعمر. لهذا سوف نستخدم طريقة register_ext_step_handler الخاصة بالبوت:
name = ''; surname = ''; age = 0; @bot.message_handler(content_types=['text']) def start(message): if message.text == '/reg': bot.send_message(message.from_user.id, " ?"); bot.register_next_step_handler(message, get_name);
وهكذا ، سجلنا بيانات المستخدم. يوضح هذا المثال مثالًا مبسطًا للغاية ، للأبد ، تحتاج إلى تخزين بيانات وسيطة وحالات مستخدمين في قاعدة البيانات ، لكننا نعمل اليوم مع بوت وليس مع قواعد البيانات. اللمسة الأخيرة - نطلب من المستخدمين تأكيد إدخال كل شيء بشكل صحيح ، ولكن ليس بهذه الطريقة فحسب ، بل باستخدام الأزرار! للقيام بذلك ، قم بتعديل رمز أسلوب get_age قليلاً
def get_age(message): global age; while age == 0:
والآن يقوم برنامج الروبوت الخاص بنا بإرسال لوحة المفاتيح ، ولكن إذا قمت بالنقر فوقها ، فلن يحدث شيء. لأننا لم نكتب طريقة معالج. دعنا نكتب:
@bot.callback_query_handler(func=lambda call: True) def callback_worker(call): if call.data == "yes": #call.data callback_data, .... # , bot.send_message(call.message.chat.id, ' : )'); elif call.data == "no": ... #
يبقى فقط إلحاق سطر واحد إلى بداية الملف:
from telebot import types
هذا كل شيء ، حفظ وتشغيل الروبوت لدينا: