2010-03-23 19:24:02 +01:00
# File: Quotegrabs.pm
2010-03-24 07:47:40 +01:00
# Author: pragma_
2010-03-17 07:36:54 +01:00
#
2015-09-08 20:46:08 +02:00
# Purpose: Allows users to "grab" quotes from message history and store them for later retrieval.
2010-03-17 07:36:54 +01:00
2017-03-05 22:33:31 +01:00
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
2019-09-01 20:01:18 +02:00
package Plugins::Quotegrabs ;
2010-03-17 07:36:54 +01:00
use warnings ;
use strict ;
2019-07-11 03:40:53 +02:00
use feature 'unicode_strings' ;
2010-03-23 19:24:02 +01:00
use HTML::Entities ;
2011-12-04 02:13:21 +01:00
use Time::Duration ;
use Time::HiRes qw( gettimeofday ) ;
2019-07-25 03:03:38 +02:00
use Getopt::Long qw( GetOptionsFromArray ) ;
2010-03-23 19:24:02 +01:00
2019-09-01 20:01:18 +02:00
use Plugins::Quotegrabs::Quotegrabs_SQLite ; # use SQLite backend for quotegrabs database
#use Plugins::Quotegrabs::Quotegrabs_Hashtable; # use Perl hashtable backend for quotegrabs database
2017-11-24 00:19:28 +01:00
use PBot::Utils::ValidateString ;
2014-05-06 07:15:27 +02:00
2013-10-11 20:17:07 +02:00
use POSIX qw( strftime ) ;
2010-03-23 19:24:02 +01:00
sub new {
2019-05-28 18:19:42 +02:00
if ( ref ( $ _ [ 1 ] ) eq 'HASH' ) {
2010-03-23 19:24:02 +01:00
Carp:: croak ( "Options to Quotegrabs should be key/value pairs, not hash reference" ) ;
}
my ( $ class , % conf ) = @ _ ;
my $ self = bless { } , $ class ;
$ self - > initialize ( % conf ) ;
return $ self ;
}
sub initialize {
my ( $ self , % conf ) = @ _ ;
2019-09-01 20:01:18 +02:00
$ self - > { pbot } = $ conf { pbot } // Carp:: croak ( "Missing pbot reference in Quotegrabs" ) ;
$ self - > { filename } = $ conf { quotegrabs_file } // $ self - > { pbot } - > { registry } - > get_value ( 'general' , 'data_dir' ) . '/quotegrabs.sqlite3' ;
2014-05-06 07:15:27 +02:00
2019-09-01 20:01:18 +02:00
$ self - > { database } = Plugins::Quotegrabs::Quotegrabs_SQLite - > new ( pbot = > $ self - > { pbot } , filename = > $ self - > { filename } ) ;
#$self->{database} = Plugins::Quotegrabs::Quotegrabs_Hashtable->new(pbot => $self->{pbot}, filename => $self->{filename});
2014-05-13 12:15:52 +02:00
$ self - > { database } - > begin ( ) ;
2010-03-23 19:24:02 +01:00
2014-05-17 00:11:31 +02:00
$ self - > { pbot } - > { atexit } - > register ( sub { $ self - > { database } - > end ( ) ; return ; } ) ;
2019-09-01 20:01:18 +02:00
$ self - > { pbot } - > { commands } - > register ( sub { $ self - > grab_quotegrab ( @ _ ) } , 'grab' , 0 ) ;
$ self - > { pbot } - > { commands } - > register ( sub { $ self - > show_quotegrab ( @ _ ) } , 'getq' , 0 ) ;
$ self - > { pbot } - > { commands } - > register ( sub { $ self - > delete_quotegrab ( @ _ ) } , 'delq' , 0 ) ;
$ self - > { pbot } - > { commands } - > register ( sub { $ self - > show_random_quotegrab ( @ _ ) } , 'rq' , 0 ) ;
}
sub unload {
my ( $ self ) = @ _ ;
$ self - > { pbot } - > { commands } - > unregister ( 'grab' ) ;
$ self - > { pbot } - > { commands } - > unregister ( 'getq' ) ;
$ self - > { pbot } - > { commands } - > unregister ( 'delq' ) ;
$ self - > { pbot } - > { commands } - > unregister ( 'rq' ) ;
2010-03-23 19:24:02 +01:00
}
2013-10-12 13:00:29 +02:00
sub uniq { my % seen ; grep ! $ seen { $ _ } + + , @ _ }
2019-06-26 18:34:19 +02:00
sub export_quotegrabs {
2010-03-23 19:24:02 +01:00
my $ self = shift ;
2019-12-31 05:01:04 +01:00
$ self - > { export_path } = $ self - > { pbot } - > { registry } - > get_value ( 'general' , 'data_dir' ) . '/quotegrabs.html' ;
2014-05-06 07:15:27 +02:00
2014-05-13 12:15:52 +02:00
my $ quotegrabs = $ self - > { database } - > get_all_quotegrabs ( ) ;
2014-05-06 07:15:27 +02:00
2010-03-23 19:24:02 +01:00
my $ text ;
2013-10-11 20:17:07 +02:00
my $ table_id = 1 ;
2010-03-23 19:24:02 +01:00
my $ had_table = 0 ;
open FILE , "> $self->{export_path}" or return "Could not open export path." ;
my $ time = localtime ;
2019-12-20 08:39:46 +01:00
my $ botnick = $ self - > { pbot } - > { registry } - > get_value ( 'irc' , 'botnick' ) ;
2013-10-11 20:17:07 +02:00
print FILE "<html>\n<head><link href=\"css/blue.css\" rel=\"stylesheet\" type=\"text/css\">\n" ;
print FILE '<script type="text/javascript" src="js/jquery-latest.js"></script>' . "\n" ;
print FILE '<script type="text/javascript" src="js/jquery.tablesorter.js"></script>' . "\n" ;
2014-03-03 10:24:33 +01:00
print FILE '<script type="text/javascript" src="js/picnet.table.filter.min.js"></script>' . "\n" ;
2019-12-20 08:39:46 +01:00
print FILE "</head>\n<body><i>Generated at $time</i><hr><h2>$botnick\'s Quotegrabs</h2>\n" ;
2010-03-23 19:24:02 +01:00
my $ i = 0 ;
2013-10-13 12:23:20 +02:00
my $ last_channel = "" ;
2014-05-06 07:15:27 +02:00
foreach my $ quotegrab ( sort { $$ a { channel } cmp $$ b { channel } or $$ a { nick } cmp $$ b { nick } } @$ quotegrabs ) {
2019-05-28 18:19:42 +02:00
if ( not $ quotegrab - > { channel } =~ /^$last_channel$/i ) {
2017-11-24 00:19:28 +01:00
print FILE "<a href='#" . encode_entities ( $ quotegrab - > { channel } ) . "'>" . encode_entities ( $ quotegrab - > { channel } ) . "</a><br>\n" ;
2013-10-13 12:23:20 +02:00
$ last_channel = $ quotegrab - > { channel } ;
}
}
$ last_channel = "" ;
2014-05-06 07:15:27 +02:00
foreach my $ quotegrab ( sort { $$ a { channel } cmp $$ b { channel } or lc $$ a { nick } cmp lc $$ b { nick } } @$ quotegrabs ) {
2019-05-28 18:19:42 +02:00
if ( not $ quotegrab - > { channel } =~ /^$last_channel$/i ) {
2013-10-11 20:17:07 +02:00
print FILE "</tbody>\n</table>\n" if $ had_table ;
2017-11-24 00:19:28 +01:00
print FILE "<a name='" . encode_entities ( $ quotegrab - > { channel } ) . "'></a>\n" ;
print FILE "<hr><h3>" . encode_entities ( $ quotegrab - > { channel } ) . "</h3><hr>\n" ;
2013-10-11 20:17:07 +02:00
print FILE "<table border=\"0\" id=\"table$table_id\" class=\"tablesorter\">\n" ;
print FILE "<thead>\n<tr>\n" ;
print FILE "<th>id </th>\n" ;
print FILE "<th>author(s)</th>\n" ;
print FILE "<th>quote</th>\n" ;
print FILE "<th>date</th>\n" ;
print FILE "<th>grabbed by</th>\n" ;
print FILE "</tr>\n</thead>\n<tbody>\n" ;
2010-03-23 19:24:02 +01:00
$ had_table = 1 ;
2013-10-11 20:17:07 +02:00
$ table_id + + ;
2010-03-23 19:24:02 +01:00
}
$ last_channel = $ quotegrab - > { channel } ;
$ i + + ;
2019-05-28 18:19:42 +02:00
if ( $ i % 2 ) {
2010-03-23 19:24:02 +01:00
print FILE "<tr bgcolor=\"#dddddd\">\n" ;
} else {
print FILE "<tr>\n" ;
}
2013-10-11 20:17:07 +02:00
2010-03-23 19:24:02 +01:00
print FILE "<td>" . ( $ quotegrab - > { id } ) . "</td>" ;
2013-10-11 20:17:07 +02:00
my @ nicks = split /\+/ , $ quotegrab - > { nick } ;
2013-10-12 13:00:29 +02:00
$ text = join ', ' , uniq ( @ nicks ) ;
2013-10-11 20:17:07 +02:00
print FILE "<td>" . encode_entities ( $ text ) . "</td>" ;
my $ nick ;
$ text = $ quotegrab - > { text } ;
2019-05-28 18:19:42 +02:00
if ( $ text =~ s/^\/me\s+// ) {
2013-10-11 20:17:07 +02:00
$ nick = "* $nicks[0]" ;
} else {
$ nick = "<$nicks[0]>" ;
}
2019-06-26 18:34:19 +02:00
$ text = "<td><b>" . encode_entities ( $ nick ) . "</b> " . encode_entities ( $ text ) . "</td>\n" ;
2010-03-23 19:24:02 +01:00
print FILE $ text ;
2019-06-26 18:34:19 +02:00
2013-10-11 20:17:07 +02:00
print FILE "<td>" . encode_entities ( strftime "%Y/%m/%d %a %H:%M:%S" , localtime $ quotegrab - > { timestamp } ) . "</td>\n" ;
print FILE "<td>" . encode_entities ( $ quotegrab - > { grabbed_by } ) . "</td>\n" ;
print FILE "</tr>\n" ;
2010-03-23 19:24:02 +01:00
}
2010-03-17 07:36:54 +01:00
2013-10-11 20:17:07 +02:00
print FILE "</tbody>\n</table>\n" if $ had_table ;
print FILE "<script type='text/javascript'>\n" ;
$ table_id - - ;
2013-10-12 06:35:01 +02:00
print FILE '$(document).ready(function() {' . "\n" ;
2019-05-28 18:19:42 +02:00
while ( $ table_id > 0 ) {
2013-10-12 06:35:01 +02:00
print FILE '$("#table' . $ table_id . '").tablesorter();' . "\n" ;
2014-03-03 10:24:33 +01:00
print FILE '$("#table' . $ table_id . '").tableFilter();' . "\n" ;
2013-10-11 20:17:07 +02:00
$ table_id - - ;
}
2013-10-12 06:35:01 +02:00
print FILE "});\n" ;
2013-10-11 20:17:07 +02:00
print FILE "</script>\n" ;
2013-10-12 15:36:36 +02:00
print FILE "</body>\n</html>\n" ;
2010-03-23 19:24:02 +01:00
close ( FILE ) ;
2019-12-31 05:01:04 +01:00
return "$i quotegrabs exported." ;
2010-03-23 19:24:02 +01:00
}
2010-03-17 07:36:54 +01:00
2010-03-23 19:24:02 +01:00
sub grab_quotegrab {
my ( $ self , $ from , $ nick , $ user , $ host , $ arguments ) = @ _ ;
2010-03-17 07:36:54 +01:00
2019-05-28 18:19:42 +02:00
if ( not defined $ from ) {
2014-05-18 22:09:05 +02:00
$ self - > { pbot } - > { logger } - > log ( "Command missing ~from parameter!\n" ) ;
2010-03-17 07:36:54 +01:00
return "" ;
}
2019-05-28 18:19:42 +02:00
if ( not defined $ arguments or not length $ arguments ) {
2019-07-25 03:03:38 +02:00
return "Usage: grab <nick> [history [channel]] [+ <nick> [history [channel]] ...] -- where [history] is an optional regex argument; e.g., to grab a message containing 'pizza', use `grab nick pizza`; you can chain grabs with + to grab multiple messages" ;
2010-03-17 07:36:54 +01:00
}
2011-01-20 01:15:58 +01:00
$ arguments = lc $ arguments ;
2013-10-04 06:55:45 +02:00
my @ grabs = split /\s\+\s/ , $ arguments ;
2010-03-17 07:36:54 +01:00
2013-10-04 06:55:45 +02:00
my ( $ grab_nick , $ grab_history , $ channel , $ grab_nicks , $ grab_text ) ;
2010-03-17 07:36:54 +01:00
2013-10-04 06:55:45 +02:00
foreach my $ grab ( @ grabs ) {
2019-06-09 22:57:08 +02:00
( $ grab_nick , $ grab_history , $ channel ) = $ self - > { pbot } - > { interpreter } - > split_line ( $ grab , strip_quotes = > 1 ) ;
2010-03-17 07:36:54 +01:00
2014-05-13 12:15:52 +02:00
$ grab_history = $ nick eq $ grab_nick ? 2 : 1 if not defined $ grab_history ; # skip grab command if grabbing self without arguments
2013-10-04 06:55:45 +02:00
$ channel = $ from if not defined $ channel ;
2011-02-11 03:46:35 +01:00
2019-05-28 18:19:42 +02:00
if ( not $ channel =~ m/^#/ ) {
2013-11-14 07:35:40 +01:00
return "'$channel' is not a valid channel; usage: grab <nick> [[history] channel] (you must specify a history parameter before the channel parameter)" ;
}
2014-05-13 12:15:52 +02:00
my ( $ account , $ found_nick ) = $ self - > { pbot } - > { messagehistory } - > { database } - > find_message_account_by_nick ( $ grab_nick ) ;
2010-03-17 07:36:54 +01:00
2019-05-28 18:19:42 +02:00
if ( not defined $ account ) {
2014-05-13 12:15:52 +02:00
return "I don't know anybody named $grab_nick" ;
2013-10-04 06:55:45 +02:00
}
2012-08-01 11:57:43 +02:00
2015-05-12 06:27:22 +02:00
$ found_nick =~ s/!.*$// ;
2014-05-13 12:15:52 +02:00
$ grab_nick = $ found_nick ; # convert nick to proper casing
2010-03-17 07:36:54 +01:00
2014-05-13 12:15:52 +02:00
my $ message ;
2013-10-04 06:55:45 +02:00
2019-05-28 18:19:42 +02:00
if ( $ grab_history =~ /^\d+$/ ) {
2013-10-04 06:55:45 +02:00
# integral history
2014-05-13 12:15:52 +02:00
my $ max_messages = $ self - > { pbot } - > { messagehistory } - > { database } - > get_max_messages ( $ account , $ channel ) ;
2019-05-28 18:19:42 +02:00
if ( $ grab_history < 1 || $ grab_history > $ max_messages ) {
2014-05-13 12:15:52 +02:00
return "Please choose a history between 1 and $max_messages" ;
2013-10-04 06:55:45 +02:00
}
2014-05-13 12:15:52 +02:00
$ grab_history - - ;
$ message = $ self - > { pbot } - > { messagehistory } - > { database } - > recall_message_by_count ( $ account , $ channel , $ grab_history , 'grab' ) ;
2013-10-04 06:55:45 +02:00
} else {
# regex history
2014-05-13 12:15:52 +02:00
$ message = $ self - > { pbot } - > { messagehistory } - > { database } - > recall_message_by_text ( $ account , $ channel , $ grab_history , 'grab' ) ;
2019-05-28 18:19:42 +02:00
if ( not defined $ message ) {
2014-05-13 12:15:52 +02:00
return "No such message for nick $grab_nick in channel $channel containing text '$grab_history'" ;
2012-08-01 11:57:43 +02:00
}
2013-10-04 06:55:45 +02:00
}
2012-08-01 11:57:43 +02:00
2014-05-18 22:09:05 +02:00
$ self - > { pbot } - > { logger } - > log ( "$nick ($from) grabbed <$grab_nick/$channel> $message->{msg}\n" ) ;
2013-10-04 06:55:45 +02:00
2019-05-28 18:19:42 +02:00
if ( not defined $ grab_nicks ) {
2013-10-04 06:55:45 +02:00
$ grab_nicks = $ grab_nick ;
} else {
$ grab_nicks . = "+$grab_nick" ;
}
2014-05-13 12:15:52 +02:00
my $ text = $ message - > { msg } ;
2013-10-04 06:55:45 +02:00
2019-05-28 18:19:42 +02:00
if ( not defined $ grab_text ) {
2013-10-04 06:55:45 +02:00
$ grab_text = $ text ;
} else {
2019-05-28 18:19:42 +02:00
if ( $ text =~ s/^\/me\s+// ) {
2013-10-04 06:55:45 +02:00
$ grab_text . = " * $grab_nick $text" ;
2012-08-01 11:57:43 +02:00
} else {
2013-10-04 06:55:45 +02:00
$ grab_text . = " <$grab_nick> $text" ;
2012-08-01 11:57:43 +02:00
}
}
}
2010-03-17 07:36:54 +01:00
my $ quotegrab = { } ;
2013-10-04 06:55:45 +02:00
$ quotegrab - > { nick } = $ grab_nicks ;
2010-03-17 07:36:54 +01:00
$ quotegrab - > { channel } = $ channel ;
2013-10-04 06:55:45 +02:00
$ quotegrab - > { timestamp } = gettimeofday ;
$ quotegrab - > { grabbed_by } = "$nick!$user\@$host" ;
2017-11-24 00:19:28 +01:00
$ quotegrab - > { text } = validate_string ( $ grab_text ) ;
2014-05-06 07:15:27 +02:00
$ quotegrab - > { id } = undef ;
2019-06-26 18:34:19 +02:00
2014-05-13 12:15:52 +02:00
$ quotegrab - > { id } = $ self - > { database } - > add_quotegrab ( $ quotegrab ) ;
2014-05-06 07:15:27 +02:00
2019-05-28 18:19:42 +02:00
if ( not defined $ quotegrab - > { id } ) {
2014-05-06 07:15:27 +02:00
return "Failed to grab quote." ;
}
$ self - > export_quotegrabs ( ) ;
2019-06-26 18:34:19 +02:00
2013-06-04 19:09:30 +02:00
my $ text = $ quotegrab - > { text } ;
2013-10-04 06:55:45 +02:00
( $ grab_nick ) = split /\+/ , $ grab_nicks , 2 ;
2013-06-04 19:09:30 +02:00
2017-12-03 19:12:05 +01:00
if ( $ text =~ s/^(NICKCHANGE)\b/changed nick to/ or
$ text =~ s/^(KICKED|QUIT)\b/lc "$1"/e or
$ text =~ s/^(JOIN|PART)\b/lc "$1ed"/e ) {
# fix ugly "[nick] quit Quit: Leaving." messages
$ text =~ s/^(quit) (.*)/$1 ($2)/ ;
return "Quote grabbed: $quotegrab->{id}: $grab_nick $text" ;
} elsif ( $ text =~ s/^\/me\s+// ) {
return "Quote grabbed: $quotegrab->{id}: * $grab_nick $text" ;
2013-06-04 19:09:30 +02:00
} else {
2017-12-03 19:12:05 +01:00
return "Quote grabbed: $quotegrab->{id}: <$grab_nick> $text" ;
2013-06-04 19:09:30 +02:00
}
2010-03-17 07:36:54 +01:00
}
sub delete_quotegrab {
2010-03-23 19:24:02 +01:00
my ( $ self , $ from , $ nick , $ user , $ host , $ arguments ) = @ _ ;
2014-05-13 12:15:52 +02:00
my $ quotegrab = $ self - > { database } - > get_quotegrab ( $ arguments ) ;
2010-03-23 19:24:02 +01:00
2019-05-28 18:19:42 +02:00
if ( not defined $ quotegrab ) {
2014-05-06 07:15:27 +02:00
return "/msg $nick No quotegrab matching id $arguments found." ;
}
2013-10-26 04:39:54 +02:00
2020-01-25 21:31:08 +01:00
if ( not $ self - > { pbot } - > { users } - > loggedin_admin ( $ from , "$nick!$user\@$host" ) and $ quotegrab - > { grabbed_by } ne "$nick!$user\@$host" ) {
2013-10-26 04:39:54 +02:00
return "You are not the grabber of this quote." ;
}
2014-05-13 12:15:52 +02:00
$ self - > { database } - > delete_quotegrab ( $ arguments ) ;
2014-05-06 07:15:27 +02:00
$ self - > export_quotegrabs ( ) ;
2013-06-04 19:09:30 +02:00
my $ text = $ quotegrab - > { text } ;
2013-10-05 00:14:16 +02:00
my ( $ first_nick ) = split /\+/ , $ quotegrab - > { nick } , 2 ;
2019-05-28 18:19:42 +02:00
if ( $ text =~ s/^\/me\s+// ) {
2013-10-05 00:14:16 +02:00
return "Deleted $arguments: * $first_nick $text" ;
2013-06-04 19:09:30 +02:00
} else {
2013-10-05 00:14:16 +02:00
return "Deleted $arguments: <$first_nick> $text" ;
2013-06-04 19:09:30 +02:00
}
2010-03-17 07:36:54 +01:00
}
sub show_quotegrab {
2010-03-23 19:24:02 +01:00
my ( $ self , $ from , $ nick , $ user , $ host , $ arguments ) = @ _ ;
2010-03-17 07:36:54 +01:00
2014-05-13 12:15:52 +02:00
my $ quotegrab = $ self - > { database } - > get_quotegrab ( $ arguments ) ;
2014-05-06 07:15:27 +02:00
2019-05-28 18:19:42 +02:00
if ( not defined $ quotegrab ) {
2014-05-06 07:15:27 +02:00
return "/msg $nick No quotegrab matching id $arguments found." ;
2010-03-17 07:36:54 +01:00
}
2011-12-04 02:13:21 +01:00
my $ timestamp = $ quotegrab - > { timestamp } ;
my $ ago = ago ( gettimeofday - $ timestamp ) ;
2013-06-04 19:09:30 +02:00
my $ text = $ quotegrab - > { text } ;
2013-10-05 00:14:16 +02:00
my ( $ first_nick ) = split /\+/ , $ quotegrab - > { nick } , 2 ;
2013-06-04 19:09:30 +02:00
2019-05-28 18:19:42 +02:00
if ( $ text =~ s/^\/me\s+// ) {
2014-03-15 09:12:52 +01:00
return "$arguments: grabbed by $quotegrab->{grabbed_by} in $quotegrab->{channel} on " . localtime ( $ timestamp ) . " [$ago] * $first_nick $text" ;
2013-06-04 19:09:30 +02:00
} else {
2014-03-15 09:12:52 +01:00
return "$arguments: grabbed by $quotegrab->{grabbed_by} in $quotegrab->{channel} on " . localtime ( $ timestamp ) . " [$ago] <$first_nick> $text" ;
2013-06-04 19:09:30 +02:00
}
2010-03-17 07:36:54 +01:00
}
sub show_random_quotegrab {
2010-03-23 19:24:02 +01:00
my ( $ self , $ from , $ nick , $ user , $ host , $ arguments ) = @ _ ;
2010-03-17 07:36:54 +01:00
my @ quotes = ( ) ;
2014-03-15 09:07:05 +01:00
my ( $ nick_search , $ channel_search , $ text_search ) ;
2010-03-17 07:36:54 +01:00
2019-05-28 18:19:42 +02:00
if ( not defined $ from ) {
2014-05-18 22:09:05 +02:00
$ self - > { pbot } - > { logger } - > log ( "Command missing ~from parameter!\n" ) ;
2010-03-17 07:36:54 +01:00
return "" ;
}
2019-07-25 03:03:38 +02:00
my $ usage = 'Usage: rq [nick [channel [text]]] [-c <channel>] [-t <text>]' ;
2014-04-30 23:37:28 +02:00
2019-05-28 18:19:42 +02:00
if ( defined $ arguments ) {
2014-04-30 23:37:28 +02:00
my $ getopt_error ;
local $ SIG { __WARN__ } = sub {
$ getopt_error = shift ;
chomp $ getopt_error ;
} ;
2014-03-15 09:07:05 +01:00
2019-07-25 03:03:38 +02:00
my @ opt_args = $ self - > { pbot } - > { interpreter } - > split_line ( $ arguments , preserve_escapes = > 1 , strip_quotes = > 1 ) ;
2019-09-01 20:01:18 +02:00
GetOptionsFromArray ( \ @ opt_args ,
2019-06-26 18:34:19 +02:00
'channel|c=s' = > \ $ channel_search ,
2014-04-30 23:37:28 +02:00
'text|t=s' = > \ $ text_search ) ;
2014-03-15 09:07:05 +01:00
2014-04-30 23:37:28 +02:00
return "$getopt_error -- $usage" if defined $ getopt_error ;
2014-03-15 09:07:05 +01:00
2019-07-25 03:03:38 +02:00
$ nick_search = shift @ opt_args ;
$ channel_search = shift @ opt_args if not defined $ channel_search ;
$ text_search = shift @ opt_args if not defined $ text_search ;
2014-03-15 09:07:05 +01:00
2019-05-28 18:19:42 +02:00
if ( $ nick_search =~ m/^#/ ) {
2014-04-28 03:52:49 +02:00
my $ tmp = $ channel_search ;
$ channel_search = $ nick_search ;
$ nick_search = $ tmp ;
}
2019-05-28 18:19:42 +02:00
if ( not defined $ channel_search ) {
2010-03-17 07:36:54 +01:00
$ channel_search = $ from ;
}
2014-05-06 07:15:27 +02:00
}
2010-03-17 07:36:54 +01:00
2019-07-25 03:03:38 +02:00
if ( defined $ channel_search and $ channel_search !~ /^#/ ) {
if ( $ channel_search eq $ nick ) {
$ channel_search = undef ;
} elsif ( $ channel_search =~ m/^\./ ) {
# do nothing
} else {
return "$channel_search is not a valid channel." ;
}
}
2010-03-17 07:36:54 +01:00
2014-05-13 12:15:52 +02:00
my $ quotegrab = $ self - > { database } - > get_random_quotegrab ( $ nick_search , $ channel_search , $ text_search ) ;
2019-06-26 18:34:19 +02:00
2019-05-28 18:19:42 +02:00
if ( not defined $ quotegrab ) {
2014-02-10 19:04:05 +01:00
my $ result = "No quotes grabbed " ;
2019-05-28 18:19:42 +02:00
if ( defined $ nick_search ) {
2014-04-28 03:52:49 +02:00
$ result . = "for nick $nick_search " ;
2010-03-17 07:36:54 +01:00
}
2014-02-10 19:07:34 +01:00
2019-05-28 18:19:42 +02:00
if ( defined $ channel_search ) {
2014-04-28 03:52:49 +02:00
$ result . = "in channel $channel_search " ;
2014-02-10 19:07:34 +01:00
}
2019-06-26 18:34:19 +02:00
2019-05-28 18:19:42 +02:00
if ( defined $ text_search ) {
2014-04-28 03:52:49 +02:00
$ result . = "matching text '$text_search' " ;
2014-02-10 19:04:05 +01:00
}
2014-04-30 23:37:28 +02:00
return $ result . "yet ($usage)." ; ;
2010-03-17 07:36:54 +01:00
}
2013-06-04 19:09:30 +02:00
my $ text = $ quotegrab - > { text } ;
2013-10-05 00:14:16 +02:00
my ( $ first_nick ) = split /\+/ , $ quotegrab - > { nick } , 2 ;
2013-06-04 19:09:30 +02:00
2019-05-28 18:19:42 +02:00
if ( $ text =~ s/^\/me\s+// ) {
2014-04-30 23:37:28 +02:00
return "$quotegrab->{id}: " . ( ( $ channel_search eq '.*' or $ quotegrab - > { channel } ne $ from ) ? "[$quotegrab->{channel}] " : "" ) . "* $first_nick $text" ;
2013-06-04 19:09:30 +02:00
} else {
2014-04-30 23:37:28 +02:00
return "$quotegrab->{id}: " . ( ( $ channel_search eq '.*' or $ quotegrab - > { channel } ne $ from ) ? "[$quotegrab->{channel}] " : "" ) . "<$first_nick> $text" ;
2013-06-04 19:09:30 +02:00
}
2010-03-17 07:36:54 +01:00
}
1 ;