irssi/convert-replace-trigger.pl

110 lines
2.7 KiB
Perl
Raw Normal View History

# This script converts replaces saved by replace.pl to a triggers-file that can be used by trigger.pl
# This is not an irssi script. You should use this from the command line.
# Usage:
# perl convert-replace-trigger.pl [irssi-dir]
# if no directory is specified, it will asume you use the default ~/.irssi
#
# http://wouter.coekaerts.be/irssi/
use strict;
use warnings;
use IO::File;
use Data::Dumper;
print "convert-replace-trigger 1.1\n";
my (@replaces, @triggers, $irssidir);
if (!$ARGV[0]) {
$irssidir = $ENV{'HOME'};
print "no arguments given, assuming your irssi directory is $irssidir\n";
} else {
$irssidir = $ARGV[0];
print "using $irssidir as irssi directory\n";
}
$irssidir =~ s/\/$//; # strip last /
print "reading replaces from $irssidir/replaces...\n";
my $io = new IO::File "$irssidir/replaces", "r";
if (not defined $io) {
print "error opening replaces file, aborting\n";
exit;
}
if (defined $io) {
no strict 'vars';
my $text;
$text .= $_ foreach ($io->getlines);
my $rep = eval "$text";
@replaces = @$rep if ref $rep;
$io->close();
}
print(@replaces . " replaces loaded\n");
if (-e "$irssidir/triggers") { # there already is a triggers file
print "reading existing triggers from $irssidir/triggers...\n";
$io = new IO::File "$irssidir/triggers", "r";
if (not defined $io) {
print "triggers file already exists, but I can't open it. please remove it.\n";
exit;
}
no strict 'vars';
my $text;
$text .= $_ foreach ($io->getlines);
my $rep = eval "$text";
@triggers = @$rep if ref $rep;
$io->close();
}
if (@triggers) {
print (@triggers . " triggers already exist in the triggers file, keeping them\n");
}
print "converting...\n";
REPLACE:
foreach my $replace (@replaces) {
if ($replace->{'case'}) {
delete $replace->{'case'};
} else {
$replace->{'modifiers'} = 'i';
}
if ($replace->{'command'}) {
$replace->{'command'} = $replace->{'replacement'};
} else {
$replace->{'replace'} = $replace->{'replacement'};
}
delete $replace->{'replacement'};
my $isduplicate = 1;
foreach my $trigger (@triggers) {
if (scalar(keys(%$trigger)) == scalar(keys(%$replace))) {
foreach my $key (keys(%$trigger)) {
if (!(defined($trigger->{$key}) && $replace->{$key} eq $trigger->{$key})) {
$isduplicate = 0;
}
}
} else {
$isduplicate = 0;
}
}
if ($isduplicate) {
print "skipping duplicate trigger\n";
next REPLACE;
}
push @triggers, $replace;
}
print "saving triggers...\n";
$io = new IO::File "$irssidir/triggers", "w";
if (!defined $io) {
print "Error writing triggers\n";
exit;
}
my $dumper = Data::Dumper->new([\@triggers]);
$dumper->Purity(1)->Deepcopy(1);
$io->print($dumper->Dump);
$io->close;
print("Done. replaces successfully converted to triggers.\n");