diff options
Diffstat (limited to '')
-rw-r--r-- | scripts/topic-diff.pl | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/scripts/topic-diff.pl b/scripts/topic-diff.pl new file mode 100644 index 0000000..6082c81 --- /dev/null +++ b/scripts/topic-diff.pl @@ -0,0 +1,86 @@ +use strict; +use vars qw($VERSION %IRSSI); + +use Irssi; + +$VERSION = '1.00'; +%IRSSI = ( + authors => 'Pascal Hakim', + contact => 'pasc@redellipse.net', + name => 'topic-diff', + description => 'This script shows you changes in the topic. ', + license => 'GPL' +); + +my %topics; + +sub new_channel { + my ($channel) = @_; + $topics{$channel->{server}->{tag}."_".$channel->{name}} = $channel->{topic}; +} + +sub new_topic { + my ($server, $channel, $topic, $user, $real) = @_; + my $i; + my $diff; + my $i = 0; + my $j = 0; + my $k = 0; + +# $server->print ($channel, $server->{tag}); + + if ($topics{$server->{tag}."_".$channel}) { + $topics{$server->{tag}."_".$channel} =~ s/^ +| +$//g; + $topic =~ s/^ +| +$//g; + my @original = split /\s*\|\s*|\s+-\s+/, $topics{$server->{tag}."_".$channel}; + my @modified = split /\s*\|\s*|\s+-\s+/, $topic; + + + outer: while( $i <= $#original) { + if ($j <= $#modified && $original[$i] eq $modified[$j]) { + $modified[$j] = ''; + $i += 1; + $j += 1; + next; + + } else { + # First two don't match, check the rest of the list + for ($k = $j ; $k <= $#modified; $k++) { + if ($modified[$k] eq $original[$i]) + { + $modified[$k] = ''; + $i += 1; + next outer; + } + } + $diff = ($diff ? $diff." | " : "").$original[$i]; + $i += 1; + } + } + + + if ($diff ne '') { $server->print ($channel, "Topic: -: ".$diff);} + + $diff = join " | ", (grep {$_ ne ''} @modified); + + if ($diff ne '') { $server->print ($channel, "Topic: +: ".$diff);} + + } + $topics{$server->{tag}."_".$channel} = $topic; + +} + + +# Start by reading all the channels currently opened, and recording their topic + +my @channels = Irssi::channels () ; + +foreach my $channel (@channels) { + $topics{$channel->{server}->{tag}."_".$channel->{name}} = $channel->{topic}; +} + +# Topic has changed +Irssi::signal_add 'message topic' => \& new_topic; + +# We've joined a new channel +Irssi::signal_add 'channel joined' => \& new_channel; |