Skip to content

בוט טלגרם ללימוד Python, מוכן לפריסה ברנדר - #1

Open
YoniLabell wants to merge 2 commits into
mainfrom
claude/telegram-python-bot-kwotzv
Open

YoniLabell wants to merge 2 commits into
mainfrom
claude/telegram-python-bot-kwotzv

Conversation

@YoniLabell

Copy link
Copy Markdown
Owner

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

פריסה ברנדר בלי הגדרה ידנית

main.py מזהה את RENDER_EXTERNAL_URL שרנדר מזריקה, נרשם מול טלגרם כ-webhook ומאזין על PORT. בלי המשתנה הזה הוא עובר אוטומטית ל-polling, כך שאותו קוד רץ גם בפיתוח מקומי. render.yaml מגדיר את השירות כ-Blueprint, ונשאר רק למלא את הטוקן מ-BotFather בדשבורד.

מה יש בבוט

  • שיעורים וניווט בכפתורי inline: הסבר, דוגמת קוד, תרגיל, רמז, פתרון וחידון.
  • בדיקת תרגילים: התלמיד שולח קוד בהודעה רגילה ומקבל משוב ממוקד.
  • מעקב התקדמות ב-SQLite. כל הגישות ל-DB רצות מחוץ ללולאת האירועים כדי לא לחסום את הבוט.
  • מורה חכם מבוסס Claude לשאלות חופשיות ולבדיקת תרגילים. אופציונלי: בלי ANTHROPIC_API_KEY הבוט נופל בעדינות לבדיקה היוריסטית, וכל החומר נשאר זמין במלואו.
  • הרצת קוד של התלמיד בתת-תהליך עם מגבלות זמן CPU, זיכרון, גודל פלט וכתיבה לקבצים, וחסימת ייבוא מודולים רגישים. כבויה כברירת מחדל.

בדיקות

127 בדיקות עוברות (python -m pytest). הן מקמפלות את כל דוגמאות הקוד והפתרונות, מריצות כל פתרון שיש לו פלט מצופה ומשוות אליו, מוודאות שכל הודעה שהבוט שולח היא HTML חוקי לטלגרם ומתחת למגבלת האורך, ובודקות שכל כפתור מוביל לפעולה קיימת ושה-callback_data נשאר מתחת ל-64 בתים.

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

נקודות לתשומת לב לפני מיזוג

  • ENABLE_CODE_RUNNER מריץ קוד שנשלח מטלגרם על השרת. ההגבלות שבקוד הן שכבות הגנה, לא בידוד מלא. הוא כבוי כברירת מחדל, וה-README ממליץ על קונטיינר ייעודי ללא גישת רשת להפעלה ציבורית.
  • התוכנית החינמית ברנדר נרדמת אחרי חוסר פעילות, ולכן ההודעה הראשונה אחרי שינה מתעכבת. אין בה דיסק קבוע, ולכן ההתקדמות נמחקת בכל דיפלוי אלא אם ממפים Disk ומגדירים DATA_DIR.
  • ענף הבסיס main נוצר בשביל ה-PR הזה. הריפו היה ריק לגמרי, אז אין מול מה להשוות. main הוא commit ריק, וברירת המחדל של הריפו עדיין מצביעה על ענף הפיתוח. כדאי להעביר אותה ל-main בהגדרות הריפו אחרי המיזוג.

🤖 Generated with Claude Code

https://claude.ai/code/session_012Bf46SdpBT3AF138X9i5Uo


Generated by Claude Code

בוט בעברית שמלמד Python מאפס: 12 שיעורים עם הסבר, דוגמת קוד, תרגיל וחידון,
כולל מעקב התקדמות לכל משתמש.

- main.py בוחר webhook או polling לפי RENDER_EXTERNAL_URL, כך שאותו קוד רץ
  ברנדר ובפיתוח מקומי בלי שינוי
- render.yaml מגדיר את השירות כ-Blueprint לפריסה בלחיצה אחת
- התקדמות, ציוני חידונים ורצף יומי נשמרים ב-SQLite, מחוץ ללולאת האירועים
- מורה חכם מבוסס Claude ל-/ask ולבדיקת תרגילים, אופציונלי; בלי מפתח API
  הבוט נופל בעדינות לבדיקה היוריסטית וכל החומר נשאר זמין
- הרצת קוד תרגילים בתת-תהליך עם מגבלות CPU, זיכרון וכתיבה, כבויה כברירת מחדל
- 127 בדיקות: קומפילציה של כל דוגמאות הקוד, התאמת פלט הפתרונות, תקינות ה-HTML
  של כל הודעה שנשלחת, וכיסוי לכל כפתור במקלדות

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012Bf46SdpBT3AF138X9i5Uo
מקשר את שתי ההיסטוריות כדי שה-pull request יציג diff מלא מול main.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012Bf46SdpBT3AF138X9i5Uo
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants