z-shell
09.11.2008, 23:56
Hallo,
ich bin am verzweifeln.
Ich habe mir einen IRC-Bot geschrieben, und der tut auch soweit. Nur bei der Ausgabe im Channel bricht er den String nach einem Leerzeichen ab. Wo liegt der Fehler?
Der Code:
#!/usr/bin/perl -w
use strict;
use IO::Socket;
### settings ###
my $srv="irc.server.net";
my $port=6667;
my $nick='Himbeertoni';
my $user='tester';
my $chan='#mychan';
### create socket ###
my $sock=IO::Socket::INET->new(
PeerAddr=>$srv,
PeerPort=>$port,
Proto=>'tcp'
) or die "Connection failed: $!\n";
### connect ###
print $sock "NICK $nick\r\n";
print $sock "USER $user 8 * :$user\r\n";
print $sock "JOIN $chan\r\n";
### keep connection ###
while (my $line = <$sock>) {
# print $line;
if ( $line =~ /^PING \:(.*)/i ) {
print "PONG :$1";
print $sock "PONG :$1";
}
### the stuff... ###
if ($line =~ /366/) { # greet on join
print "$nick has joined $chan.\n";
my $hi_msg = "Hi, there!\n";
&speak("$hi_msg");
}
if ($line =~ /!HELP/i) { # print help
&help;
}
#if ($line =~ /!LEARN/i) { # learn some stuff
# my $string;
# $line = $string; # TODO
# &learn;
# }
if ($line =~ /!DIE/i) { # kill the bot
&_die;
}
}
### subs ###
sub speak() {
$sock->autoflush(1);
print $sock "PRIVMSG $chan @_\n";
}
sub help() {
my @help_out = (
"Available_Commands: ",
"!SYSTEM",
"!LEARN",
"!DIE"
);
foreach my $elements(@help_out) {
&speak($elements);
}
}
#sub learn() {
# &speak(scalar $string); # TODO
# }
sub _die() {
$sock->close;
}
Wenn er jetzt z.B. die Begrüssungsmessage oder einen String im Array (rot) ausgeben soll, der whitespaces enthält, bricht die Ausgabe danach ab.
Ich hab keine Erklärung dafür. Hat jemand einen Tip?
ich bin am verzweifeln.
Ich habe mir einen IRC-Bot geschrieben, und der tut auch soweit. Nur bei der Ausgabe im Channel bricht er den String nach einem Leerzeichen ab. Wo liegt der Fehler?
Der Code:
#!/usr/bin/perl -w
use strict;
use IO::Socket;
### settings ###
my $srv="irc.server.net";
my $port=6667;
my $nick='Himbeertoni';
my $user='tester';
my $chan='#mychan';
### create socket ###
my $sock=IO::Socket::INET->new(
PeerAddr=>$srv,
PeerPort=>$port,
Proto=>'tcp'
) or die "Connection failed: $!\n";
### connect ###
print $sock "NICK $nick\r\n";
print $sock "USER $user 8 * :$user\r\n";
print $sock "JOIN $chan\r\n";
### keep connection ###
while (my $line = <$sock>) {
# print $line;
if ( $line =~ /^PING \:(.*)/i ) {
print "PONG :$1";
print $sock "PONG :$1";
}
### the stuff... ###
if ($line =~ /366/) { # greet on join
print "$nick has joined $chan.\n";
my $hi_msg = "Hi, there!\n";
&speak("$hi_msg");
}
if ($line =~ /!HELP/i) { # print help
&help;
}
#if ($line =~ /!LEARN/i) { # learn some stuff
# my $string;
# $line = $string; # TODO
# &learn;
# }
if ($line =~ /!DIE/i) { # kill the bot
&_die;
}
}
### subs ###
sub speak() {
$sock->autoflush(1);
print $sock "PRIVMSG $chan @_\n";
}
sub help() {
my @help_out = (
"Available_Commands: ",
"!SYSTEM",
"!LEARN",
"!DIE"
);
foreach my $elements(@help_out) {
&speak($elements);
}
}
#sub learn() {
# &speak(scalar $string); # TODO
# }
sub _die() {
$sock->close;
}
Wenn er jetzt z.B. die Begrüssungsmessage oder einen String im Array (rot) ausgeben soll, der whitespaces enthält, bricht die Ausgabe danach ab.
Ich hab keine Erklärung dafür. Hat jemand einen Tip?