if not defined $s;
length $s
or last;
- if($s =~ /^\377\377\377\377challenge (.*)$/s)
+ if($s =~ /^\377\377\377\377challenge (.*)(?:$|\0)/s)
{
return $1;
}
return;
# this will keep irc_error_active
}
- $channels{irc} = new Channel::Line(new Connection::Socket(tcp => "" => $config{irc_server} => 6667));
+ $channels{irc} = new Channel::Line(new Connection::Socket(tcp => $config{irc_local} => $config{irc_server} => 6667));
delete $store{$_} for grep { /^irc_/ } keys %store;
$store{irc_nick} = "";
schedule sub {
[ irc => q{:[^ ]* 001 .*} => sub {
$store{irc_seen_welcome} = 1;
$store{irc_nick} = $store{irc_nick_requested};
+
+ # If users for quakenet are listed, parse them into a hash and schedule a sub to query information
+ if ($config{irc_quakenet_authusers} ne '') {
+ $store{irc_quakenet_users} = { map { $_ => 1 } split / /, $config{irc_quakenet_authusers} };
+
+ schedule sub {
+ my ($timer) = @_;
+ out irc => 0, "PRIVMSG Q :users " . $config{irc_channel};
+ schedule $timer => 300;;
+ } => 1;
+ }
+
return irc_joinstage(0);
} ],
return irc_joinstage(0);
} ],
- # Catch joins of people in a channel the bot is in and catch our own joins of a channel
+ # Catch joins of people in a channel the bot is in and catch our own joins of a channel,
+ # detect channel join message and note hostname length to get the maximum allowed line length
[ irc => q{:(([^! ]*)![^ ]*) JOIN (#.+)} => sub {
my ($hostmask, $nick, $chan) = @_;
+
+ if ($nick eq $store{irc_nick}) {
+ $store{irc_maxlen} = 510 - length($hostmask);
+ $store{irc_joined_channel} = 1;
+ print "* detected maximum line length for channel messages: $store{irc_maxlen}\n";
+ }
+
return 0 unless ($store{irc_quakenet_users});
- if ($nick eq $config{irc_nick}) {
+ if ($nick eq $store{irc_nick}) {
out irc => 0, "PRIVMSG Q :users $chan"; # get auths for all users
} else {
$store{quakenet_hosts}->{$nick} = $hostmask;
return 0;
} ],
- # detect channel join message and note hostname length to get the maximum allowed line length
- [ irc => q{(:(?i:(??{$store{irc_nick}}))![^ ]* )(?i:JOIN) :(?i:(??{$config{irc_channel}}))} => sub {
- $store{irc_maxlen} = 510 - length($1);
- $store{irc_joined_channel} = 1;
- print "* detected maximum line length for channel messages: $store{irc_maxlen}\n";
- return 0;
- } ],
-
# chat: Xonotic server -> IRC channel
[ dp => q{\001(.*?)\^7: (.*)} => sub {
my ($nick, $message) = map { color_dp2irc $_ } @_;
}
-# If users for quakenet are listed, parse them into a hash and schedule a sub to query information
-if ($config{irc_quakenet_authusers} ne '') {
- $store{irc_quakenet_users} = { map { $_ => 1 } split / /, $config{irc_quakenet_authusers} };
-
- schedule sub {
- my ($timer) = @_;
- out irc => 0, "PRIVMSG Q :users " . $config{irc_channel};
- schedule $timer => 300;;
- } => 1;
-}
-
# verify that the server is up by letting it echo back a string that causes
# re-initialization of the required aliases
my ($timer) = @_;
# log on to IRC when needed
- if(exists $store{dp_hostname} && !exists $store{irc_logged_in})
+ if(exists $store{dp_hostname} && !exists $store{irc_seen_welcome})
{
$store{irc_nick_requested} = $config{irc_nick};
out irc => 1, "NICK $config{irc_nick}", "USER $config{irc_user} localhost localhost :$store{dp_hostname}";