html/bitlbee_nick_change.pl


   1 use strict;
   2 use Data::Dumper;
   3 use vars qw($VERSION %IRSSI);
   4 
   5 $VERSION = '1.3';
   6 %IRSSI = (
   7 	authors		=> 'Tijmen "timing" Ruizendaal',
   8 	contact		=> 'tijmen.ruizendaal@gmail.com',
   9 	name		=> 'BitlBee_nick_change',
  10 	description 	=> 'Shows an IM nickchange in an Irssi way. (in a query and in the bitlbee channel). (For bitlbee 3.0+)',
  11 	license		=> 'GPLv2',
  12 	url		=> 'http://the-timing.nl/stuff/irssi-bitlbee',
  13 	changed		=> '2010-07-28'
  14 );
  15 
  16 my $bitlbee_server; # server object
  17 my @control_channels; # mostly: &bitlbee, &facebook etc.
  18 init();
  19 
  20 sub init { # if script is loaded after connect
  21 	my @servers = Irssi::servers();
  22 	foreach my $server(@servers) {
  23 		if( $server->isupport('NETWORK') eq 'BitlBee' ){
  24 			$bitlbee_server = $server;
  25 			my @channels = $server->channels();
  26 			foreach my $channel(@channels) {
  27 				if( $channel->{mode} =~ /C/ ){
  28 					push @control_channels, $channel->{name} unless (grep $_ eq $channel->{name}, @control_channels);
  29 				}
  30 			}
  31 		}
  32 	}
  33 }
  34 # if connect after script is loaded
  35 Irssi::signal_add_last('event 005' => sub {
  36 	my( $server ) = @_;
  37 	if( $server->isupport('NETWORK') eq 'BitlBee' ){
  38 		$bitlbee_server = $server;
  39 	}
  40 });
  41 # if new control channel is synced after script is loaded
  42 Irssi::signal_add_last('channel sync' => sub {
  43 	my( $channel ) = @_;
  44 	if( $channel->{mode} =~ /C/ && $channel->{server}->{tag} eq $bitlbee_server->{tag} ){
  45 		push @control_channels, $channel->{name} unless (grep $_ eq $channel->{name}, @control_channels);
  46 	}
  47 });
  48 
  49 # BEGIN bitlbee_nick_change.pl
  50 
  51 sub event_notice {
  52 	my ($server, $msg, $nick, $address, $target) = @_;
  53 	if( $server->{tag} eq $bitlbee_server->{tag} && $msg =~ /.*Changed name to.*/ ){
  54 		my $friendly_name = $msg;
  55 		$friendly_name =~ s/.*Changed name to `(.*)'.*/$1/;
  56 		my $window = $server->window_find_item($nick);	
  57 		if ($window) {
  58 			$window->printformat(MSGLEVEL_CRAP, 'nick_change', $nick, $address, 'changed name to `'.$friendly_name.'`');
  59 			Irssi::signal_stop();
  60 		} else {
  61 			# TODO find control channel where this user is located and display the notice there
  62 			#my $window = $server->window_find_item($bitlbee_channel);
  63 			#$window->printformat(MSGLEVEL_CRAP, 'nick_change', $nick, $address, 'changed name to `'.$friendly_name.'`');
  64 			#Irssi::signal_stop();
  65 		}
  66 	}		
  67 };
  68 
  69 Irssi::signal_add_last('message irc notice', 'event_notice');
  70 Irssi::theme_register(['nick_change', '{channick_hilight $0} [$1] $2']);
  71 
  72 # END bitbee_nick_change.pl