diff options
Diffstat (limited to 'scripts/studivz_bitlbee_rename.pl')
| -rw-r--r-- | scripts/studivz_bitlbee_rename.pl | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/scripts/studivz_bitlbee_rename.pl b/scripts/studivz_bitlbee_rename.pl new file mode 100644 index 0000000..ec1d523 --- /dev/null +++ b/scripts/studivz_bitlbee_rename.pl @@ -0,0 +1,74 @@ +# See this script's repository at +# http://github.com/avar/irssi-bitlbee-facebook-rename for further +# information. + +use strict; +use warnings; +use Irssi; +use Irssi::Irc; + +our $VERSION = '0.01'; +our %IRSSI = ( + authors => "Enno Boland", + contact => 'g@s01.de', + name => 'studivz-bitlbee-rename', + description => 'Rename XMPP *vz.net network contacts in bitlbee to human-readable names based on http://github.com/avar/irssi-bitlbee-facebook-rename', + license => 'GPL', +); + +my $bitlbeeChannel = "&bitlbee"; +my $vzhost = "vz.net"; +my %nicksToRename = (); + +sub message_join +{ + # "message join", SERVER_REC, char *channel, char *nick, char *address + my ($server, $channel, $nick, $address) = @_; + my ($username, $host) = split /@/, $address; + + if ($host eq $vzhost and $channel =~ m/$bitlbeeChannel/ and $nick =~ m/$username/) + { + $nicksToRename{$nick} = $channel; + $server->command("whois -- $nick"); + } +} + +sub whois_data +{ + my ($server, $data) = @_; + my ($me, $nick, $user, $host) = split(" ", $data); + + if (exists($nicksToRename{$nick})) + { + my $channel = $nicksToRename{$nick}; + delete($nicksToRename{$nick}); + + my $ircname = substr($data, index($data,':')+1); + + $ircname = munge_nickname( $ircname ); + + if ($ircname ne $nick) + { + $server->command("msg $channel rename $nick $ircname"); + $server->command("msg $channel save"); + } + } +} + +sub munge_nickname +{ + my ($nick) = @_; + + $nick =~ s/ä/ae/g; + $nick =~ s/ü/ue/g; + $nick =~ s/ö/oe/g; + $nick =~ s/ß/ss/g; + $nick =~ s/[^A-Za-z0-9-]/_/g; + $nick = "svz_" . $nick; + $nick = substr $nick, 0, 24; + + return $nick; +} + +Irssi::signal_add_first 'message join' => 'message_join'; +Irssi::signal_add_first 'event 311' => 'whois_data'; |
