diff options
Diffstat (limited to 'scripts/bitlbee_nick_change.pl')
-rw-r--r-- | scripts/bitlbee_nick_change.pl | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/scripts/bitlbee_nick_change.pl b/scripts/bitlbee_nick_change.pl new file mode 100644 index 0000000..93a01b9 --- /dev/null +++ b/scripts/bitlbee_nick_change.pl @@ -0,0 +1,72 @@ +use strict; +use Data::Dumper; +use vars qw($VERSION %IRSSI); + +$VERSION = '1.3'; +%IRSSI = ( + authors => 'Tijmen "timing" Ruizendaal', + contact => 'tijmen.ruizendaal@gmail.com', + name => 'BitlBee_nick_change', + description => 'Shows an IM nickchange in an Irssi way. (in a query and in the bitlbee channel). (For bitlbee 3.0+)', + license => 'GPLv2', + url => 'http://the-timing.nl/stuff/irssi-bitlbee', + changed => '2010-07-28' +); + +my $bitlbee_server; # server object +my @control_channels; # mostly: &bitlbee, &facebook etc. +init(); + +sub init { # if script is loaded after connect + my @servers = Irssi::servers(); + foreach my $server(@servers) { + if( $server->isupport('NETWORK') eq 'BitlBee' ){ + $bitlbee_server = $server; + my @channels = $server->channels(); + foreach my $channel(@channels) { + if( $channel->{mode} =~ /C/ ){ + push @control_channels, $channel->{name} unless (grep $_ eq $channel->{name}, @control_channels); + } + } + } + } +} +# if connect after script is loaded +Irssi::signal_add_last('event 005' => sub { + my( $server ) = @_; + if( $server->isupport('NETWORK') eq 'BitlBee' ){ + $bitlbee_server = $server; + } +}); +# if new control channel is synced after script is loaded +Irssi::signal_add_last('channel sync' => sub { + my( $channel ) = @_; + if( $channel->{mode} =~ /C/ && $channel->{server}->{tag} eq $bitlbee_server->{tag} ){ + push @control_channels, $channel->{name} unless (grep $_ eq $channel->{name}, @control_channels); + } +}); + +# BEGIN bitlbee_nick_change.pl + +sub event_notice { + my ($server, $msg, $nick, $address, $target) = @_; + if( $server->{tag} eq $bitlbee_server->{tag} && $msg =~ /.*Changed name to.*/ ){ + my $friendly_name = $msg; + $friendly_name =~ s/.*Changed name to `(.*)'.*/$1/; + my $window = $server->window_find_item($nick); + if ($window) { + $window->printformat(MSGLEVEL_CRAP, 'nick_change', $nick, $address, 'changed name to `'.$friendly_name.'`'); + Irssi::signal_stop(); + } else { + # TODO find control channel where this user is located and display the notice there + #my $window = $server->window_find_item($bitlbee_channel); + #$window->printformat(MSGLEVEL_CRAP, 'nick_change', $nick, $address, 'changed name to `'.$friendly_name.'`'); + #Irssi::signal_stop(); + } + } +}; + +Irssi::signal_add_last('message irc notice', 'event_notice'); +Irssi::theme_register(['nick_change', '{channick_hilight $0} [$1] $2']); + +# END bitbee_nick_change.pl |