# 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");