}
case('forget') {
$main::statistics{'command_counter_forget'}++;
+ return handle_command_forget($command, $string, $mode, $kernel, $heap, $who, $nick, $where, $msg, $sender, $irc, $channel);
}
case('config') {
$main::statistics{'command_counter_config'}++;
}
+# handle_command_forget()
+#
+# command handler for the 'forget' command
+#
+# parameter:
+# - the command (lower case)
+# - the parameter string (may be empty)
+# - the command mode (admin/operator/user)
+# - POE kernel
+# - POE heap
+# - the full who of the message sender, including the nick name
+# - the nick name of the message sender
+# - the full origin of the message
+# - the message itself
+# - POE sender
+# - session irc handle
+# - the channel name
+# return:
+# - text to send back to the sender
+sub handle_command_forget {
+ my $command = shift;
+ my $string = shift;
+ my $mode = shift;
+ my $kernel = shift;
+ my $heap = shift;
+ my $who = shift;
+ my $nick = shift;
+ my $where = shift;
+ my $msg = shift;
+ my $sender = shift;
+ my $irc = shift;
+ my $channel = shift;
+
+ my $session = find_irc_session($irc);
+
+
+ # pre-translate this error message
+ my $database_error = "Database error";
+ # translate error message
+ $database_error = translate_text_for_channel($channel, 'database_error', $database_error);
+
+
+ # remove spaces at beginning and end
+ $string =~ s/^[\s\t]+//gs;
+ $string =~ s/[\s\t]+$//gs;
+
+
+ my ($url, @keywords);
+ my @keys = split(/\s+/, $string);
+ my $url_pattern = config_get_key2('search', 'urlpattern');
+
+ $main::db->rollback();
+
+
+ if (($keys[0] !~ /$url_pattern/i) and ($keys[1] =~ /$url_pattern/i) and (scalar(@keys) > 2)) {
+ my $answer = "Bad parameters";
+ # translate message
+ $answer = translate_text_for_channel($channel, 'search_bad_parameters', $answer);
+ return $answer;
+ }
+
+
+ my $rows = 0;
+ if (scalar(@keys) == 2 and $keys[1] =~ /$url_pattern/) {
+ # key url
+
+ my $st = $main::db->query("DELETE FROM docbot_key WHERE key = ? AND kurl IN (SELECT id FROM docbot_url WHERE url = ?)", $keys[0], $keys[1]);
+ if (!$st) {
+ $main::db->rollback();
+ return $database_error;
+ }
+ $rows = $st->rows;
+ $main::db->commit();
+ if ($rows == 0) {
+ my $answer = "Nothing to forget";
+ print_msg($answer, DEBUG);
+ # translate message
+ $answer = translate_text_for_channel($channel, 'forget_nothing_to_forget', $answer);
+ return $answer;
+ } elsif ($rows == 1) {
+ my $answer = "Forgot 1 url";
+ print_msg($answer, DEBUG);
+ # translate message
+ $answer = translate_text_for_channel($channel, 'forget_forgot_1_url', $answer);
+ return $answer;
+ } else {
+ my $answer = "Forgot %1 urls";
+ $answer =~ s/\%1/$rows/;
+ print_msg($answer, DEBUG);
+ # translate message
+ $answer = translate_text_for_channel($channel, 'forget_forgot_n_urls', $answer);
+ $answer =~ s/\%1/$rows/;
+ return $answer;
+ }
+
+ } elsif ($keys[0] =~ /$url_pattern/) {
+ # one or more urls
+
+ foreach my $keyword (@keys) {
+ if ($keyword =~ /^$url_pattern/) {
+ my $st = $main::db->query("DELETE FROM docbot_url WHERE url = ?", $keyword);
+ if (!$st) {
+ $main::db->rollback();
+ return $database_error;
+ }
+ $rows += $st->rows;
+ }
+ }
+ $main::db->commit();
+ if ($rows == 0) {
+ my $answer = "Nothing to forget";
+ print_msg($answer, DEBUG);
+ # translate message
+ $answer = translate_text_for_channel($channel, 'forget_nothing_to_forget', $answer);
+ return $answer;
+ } elsif ($rows == 1) {
+ my $answer = "Forgot 1 url";
+ print_msg($answer, DEBUG);
+ # translate message
+ $answer = translate_text_for_channel($channel, 'forget_forgot_1_url', $answer);
+ return $answer;
+ } else {
+ my $answer = "Forgot %1 urls";
+ $answer =~ s/\%1/$rows/;
+ print_msg($answer, DEBUG);
+ # translate message
+ $answer = translate_text_for_channel($channel, 'forget_forgot_n_urls', $answer);
+ $answer =~ s/\%1/$rows/;
+ return $answer;
+ }
+
+ } else {
+ # one or more keys
+
+ foreach my $keyword (@keys) {
+ my $st = $main::db->query("DELETE FROM docbot_key WHERE key = ?", $keyword);
+ if (!$st) {
+ $main::db->rollback();
+ return $database_error;
+ }
+ $rows += $st->rows;
+ }
+ $main::db->commit();
+ if ($rows == 0) {
+ my $answer = "Nothing to forget";
+ print_msg($answer, DEBUG);
+ # translate message
+ $answer = translate_text_for_channel($channel, 'forget_nothing_to_forget', $answer);
+ return $answer;
+ } elsif ($rows == 1) {
+ my $answer = "Forgot 1 key";
+ print_msg($answer, DEBUG);
+ # translate message
+ $answer = translate_text_for_channel($channel, 'forget_forgot_1_key', $answer);
+ return $answer;
+ } else {
+ my $answer = "Forgot %1 keys";
+ $answer =~ s/\%1/$rows/;
+ print_msg($answer, DEBUG);
+ # translate message
+ $answer = translate_text_for_channel($channel, 'forget_forgot_n_keys', $answer);
+ $answer =~ s/\%1/$rows/;
+ return $answer;
+ }
+
+ }
+
+
+ return 'ERROR';
+}
+
+
######################################################################
# IRC functions
######################################################################