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';