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