]> git.donarmstrong.com Git - irc.git/blob - .irssi/scripts/bitlbee_rename.pl
add bitlbee rename
[irc.git] / .irssi / scripts / bitlbee_rename.pl
1 # renames bitlbee facebook-via-xmpp buddies to something sane
2 # Originally by Tim Angus, http://a.ngus.net/bitlbee_rename.pl
3 # Modified slightly to only rename people on chat.facebook.com, and also strip invalid chars from names, by Lakitu7
4 # copied in a mod by ajf on #bitlbee to only match u###### names
5 # truncates names over 25 chars to comply with bitlbee's limit; thanks Jesper on #bitlbee
6
7 # script is for irssi. Save it as .irssi/scripts/bitlbee_rename.pl then /script load bitlbee_rename.pl
8 # known issues: If the name it's renaming to is already taken, the rename fails.
9
10 use strict;
11 use Socket;
12 use Irssi;
13 use Irssi::Irc;
14
15 my $bitlbeeChannel = "&bitlbee";
16 my %nicksToRename = ();
17 my $facebookhostname = "chat.facebook.com";
18
19 sub message_join
20 {
21   # "message join", SERVER_REC, char *channel, char *nick, char *address
22   my ($server, $channel, $nick, $address) = @_;
23   my $username = substr($address, 0, index($address,'@'));
24   my $host = substr($address, index($address,'@')+1);
25
26   if($channel =~ m/($bitlbeeChannel)/ and $nick =~ m/$username/ and $nick =~ m/^u\d+/ and $host =~ m/($facebookhostname)/ )
27   {
28     $nicksToRename{$nick} = $channel;
29     $server->command("whois $nick");
30   }
31 }
32
33 sub whois_data
34 {
35   my ($server, $data) = @_;
36   my ($me, $nick, $user, $host) = split(" ", $data);
37
38   if (exists($nicksToRename{$nick}))
39   {
40     my $channel = $nicksToRename{$nick};
41     delete($nicksToRename{$nick});
42
43     my $ircname = substr($data, index($data,':')+1);
44
45     $ircname =~ s/[^A-Za-z0-9_]//g;
46     $ircname = substr( $ircname, 0, 25 );
47
48     $server->command("msg $channel rename $nick $ircname");
49     $server->command("msg $channel save");
50   }
51 }
52
53 Irssi::signal_add_first 'message join' => 'message_join';
54 Irssi::signal_add_first 'event 311' => 'whois_data';