diff options
| author | Alexander Færøy | 2014-05-31 13:10:46 +0200 | 
|---|---|---|
| committer | Alexander Færøy | 2014-05-31 13:10:46 +0200 | 
| commit | 2d0759e6ca5767b48bcc85bf38c2c43d5f0b63b1 (patch) | |
| tree | 1c5e6d817c88e67b46e216a50e0aef5428bf63df /scripts/map.pl | |
| parent | 2d080422d79d1fd49d6c5528593ccaaff9bfc583 (diff) | |
| download | scripts.irssi.org-2d0759e6ca5767b48bcc85bf38c2c43d5f0b63b1.tar.bz2 | |
Import scripts from scripts.irssi.org
Diffstat (limited to 'scripts/map.pl')
| -rw-r--r-- | scripts/map.pl | 129 | 
1 files changed, 129 insertions, 0 deletions
| diff --git a/scripts/map.pl b/scripts/map.pl new file mode 100644 index 0000000..1d4c713 --- /dev/null +++ b/scripts/map.pl @@ -0,0 +1,129 @@ +# Map - Generates simple tree of IRC network based on the output of the LINKS +# command. +# +# $Id: map.pl,v 1.2 2002/02/01 22:21:20 pasky Exp pasky $ + + +use strict; + +use vars qw ($VERSION %IRSSI $rcsid); + +$rcsid = '$Id: map.pl,v 1.2 2002/02/01 22:21:20 pasky Exp pasky $'; +($VERSION) = '$Revision: 1.2 $' =~ / (\d+\.\d+) /; +%IRSSI = ( +          name        => 'map', +          authors     => 'Petr Baudis', +          contact     => 'pasky@ji.cz', +          url         => 'http://pasky.ji.cz/~pasky/dev/irssi/', +          license     => 'GPLv2, not later', +          description => 'Generates simple tree of IRC network based on the output of the LINKS command.' +         ); + + +my $root;  # The root lc(server) +my %tree;  # Key is lc(server), value is lc(array of downlinks) +my %rcase; # Key is lc(server), value is server +my %sname; # Key is lc(server), value is server's name +my @branches; # Index is level, value is (should_print_'|') + + +use Irssi 20011112; +use Irssi::Irc; + + +sub cmd_map { +  my ($data, $server, $channel) = @_; + +  # ugly, but no easy way how to distinguish between two mixes links output :/ +  $server->redirect_event('command map', 0, '', +      (split(/\s+/, $data) > 1), undef, +      { +	"event 364", "redir links_line", +	"event 365", "redir links_done", +      } ); + +  $server->send_raw("LINKS $data"); + +  Irssi::signal_stop(); +} + + +sub event_links_line { +  my ($server, $data, $nick, $address) = @_; +  my ($target, $to, $from, $hops, $name) = $data =~ /^(\S*)\s+(\S*)\s+(\S*)\s+:(\d+)\s+(.*)$/; +   +  $rcase{lc($from)} = $from; +  $rcase{lc($to)} = $to; +  $sname{lc($to)} = $name; + +  if ($hops == 0) { +    $root = lc($from); +  } else { +    push(@{$tree{lc($from)}}, lc($to)); +  } + +  Irssi::signal_stop(); +} + +sub event_links_done { +  my ($server, $data, $nick, $address) = @_; +   +  @branches = (' '); + +  print_server($root, 0) if ($root); + +  $root = undef; +} + +sub print_server { +  my ($parent, $level, $last) = @_; +  my ($i, $str); + +  for ($i = 0; $i < $level; $i++) { +    $str .= "   " . $branches[$i]; +  } + +  $str .= ($level ? "-" : " ") . " "; +  $str .= $rcase{$parent}; +  $str = sprintf('%-50s %s', $str, $sname{$parent}) +    if Irssi::settings_get_bool("show_server_names"); + +  Irssi::print $str; + +  return unless ($tree{$parent}); + +  $branches[$level - 1] = ' ' +    if ($level and $branches[$level - 1] eq '`'); + +  $branches[$level] = '|'; + +  while (@{$tree{$parent}}) { +    my ($server) = shift @{$tree{$parent}}; +     +    $last = not scalar @{$tree{$parent}}; # sounds funny, eh? :^) +    $branches[$level] = '`' if ($last); +     +    print_server($server, $level + 1, $last); +  }  +} + + +Irssi::command_bind("map", "cmd_map"); +Irssi::signal_add("redir links_line", "event_links_line"); +Irssi::signal_add("redir links_done", "event_links_done"); +Irssi::settings_add_bool("lookandfeel", "show_server_names", 1); + +Irssi::Irc::Server::redirect_register("command map", 0, 0, +    { +      "event 364" => 1, # link line (wait...) +    }, +    { +      "event 402" => 1,  # not found +      "event 263" => 1,  # try again +      "event 365" => 1,  # end of links +    }, +    undef, +    ); + + +Irssi::print("Map $VERSION loaded..."); | 
