use MooseX::Declare;
use NDIRC::Dispatcher;
-use Tie::File;
-use File::Temp ();
-
-tie my @FILE, 'Tie::File', "quote.txt";
-tie my @OLDFILE, 'Tie::File',"oldquotes.txt" or die "test";
command quote => {
- help => q(syntax .quote [number] | if number isn't given, then a random quote is used),
+ help => q(syntax .quote [number|search term] | if number/search term isn't given, then a random quote is used),
alias => q(lastquote),
}, class extends NDIRC::Command {
method execute($c,$msg) {
- my ($n) = $msg =~ /(\d+)/;
-
- $n = $n-1 if defined $n;
- $n //= int(rand($#FILE));
- $n = $#FILE if $self->name eq 'lastquote';
-
- my $text = $FILE[$n];
- $text =~ s/(.*?)[\r\n]*$/$1/;
- $n++;
- my $num = $#FILE+1;
- $c->reply("Quote <b>$n</b> of <b>$num</b>: $text");
+ my $dbh = $c->model;
+ my $quote;
+ if ($msg =~ /(\d+)/) {
+ my $quote = $dbh->selectrow_hashref(q{SELECT qid,quote FROM quotes WHERE qid = ?}, undef, $1);
+ if ($quote) {
+ $c->reply("Quote <b>$quote->{qid}</b>: $quote->{quote}");
+ } else {
+ $c->reply("No quote with id <b>$1</b>");
+ }
+ } elsif ($msg =~ /^\s*(.+?)\s*$/) {
+ say $1;
+ my $quote = $dbh->selectrow_hashref(q{
+SELECT qid,quote FROM quotes
+WHERE quote ILIKE '%' || $1 || '%' ORDER BY random() limit 1
+ }, undef, $1);
+ if ($quote) {
+ $c->reply("Quote <b>$quote->{qid}</b>: $quote->{quote}");
+ } else {
+ $c->reply("No quote matching <b>$1</b>");
+ }
+ } else {
+ say "default";
+ my $quote = $dbh->selectrow_hashref(q{
+SELECT qid,quote FROM quotes tablesample system(5) ORDER BY random() LIMIT 1
+ });
+ $c->reply("Quote <b>$quote->{qid}</b>: $quote->{quote}");
+ }
}
};
command addquote => {
help => q(syntax .addquote quote),
}, class extends NDIRC::Command {
- method execute($c,$quote) {
-
- die 'ARGS' unless $quote;
-
- push @FILE, $quote;
- my $num = $#FILE+1;
- $c->reply("Quote <b>$num</b> added");
- }
-};
+ method execute($c,$msg) {
-command findquote => {
- help => q(syntax .findquote pattern | findqre lets you use a regex pattern),
- alias => q(findqre),
-}, class extends NDIRC::Command {
- my $file;
- method execute($c,$pattern) {
- die 'ARGS' unless $pattern;
+ my ($quote) = $msg =~ /^\s*(.+?)\s*$/ or die 'ARGS';
- my $matcher;
- if ($self->name eq 'findqre'){
- if (defined (eval 'm/$pattern/ix')){
- $matcher = 'm/$pattern/ix';
- }else {
- $c->reply("bad regexp");
- return;
- }
- }else{
- $matcher = '(index uc($_), uc($pattern)) != -1';
- }
- $file = new File::Temp( SUFFIX => '.txt' );
- my $n = 1;
- my $match = 0;
- for (@FILE){
- chomp;
- if (eval $matcher){
- $match = 1;
- print $file "$n: $_\n";
- }
- $n++;
- }
- if ($match){
- $file->flush;
- $c->command(dcc => $c->nick => SEND => $file);
- }else{
- $c->reply("No quotes matching <b>$pattern.</b>");
- }
+ my $dbh = $c->model;
+ my ($qid) = $dbh->selectrow_array(q{
+INSERT INTO quotes (uid,quote) VALUES($1,$2) RETURNING qid
+ }, undef, $c->uid, $quote);
+ $c->reply("Quote <b>$qid</b> '$quote' added");
}
};
}, class extends NDIRC::Command {
method execute($c,$msg) {
my ($n) = $msg =~ /(\d+)/ or die 'ARGS';
- $n = $n-1;
- if (exists $FILE[$n]){
- my ($uid,$username) = $c->model->selectrow_array(q{
-SELECT uid,username FROM users where uid = ?
- },undef,$c->uid);
-
- my $text = $FILE[$n];
- push @OLDFILE,"Removed by $username ($uid): $text";
- splice @FILE,$n,1;
- $n++;
- my $num = $#FILE+1;
- $c->reply("Quote <b>$n</b> {$text} removed, number of quotes now: <b>$num</b>");
+ my $dbh = $c->model;
+ my $quote = $dbh->selectrow_hashref(q{
+WITH q AS (DELETE FROM quotes WHERE qid = $1 RETURNING qid,time,uid,quote)
+INSERT INTO removed_quotes (qid,time,uid,quote,removed_by)
+ SELECT *, $2 AS removed_by FROM q RETURNING quote;
+ }, undef, $n, $c->uid);
+ if ($quote){
+ $c->reply("Quote <b>$n</b> {$quote->{quote}} removed");
}else{
$c->reply("No such quote.");
}