לדלג לתוכן

בונים בוט טלגרם משלכם בפייתון - הפרויקט שסוף סוף יגרום לכם להרגיש מתכנתים

יש רגע מסוים בלמידת תכנות שבו כל התרגילים המלאכותיים - "תחשבו ממוצע של רשימה", "תדפיסו את מספרי פיבונאצ'י" - פתאום מרגישים משעממים. אתם רוצים לבנות משהו שאפשר לשלוח לחבר, שהוא ילחץ עליו, ופתאום קורה קסם. בוט טלגרם הוא בדיוק זה. הוא רץ בענן, מגיב בזמן אמת, ואפשר לגעת בו מהטלפון. ובניגוד למה שנדמה, הוא לא מסובך לבנייה. בואו נעבור על זה שלב אחרי שלב.

מה זה בכלל בוט טלגרם

בוט טלגרם הוא בסך הכל תוכנית פייתון שיושבת אצלכם (או בשרת) ומדברת עם שרתי טלגרם. כשמישהו שולח הודעה לבוט, טלגרם מעביר לכם את ההודעה, אתם מחליטים איך להגיב, ושולחים תשובה בחזרה. אין כאן שום קסם - זו בקשה ותשובה, בדיוק כמו כל תקשורת בין שני מחשבים.

שלב ראשון - מקבלים טוקן מ-BotFather

כל בוט בטלגרם נרשם דרך בוט מיוחד שנקרא BotFather. פותחים איתו שיחה, שולחים לו /newbot, נותנים לבוט שם ושם משתמש (חייב להסתיים ב-bot), והוא מחזיר לכם טוקן - מחרוזת ארוכה שמזהה את הבוט שלכם באופן ייחודי. הטוקן הזה הוא בעצם הסיסמה של הבוט. אסור להעלות אותו לגיטהאב, ואסור לשתף אותו - מי שמחזיק בטוקן שולט בבוט לגמרי.

הדרך הנכונה לשמור אותו היא בקובץ סביבה (.env) שלא נכנס לבקרת גרסאות, ולא בתוך הקוד עצמו בגלוי.

שלב שני - מתקינים ספרייה ומתחברים

הספרייה הפופולרית ביותר לעבודה עם טלגרם בפייתון היא python-telegram-bot. מתקינים אותה עם pip, ומייבאים אותה כדי לבנות אפליקציית בוט בסיסית. המבנה הכללי נראה כך:

from telegram.ext import ApplicationBuilder, CommandHandler

async def start(update, context):
    await update.message.reply_text("היי! אני בוט. שלחו לי /joke לבדיחה")

app = ApplicationBuilder().token("הטוקן שלכם").build()
app.add_handler(CommandHandler("start", start))
app.run_polling()

זהו. זה כבר בוט חי. הוא מקשיב לפקודת /start ומגיב עליה.

שלב שלישי - מוסיפים פקודות אמיתיות

עכשיו מגיע החלק הכיפי. פקודה היא כל הודעה שמתחילה ב-/, כמו /joke, /remind או /weather. לכל פקודה בונים פונקציה נפרדת ומחברים אותה עם CommandHandler נוסף. אם אתם בונים בוט תזכורות, תצטרכו גם לטפל בטקסט חופשי (לא רק פקודות) ולשמור מידע בין הודעה להודעה - למשל באיזה שלב בתהליך המשתמש נמצא. זה בדיוק המקום שבו לומדים להשתמש במשתנים, במילונים ובתנאים בצורה שממש עושה משהו, ולא רק פותרת תרגיל בספר.

בונים בוט בדיחות? שומרים רשימת בדיחות ובוחרים אחת רנדומלית. בונים בוט תזכורות? שומרים את הזמן שהמשתמש ביקש ובודקים כל דקה אם הגיע הזמן להזכיר לו. הרעיון הוא להתחיל קטן - פקודה אחת שעובדת מקצה לקצה - ורק אז להוסיף עוד.

הטעות הכי נפוצה - מנסים לבנות הכל בבת אחת

מתחילים רבים ניגשים לבוט עם רשימת פיצ'רים ארוכה ומנסים לכתוב את כולם לפני שהם בודקים אם משהו בכלל עובד. במקום זה, תכתבו פקודה אחת, תריצו, תשלחו לה הודעה בטלגרם, ותוודאו שהיא מגיבה. רק אחרי שזה עובד - מוסיפים את הבאה. זו בדיוק הגישה שמלמדים גם בקורס תכנות בסיסי החינמי שלנו, שבו בונים פרויקטים קטנים צעד אחר צעד במקום לקפוץ ישר לפרויקט ענק ולהיתקע.

איך מריצים את הבוט כדי שהוא יישאר חי

בזמן הפיתוח, run_polling() מספיק - הוא רץ במחשב שלכם ובודק כל כמה שניות אם יש הודעות חדשות. הבעיה היא שברגע שסוגרים את הטרמינל, הבוט מת. כדי שהוא ירוץ באמת, יש כמה אפשרויות: להריץ אותו על שרת קטן וזול (כמו VPS), להשתמש בשירות אחסון חינמי לפרויקטים קטנים, או להריץ אותו כתהליך רקע במחשב שדולק תמיד. לכל אחת מהאפשרויות יש יתרונות וחסרונות, אבל לצורך למידה - גם הרצה במחשב האישי שלכם, כל עוד הוא פתוח, מספיקה כדי להבין את כל התהליך.

מה מקבלים מהפרויקט הזה

מעבר לבוט שעובד, אתם יוצאים מהפרויקט הזה עם הבנה מעשית של קריאות ל-API חיצוני, טיפול באירועים אסינכרוניים, וניהול מצב בין הודעות - שלושה נושאים שחוזרים כמעט בכל פרויקט תכנות אמיתי, לא רק בבוטים.

אם הפרויקט הזה נשמע לכם מרתק אבל אתם עדיין לא בטוחים שיש לכם את הבסיס להתחיל אותו, בקורס תכנות בסיסי החינמי שלנו לומדים את כל היסודות בפייתון - משתנים, תנאים, פונקציות ועבודה עם ספריות - ומגיעים לפרויקטים כאלה בביטחון מלא. התחילו את קורס התכנות הבסיסי כאן

הצטרפו לקהילה בדיסקורד