#!perl
my $VERSION = '0.02';
use 5.10.1;
use strict;
use warnings;
use Time::HiRes qw/gettimeofday tv_interval/;
use Bot::Cobalt::DB;
use Bot::Cobalt::Utils qw/
glob_to_re_str
glob_to_re
/;
use IRC::Utils qw/decode_irc/;
my $info2_path;
my $output_path;
my $verbose = 0;
my $bench = 0;
use Getopt::Long;
GetOptions(
'info2=s' => \$info2_path,
'dest=s' => \$output_path,
'verbose!' => \$verbose,
'benchmark!' => \$bench,
help => \&help,
);
sub help {
print(
"$0 $VERSION\n",
"Usage:\n $0 --info2=info2.db --dest=newinfo3.db\n"
);
exit 0
}
help() unless $info2_path and $output_path;
die "Could not find $info2_path" unless -e $info2_path;
open my $info2_fh, '<', $info2_path
or die "Could not open $info2_path: $!\n";
my @info2db = <$info2_fh>;
close $info2_fh;
die "Empty info2db at $info2_path?\n" unless @info2db;
my $info3ref;
for my $line (@info2db) {
my @split = split ' ', decode_irc($line);
my $glob = lc ( shift @split );
## Convert ?action -> ~action
$glob =~ s/^\?action/~action/;
my $str = join ' ', @split;
my $re = glob_to_re_str($glob);
## Anchor:
$re = '^'.$re.'$';
unless ($glob && $re) {
warn "!! Missing element; glob: $glob regex: $re";
next
}
say "$glob -> $re" if $verbose;
$info3ref->{$glob} = {
Regex => $re,
Response => $str,
AddedBy => '-Imported',
AddedAt => time,
};
}
my $count = scalar keys %$info3ref;
say "Output path: $output_path";
say "Pushing $count topics to Info3 DB";
my $cdb = Bot::Cobalt::DB->new(
File => $output_path,
);
my $timer0 = [gettimeofday];
$cdb->dbopen || die "failed to open db\n";
for my $glob (keys %$info3ref) {
unless ( $cdb->put($glob, $info3ref->{$glob}) ) {
warn "!! db put failure for $glob";
}
}
$cdb->dbclose;
my $interval = tv_interval($timer0);
say "Done.";
say $interval if $bench;