html/studivz_bitlbee_rename.pl


   1 # See this script's repository at
   2 # http://github.com/avar/irssi-bitlbee-facebook-rename for further
   3 # information.
   4 
   5 use strict;
   6 use warnings;
   7 use Irssi;
   8 use Irssi::Irc;
   9 
  10 our $VERSION = '0.01';
  11 our %IRSSI = (
  12     authors => "Enno Boland",
  13     contact => 'g@s01.de',
  14     name => 'studivz-bitlbee-rename',
  15     description => 'Rename XMPP *vz.net network contacts in bitlbee to human-readable names based on http://github.com/avar/irssi-bitlbee-facebook-rename',
  16     license => 'GPL',
  17 );
  18 
  19 my $bitlbeeChannel = "&bitlbee";
  20 my $vzhost = "vz.net";
  21 my %nicksToRename = ();
  22 
  23 sub message_join
  24 {
  25   # "message join", SERVER_REC, char *channel, char *nick, char *address
  26   my ($server, $channel, $nick, $address) = @_;
  27   my ($username, $host) = split /@/, $address;
  28 
  29   if ($host eq $vzhost and $channel =~ m/$bitlbeeChannel/ and $nick =~ m/$username/)
  30   {
  31     $nicksToRename{$nick} = $channel;
  32     $server->command("whois -- $nick");
  33   }
  34 }
  35 
  36 sub whois_data
  37 {
  38   my ($server, $data) = @_;
  39   my ($me, $nick, $user, $host) = split(" ", $data);
  40 
  41   if (exists($nicksToRename{$nick}))
  42   {
  43     my $channel = $nicksToRename{$nick};
  44     delete($nicksToRename{$nick});
  45 
  46     my $ircname = substr($data, index($data,':')+1);
  47 
  48     $ircname = munge_nickname( $ircname );
  49 
  50     if ($ircname ne $nick)
  51     {
  52       $server->command("msg $channel rename $nick $ircname");
  53       $server->command("msg $channel save");
  54     }
  55   }
  56 }
  57 
  58 sub munge_nickname
  59 {
  60   my ($nick) = @_;
  61 
  62   $nick =~ s/ä/ae/g;
  63   $nick =~ s/ü/ue/g;
  64   $nick =~ s/ö/oe/g;
  65   $nick =~ s/ß/ss/g;
  66   $nick =~ s/[^A-Za-z0-9-]/_/g;
  67   $nick = "svz_" . $nick;
  68   $nick = substr $nick, 0, 24;
  69 
  70   return $nick;
  71 }
  72 
  73 Irssi::signal_add_first 'message join' => 'message_join';
  74 Irssi::signal_add_first 'event 311' => 'whois_data';