היום אני אלמד אותך כיצד לתכנת א לוע סעיף IRC. קודם כל, למי שלא יודע, בוט הוא תוכנית שמתחברת לערוץ IRC ומתקשרת איתו, ומאפשרת לנו למשל למתן את הערוץ בלי שאנחנו מחוברים וכך להימנע מדואר זבל, או שהוא מזהה סדרה של הזמנות ומבצע את הקוד המתאים.
למרות שכבר יש בוטים מוכנים, אני באמת אחד מאלה שאוהבים להכין תוכניות משלהם ללמוד ואת הסיפוק הרב שהוא נותן לנו לאחר שראיתי שזה עובד ^^
עם זאת, בואו נעבור להדרכה.
כדי לתכנת את הבוט נצטרך a עורך טקסט רגיל cualquiera (ננו, gedit, medit וכו ') ו - מתורגמן פיתון (2.6 או 2.7 יהיה צורך, לא עובד עם פיתון 3.x).
ראשית אנו מייבאים את מודולים נדרשים, במקרה זה נצטרך רק שניים:
[קוד] #! / usr / bin / env פיתון# - * - קידוד: utf-8 - * -
שקע יבוא
ייבוא מחרוזת
[/ קוד]
עכשיו אנחנו ממשיכים ל להגדיר הבוט:
[קוד] HOST=»irc.desdelinux.נֶטוֹ"נמל = 6667
NICK = »CalicoBot»
IDENT = »CalicoBot»
REALNAME = »CalicoBot»
CHAN = »# בית»
readbuffer = »»
[/ קוד]
אסביר על כל משתנה:
- HOST: כתובת ה- URL של השרת אליו נתחבר
- נמל: יציאת השרת. כברירת מחדל הוא 6667.
- NICK, IDENT ו- REALNAME: הם תואמים את הכינוי של הבוט, את הזיהוי שלו ואת השם האמיתי.
- צ'אן: הערוץ שהבוט יכנס אליו
- מאגר קריאה: במשתנה זה הנתונים שנשלחו על ידי השרת יישמרו.
לאחר הגדרת הבוט שלנו אנו ממשיכים ל הקשר
[code] s = socket.socket ()s.connect ((HOST, PORT))
s.send ("NICK% s \ r \ n"% NICK)
s.send ("USER% s% s bla:% s \ r \ n"% (IDENT, Host, REALNAME))
s.send ("JOIN:% s \ r \ n"% CHAN)
[/ קוד]
בשורה הראשונה אין הרבה מסתורין, השנייה יוצרת את חיבור שרת ושלושת האחרונים שולחים את נתוני הבוט לשרת כדי להמשיך בכניסה.
לאחר החיבור ניצור לולאה אינסופית שאליו נלך קבלת ושליחת נתונים מ / אל השרת:
[קוד] בעוד 1:readbuffer = readbuffer + s.recv (1024)
temp = string.split (readbuffer, "\ n")
readbuffer = temp.pop ()
לתור בטמפ ':
קו = string.rstrip (שורה)
line = line.split (CHAN + ':')
אם שורה [0] .find ("PING")! = -1:
pingid = שורה [0]. split () [1] s.send ("PONG% s \ r \ n"% pingid)
[/ קוד]
מכל השורות שנכתבו לעיל אתייחס רק לחשובות.
עם line = line.split (CHAN + ':') מה שאנחנו עושים זה לחלק את מה שהשרת שולח אלינו מתי בוא ניקח משהו מהערוץ.
למשל השורה הבאה מציינת שמישהו כתב משהו בערוץ:
:son_link!sonlink@127.0.0.1 PRIVMSG #Home :Hola ^^
הדבר הראשון הוא כינוי המשתמש ונתוני החיבור שלו (מופרדים על ידי!), הפקודה (במקרה זה היא מציינת שהוא כתב), הערוץ ולבסוף, אחרי המעי הגס, ההודעה שנשלחה. אני לא אסביר עוד הרבה פקודות מכיוון שזה לא נכלל במדריך זה.
הקווים החשובים האחרים הם אלה הם אחרי ה- if. השרת שולח כל פעם את פקודת PING כדי לבדוק אם המשתמש עדיין מחובר. במקרה כזה הבוט שולח את פקודת PONG עם מזהה ש PING שלח כדי לציין לשרת שהוא עדיין מחובר.
עם זה כבר יש לנו את הבסיס של הבוט. כעת אמשיך להסביר כיצד לגרום לבוט להגיב כפי שאנו רוצים לפקודות מסוימות, בין אם מ-IRC עצמו או ממשתמשים.
בתגובה לפקודות IRC:
PING ו- PRIVMSG הם דוגמאות לפקודות IRC. ישנן פקודות רבות, אך כפי שאמרתי קודם, זה דבר שלא אפרט עליו.
לדוגמא, אנו יכולים לגרום לבוט לומר שלום למשתמשים שמתחברים:
name = line [0] .split ('!') [0] .split (':') [1] if name! = NICK and name.find (HOST) == -1:
s.send ("PRIVMSG% s: ברוך הבא @% s ^^ \ n"% (CHAN, שם))
[/ קוד]
ראשית אנו בודקים אם השרת שולח את הפקודה להצטרף מה שמציין שמישהו התחבר לשרת. ואז אנו מחלצים את הכינוי, אנו בודקים שהניק אינו כתובת ה- IRC (אם לא ברגע שנפעיל את הבוט הוא יברך את כתובת האתר) ולבסוף אנו שולחים את הודעת הברכה.
פקודות בוט:
עכשיו איך אוכל ליצור את הבוט שלי להגיב לפקודות שלי? בואו נסתכל על דוגמה:
[קוד] אם שורה [1] == 'גרסת $':s.send («PRIVMSG% s: CalicoBot 0.1.2 (c) 2012 Son Link \ n»% CHAN)
[/ קוד]
בדוגמה זו אם מישהו כותב גרסת $ הבוט יציג את ההודעה המציינת את שמו, גרסתו ומחברו. הקוד השלם של הדוגמה הוא זה:
שקע ייבוא [קוד]ייבוא מחרוזת
HOST = »localhost»
נמל = 6667
NICK = »CalicoBot»
IDENT = »CalicoBot»
REALNAME = »CalicoBot»
CHAN = »# בית»
readbuffer = »»
s = socket.socket ()
s.connect ((HOST, PORT))
s.send ("NICK% s \ r \ n"% NICK)
s.send ("USER% s% s bla:% s \ r \ n"% (IDENT, Host, REALNAME))
s.send ("JOIN:% s \ r \ n"% CHAN)
ואילו 1:
readbuffer = readbuffer + s.recv (1024)
temp = string.split (readbuffer, "\ n")
readbuffer = temp.pop ()
לתור בטמפ ':
קו הדפסה
קו = string.rstrip (שורה)
line = line.split (CHAN + ':')
אם שורה [0] .find ("PING")! = -1:
pingid = שורה [0]. split () [1] s.send ("PONG% s \ r \ n"% pingid)
אם שורה [0] .find ('JOIN')! = -1:
name = line [0] .split ('!') [0] .split (':') [1] if name! = NICK and name.find (HOST) == -1:
s.send ("PRIVMSG% s: ברוך הבא @% s ^^ \ n"% (CHAN, שם))
אם len (שורה) <1:
אם שורה [1] == 'גרסת $':
s.send («PRIVMSG% s: CalicoBot 0.1.2 (c) 2012 Son Link \ n»% CHAN)
[/ קוד]
אני מקווה שאהבתם את המדריך הזה, וכמובן שאשאיר לכם את הקישור לקוד של הבוט שלי כדי שתוכלו לראות את הקוד שלו במלואו ותוכלו לראות טוב יותר איך זה עובד (למרות שהסרתי כמה פקודות לשימוש אישי).