diff options
Diffstat (limited to 'scripts/topicsed.pl')
-rw-r--r-- | scripts/topicsed.pl | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/scripts/topicsed.pl b/scripts/topicsed.pl new file mode 100644 index 0000000..58d0143 --- /dev/null +++ b/scripts/topicsed.pl @@ -0,0 +1,61 @@ +# +# Topicsed edits channel topics by perl regexps via the command /topicsed. +# +# Thanks to Mikael Magnusson for the idea and patch to implement a +# preview functionality. ;] +# +use strict; +use Irssi; + +use vars qw/%IRSSI $VERSION/; +$VERSION="0.1"; +%IRSSI = ( + authors => "Gabor Nyeki", + contact => "bigmac\@vim.hu", + name => "topicsed", + description => "editing channel topics by regexps", + license => "public domain", + changed => "2017-03-18" +); + + +sub topicsed { + my ($regexp, $server, $winit) = @_; + + my $preview = 0; + if ($regexp =~ m/^-p(review|) ?/) { + $preview = 1; + $regexp =~ s/^-p\w* ?//; + } + + unless ($regexp) { + Irssi::print("Usage: /topicsed [-p[review]] <regexp>"); + return; + } + return if (!$server || !$server->{connected} || + !$winit || $winit->{type} ne 'CHANNEL'); + + my $topic = $winit->{topic}; + my $x = $topic; + + unless (eval "\$x =~ $regexp") { + Irssi::print("topicsed:error: An error occured with your regexp."); + return; + } + + if ($x eq $topic) { + Irssi::print("topicsed:error: The topic wouldn't be changed."); + return; + } elsif ($x eq "") { + Irssi::print("topicsed:error: Edited topic is empty; try '/topic -delete' instead."); + return; + } + + if ($preview) { + Irssi::print("topicsed: Edited topic for $winit->{name}: $x"); + } else { + $server->send_raw("TOPIC $winit->{name} :$x"); + } +} + +Irssi::command_bind('topicsed', 'topicsed'); |