Logo

רד-בורד: ארכיון

ראשי > תיכנות > עזרה בבניית בוט ל IRC ב PERL

23/07/2006 22:25:05 sysctl
קוד:
#!/usr/bin/perl
use IO::Socket;
my $server = "irc.nix.co.il";
my $port = "6667";
my $nick = "ElfBot";
my $channel = "#ikp";
my $socket = new IO::Socket::INET(PeerAddr => $server, PeerPort => $port, Proto => "tcp") || die "Could not connect to:

$server";
while($read = <$socket>){
if($read =~ /^NOTICE/){
print $socket "NICK $nick\r\n";
}
else {
print "There is a problem at lines 8-10. ";
}
}
while($read =<$socket>){
if($read =~ /^PING/){
print $socket "PONG " . (split(/ :/, $read))[1]."\r\n";
print $socket "USER $nick ’b’ ’c’ :d\r\n"
}
}
while($read=<$socket>){
if($read =~ /^Welcome/){
print $socket "JOIN #ikp\r\n";
}
else{
print "There is a problem at lines 22-24";
}
}
close($socket);

לא פועל, אני מניח שהבעיה היא בכתיבה לסוקט. שמישהו יעזור לי :(
24/07/2006 10:19:14 tal
אני אומנם לא יודע perl אבל אני כן יכול לומר לך שישנה "בעייה" להתחבר לניקס.. אני צריך להמשיך לחקור מה מיוחד בניקס שהחיבור אלייה שונה.
בכל מקרה,
תנסה להתחבר קודם ל-
irc.inter.net.il
ותראה אם גם שם זה לא מתחבר לך..
(גם יהיה לך יותר קל לפחות בהתחלה כי באפנט הוא לא עושה ping pong לעיתים מאוד קרובות)..

ותעדכן אותנו =)

נ.ב.
אולי לא הבנתי נכון את הקוד, אבל ה- USER אמור להיות השורה הראשונה שאתה שולח כשאתה מתחבר לשרת...
ורק אחרי זה ה- NICK... תקן אותי אם אני טועה.[ההודעה נערכה על-ידי tal ב-24/07/2006 10:20:49]
24/07/2006 11:04:10 sysctl
הממ לא
אם הייתה בעיה בהתחברות הוא היה נותן לי DIE
הוא כן מתחבר, פשוט יש לו בעיה בכתיבה לסוקט
בכל מקרה אני אנסה בשרת אחר...
וההתחבורת הולכת ככה:
קוד:
telnet irc.nix.co.il 6667
NICK Elf
//wait 4 seconds//
PONG :
USER dfd "a" "b" :c
JOIN #ikp





עריכה:
ניסיתי - לא הלך[ההודעה נערכה על-ידי sysctl ב-24/07/2006 11:06:26]
24/07/2006 14:13:31 tal
זה לא הבעייה בהתחברות, זה הבעייה ב- PONG. ב- PONG יש כנראה ערך מאוד ספציפי שאתה אמור לשלוח..
תנסה לעשות מה שאמרתי,
להתחבר לשרת, לשלוח USER, אז לשלוח NICK ואז משם הלאה...

ועוד משהו,
אתה לא זה שאמור לשלוח את ה- PONG לפי מה שזכור לי.. אתה אמור לשלוח PING..
בקיצור, תנסה את הצורות האלה שאמרתי לך. ואל תתווכח. פשוט תנסה :-)
אתה לא תמות מלנסות.
24/07/2006 16:50:08 ziv
PING: NUMBER
PONG: YOU RETURN THE SAME NUMBER!
24/07/2006 20:53:53 sysctl
נו אתם ממש חופרים :\

הרעיון הוא לשלוח את המספר אוטומטית.

אני מקבל מהשרת PING :1234A4432
אז אני אמור לשלוח אליו PONG :1234A4432
טל, תתחבר דרך הטלנט כמו שרשמתי ותראה, חוץ מזה שניסיתי כבר כל דבר אפשרי :\
24/07/2006 21:06:10 ziv
תכין pipe כדי לראות מה הבעיה... אולי הוא כן שולח דברים אבל דברים מסויימים הוא לא עושה... אני לא כל כך יכול לעזור לך בעניין כי אני לא יודע perl.
תנסה... מקסימום סתם עשיתי לך קצת עבודה :)
24/07/2006 21:20:32 sysctl
pipe?
24/07/2006 21:30:24 ziv
תוכנה שדרכה יעבור כל המידע בין הסרבר לקליינט...
ככה אתה תוכל לראות מה נשלח אם בכלל ומה לא נשלח.
25/07/2006 00:48:28 Zibi
ציטוט:תוכנה שדרכה יעבור כל המידע בין הסרבר לקליינט...
ככה אתה תוכל לראות מה נשלח אם בכלל ומה לא נשלח.
יותר פשוט להשתמש בסניפר.
26/07/2006 02:11:20 tal
בשביל מה PIPE ובשביל מה SNIFFER, לא יותר פשוט שהוא יזרוק את מה שמגיע מ- socket לחלון הפלט שלו (איפה שזה לא יהיה) ?
בכל מקרה, אני אברר עוד קצת אלף...
צפה לעידכונים.
26/07/2006 12:03:44 sysctl
אפשר להוציא את מה שהשרת רושם בעזרת:
קוד:
while($read =<$socket>) { print $read; }

אבל זה לא עוזר כ"כ...


הבעיה היא בכתיבה לסוקט, אני כמעט בטוח.
הוא פשוט מחה מחה מחכה עד שאני מקבל פינג טיימאאוט
ז"א שהוא לא שולח שום דבר לשרת.[ההודעה נערכה על-ידי sysctl ב-26/07/2006 12:08:19]
עמודים: 1