diff options
Diffstat (limited to 'auto-server')
| -rw-r--r-- | auto-server/auto_server.pl | 48 | 
1 files changed, 42 insertions, 6 deletions
| diff --git a/auto-server/auto_server.pl b/auto-server/auto_server.pl index 82382f7..7054664 100644 --- a/auto-server/auto_server.pl +++ b/auto-server/auto_server.pl @@ -1,3 +1,6 @@ +# This script was initially written by shabble, this fork (and molestation) is +# built upon his original work. +#  # USAGE:  #  # the primary command used is /join+ #channelname @@ -13,6 +16,10 @@  # Then use /join+ #foo, and if you are not already connected to freenode, it  # will connect you, and then join that channel. +# TODO: +# Autocompletion for channel names +# address conflict resolution +# fix that disgusting race condition  use strict;  use warnings; @@ -39,16 +46,17 @@ sub _debug_print {  our $VERSION = '0.1';  our %IRSSI = ( -              authors     => 'shabble', -              contact     => 'shabble+irssi@metavore.org', -              name        => 'auto-join', -              description => 'connects to a specified server in order to connect' -                             ' to a channel there, without having first to' +              authors     => 'shabble, richo', +              contact     => 'richo@psych0tik.net', +              name        => 'auto-join-ng', +              description => 'connects to a specified server in order to connect' . +                             ' to a channel there, without having first to' .                               ' connect to the server',                license     => 'Public Domain',               );  my $channel_map; +my @hack_channels;  my $pending_joins;  sub auto_server_init { @@ -67,8 +75,36 @@ sub setup_changed {      parse_channel_map();  } +# This is a tremendous kludge. +# If anyone knows a better way to get this listing, I'd like to hear it. +# This has so many race condition bugs I just don't even know where to start. +sub retrieve_channels { +    @hack_channels = (); +    Irssi::signal_add_first('print text', 'haxy_print_hook'); +    Irssi::command("CHANNEL LIST"); +    Irssi::signal_remove('print text', 'haxy_print_hook'); +    return join(" ", @hack_channels); +} + + +# The idea for how to do this courtesy of http://wouter.coekaerts.be/site/irssi/aliases +sub haxy_print_hook { +    Irssi::signal_remove('print text', 'haxy_print_hook'); +    Irssi::signal_stop(); +    my $data = $_[1]; +    # Hose control characters +    $data =~ s/\x04.//g; +    if ($data =~ m/^#/) { +        my @items = split /\s+/, $data; +        push(@hack_channels, $items[0]); +        push(@hack_channels, $items[1]); +    } +    Irssi::signal_add_first('print text', 'haxy_print_hook'); +} +  sub parse_channel_map { -    my $data = Irssi::settings_get_str('joinplus_server_maps'); +    #my $data = Irssi::settings_get_str('joinplus_server_maps'); +    my $data = retrieve_channels();      my @items = split /\s+/, $data;      if (@items % 2 == 0) {          $channel_map = { @items }; # risky? | 
