From f77fc717d6dca6300c5c6c05e7b14bcc031c22ba Mon Sep 17 00:00:00 2001 From: Andreas Scherbaum Date: Mon, 11 Jun 2012 23:00:55 +0200 Subject: [PATCH] - add "forget" functionality --- docbot.conf | 5 ++ docbot.pl | 173 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 178 insertions(+) diff --git a/docbot.conf b/docbot.conf index c63bbc1..88e3eaf 100644 --- a/docbot.conf +++ b/docbot.conf @@ -93,6 +93,11 @@ translations: search_add_n_keywords: '%1 Schlüsselwörter erfolgreich hinzugefügt' search_add_url_1_keyword: 'URL mit 1 Schlüsselwort erfolgreich hinzugefügt' search_add_url_n_keywords: 'URL mit %1 Schlüsselwörtern erfolgreich hinzugefügt' + forget_nothing_to_forget: 'Nichts zu vergessen' + forget_forgot_1_url: '1 URL vergessen' + forget_forgot_n_urls: '%1 URLs vergessen' + forget_forgot_1_key: '1 Schlüsselwort vergessen' + forget_forgot_n_keys: '%1 Schlüsselwörter vergessen' fr: learn: 'apprendre' forget: 'oublier' diff --git a/docbot.pl b/docbot.pl index a142dc7..539914b 100755 --- a/docbot.pl +++ b/docbot.pl @@ -1789,6 +1789,7 @@ sub handle_command { } 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'}++; @@ -2380,6 +2381,178 @@ sub handle_command_learn { } +# 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 ###################################################################### -- 2.39.5