]> git.xonotic.org Git - xonotic/xonotic.git/blobdiff - server/rcon2irc/rcon2irc.pl
honor irc_local when reconnecting too
[xonotic/xonotic.git] / server / rcon2irc / rcon2irc.pl
index a29a0a1571f9d80245ae571b1e1e95926777b51e..42909cc8636219dd450984a6695f0061a19891f4 100755 (executable)
@@ -514,7 +514,7 @@ sub recvchallenge($)
                                        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;
                                }
@@ -862,7 +862,7 @@ sub irc_error()
                        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 {
@@ -1321,12 +1321,20 @@ sub cond($)
                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;
@@ -1395,14 +1403,6 @@ sub cond($)
                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 $_ } @_;