לדלג לתוכן

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

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

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

שלב ראשון - יצירת האפליקציה בפורטל המפתחים

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

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

שלב שני - ההתקנה והחיבור הראשון

discord.py היא הספרייה שרוב הקהילה משתמשת בה. מתקינים אותה עם pip, ובונים שלד בסיסי:

import discord
from discord.ext import commands

intents = discord.Intents.default()
intents.message_content = True

bot = commands.Bot(command_prefix="!", intents=intents)

@bot.event
async def on_ready():
    print(f"מחובר בתור {bot.user}")

bot.run("הטוקן שלכם")

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

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

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

@bot.command()
async def roll(ctx):
    import random
    await ctx.send(f"יצא לך {random.randint(1, 6)}")

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

שלב רביעי - תכונה אחת שימושית באמת

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

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

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

שלב חמישי - איך מארחים את הבוט

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

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

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

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

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