From: timriker Date: Thu, 18 Nov 2004 08:03:48 +0000 (+0000) Subject: countdown cleanup X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=03e663ed8e6d40c772a776e54daaf0ede97ff81e;p=infobot.git countdown cleanup git-svn-id: https://svn.code.sf.net/p/infobot/code/trunk/blootbot@1040 c11ca15a-4712-0410-83d8-924469b57eb5 --- diff --git a/doc/cmd.list b/doc/cmd.list index 17600a6..cd417b9 100644 --- a/doc/cmd.list +++ b/doc/cmd.list @@ -11,7 +11,7 @@ &addCmdHook("extra", 'kernel', ('CODEREF' => 'Kernel::Kernel', &addCmdHook("extra", 'listauth', ('CODEREF' => 'CmdListAuth', &addCmdHook("extra", 'quote', ('CODEREF' => 'Quote::Quote', -&addCmdHook("extra", 'countdown', ('CODEREF' => 'Countdown', +&addCmdHook("extra", 'countdown', ('CODEREF' => 'countdown', &addCmdHook("extra", 'lart', ('CODEREF' => 'lart', &addCmdHook("extra", 'convert', ('CODEREF' => 'convert', &addCmdHook("extra", '(cookie|random)', ('CODEREF' => 'cookie', diff --git a/files/sample/blootbot.config b/files/sample/blootbot.config index ae1d239..919a512 100644 --- a/files/sample/blootbot.config +++ b/files/sample/blootbot.config @@ -194,7 +194,7 @@ set babelfish true # [0/1] offer free factoid cookies set cookie true -# [0/1] Countdown to specific dates +# [0/1] countdown to specific dates set countdown true # [0/1] Debian file and package search. diff --git a/src/CommandStubs.pl b/src/CommandStubs.pl index edd2941..5bc8162 100644 --- a/src/CommandStubs.pl +++ b/src/CommandStubs.pl @@ -195,9 +195,9 @@ sub parseCmdHook { &addCmdHook("extra", 'quote', ('CODEREF' => 'Quote::Quote', 'Forker' => 1, 'Identifier' => 'quote', 'Help' => 'quote', 'Cmdstats' => 'Quote') ); -&addCmdHook("extra", 'countdown', ('CODEREF' => 'Countdown', +&addCmdHook("extra", 'countdown', ('CODEREF' => 'countdown', 'Module' => 'countdown', 'Identifier' => 'countdown', - 'Cmdstats' => 'Countdown') ); + 'Cmdstats' => 'countdown') ); &addCmdHook("extra", 'lart', ('CODEREF' => 'lart', 'Identifier' => 'lart', 'Help' => 'lart') ); &addCmdHook("extra", 'convert', ('CODEREF' => 'convert', diff --git a/src/Modules/Countdown.pl b/src/Modules/Countdown.pl deleted file mode 100644 index a5e9edf..0000000 --- a/src/Modules/Countdown.pl +++ /dev/null @@ -1,95 +0,0 @@ -# -# Countdown.pl: Count down to a particular date. -# Author: dms -# Version: v0.1 (20000104) -# Created: 20000104 -# - -use strict; - -#use vars qw(); - -sub Countdown { - my ($query) = @_; - my $file = "$bot_base_dir/$param{'ircUser'}.countdown"; - my (%date, %desc); - my $reply; - - if (!open(IN,$file)) { - &ERROR("cannot open $file."); - return 0; - } - - while () { - chop; - s/[\s\t]+/ /g; - - if (/^(\d{8}) (\S+) (.*)$/) { - $date{$2} = $1; - $desc{$2} = $3; - } - } - close IN; - - if (defined $query) { # argument. - if (!exists $date{$query}) { - &msg($who,"error: $query is not in my countdown list."); - return 0; - } - - $date{$query} =~ /^(\d{4})(\d{2})(\d{2})$/; - my($year,$month,$day) = ($1,$2,$3); - my $sqldate = "$1-$2-$3"; - - ### SQL SPECIFIC. - my ($to_days,$dayname,$monname); - - if ($param{'DBType'} =~ /^mysql|sqlite$/i) { - $to_days = (&sqlRawReturn("SELECT TO_DAYS(NOW()) - TO_DAYS('$sqldate')"))[0]; - $dayname = (&sqlRawReturn("SELECT DAYNAME('$sqldate')"))[0]; - $monname = (&sqlRawReturn("SELECT MONTHNAME('$sqldate')"))[0]; - - } elsif ($param{'DBType'} =~ /^pgsql$/i) { - $to_days = (&sqlRawReturn("SELECT date_trunc('day', - 'now'::timestamp - '$sqldate')"))[0]; - $dayname = qw(Sun Mon Tue Wed Thu Fri Sat)[(&sqlRawReturn("SELECT extract(dow from timestamp '$sqldate')"))[0]]; - $monname = qw(BAD Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec)[(&sqlRawReturn("SELECT extract(month from timestamp '$sqldate')"))[0]]; - - } else { - &ERROR("Countdown: invalid DBType " . $param{'DBType'} . "."); - return 1; - } - - if ($to_days =~ /^\D+$/) { - my $str = "to_days is not integer."; - &msg($who,$str); - &ERROR($str); - - return 1; - } - - my @gmtime = gmtime(time()); - my $daysec = ($gmtime[2]*60*60) + ($gmtime[1]*60) + ($gmtime[0]); - my $time = ($to_days*24*60*60); - - if ($to_days >= 0) { # already passed. - $time += $daysec; - $reply = "T plus ". &Time2String($time) ." ago"; - } else { # time to go. - $time = -$time - $daysec; - $reply = "T minus ". &Time2String($time); - } - $reply .= ", \002(\002$desc{$query}\002)\002 at $dayname, $monname $day $year"; - - &performStrictReply($reply ."."); - return 1; - } else { # no argument. - my $prefix = "Countdown list "; - - &performStrictReply( &formListReply(0, $prefix, sort keys %date) ); - - return 1; - } -} - -1; diff --git a/src/Modules/countdown.pl b/src/Modules/countdown.pl new file mode 100644 index 0000000..04230c3 --- /dev/null +++ b/src/Modules/countdown.pl @@ -0,0 +1,95 @@ +# +# countdown.pl: Count down to a particular date. +# Author: dms +# Version: v0.1 (20000104) +# Created: 20000104 +# + +use strict; + +#use vars qw(); + +sub countdown { + my ($query) = @_; + my $file = "$bot_base_dir/$param{'ircUser'}.countdown"; + my (%date, %desc); + my $reply; + + if (!open(IN,$file)) { + &ERROR("cannot open $file."); + return 0; + } + + while () { + chop; + s/[\s\t]+/ /g; + + if (/^(\d{8}) (\S+) (.*)$/) { + $date{$2} = $1; + $desc{$2} = $3; + } + } + close IN; + + if (defined $query) { # argument. + if (!exists $date{$query}) { + &msg($who,"error: $query is not in my countdown list."); + return 0; + } + + $date{$query} =~ /^(\d{4})(\d{2})(\d{2})$/; + my($year,$month,$day) = ($1,$2,$3); + my $sqldate = "$1-$2-$3"; + + ### SQL SPECIFIC. + my ($to_days,$dayname,$monname); + + if ($param{'DBType'} =~ /^mysql|sqlite$/i) { + $to_days = (&sqlRawReturn("SELECT TO_DAYS(NOW()) - TO_DAYS('$sqldate')"))[0]; + $dayname = (&sqlRawReturn("SELECT DAYNAME('$sqldate')"))[0]; + $monname = (&sqlRawReturn("SELECT MONTHNAME('$sqldate')"))[0]; + + } elsif ($param{'DBType'} =~ /^pgsql$/i) { + $to_days = (&sqlRawReturn("SELECT date_trunc('day', + 'now'::timestamp - '$sqldate')"))[0]; + $dayname = qw(Sun Mon Tue Wed Thu Fri Sat)[(&sqlRawReturn("SELECT extract(dow from timestamp '$sqldate')"))[0]]; + $monname = qw(BAD Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec)[(&sqlRawReturn("SELECT extract(month from timestamp '$sqldate')"))[0]]; + + } else { + &ERROR("countdown: invalid DBType " . $param{'DBType'} . "."); + return 1; + } + + if ($to_days =~ /^\D+$/) { + my $str = "to_days is not integer."; + &msg($who,$str); + &ERROR($str); + + return 1; + } + + my @gmtime = gmtime(time()); + my $daysec = ($gmtime[2]*60*60) + ($gmtime[1]*60) + ($gmtime[0]); + my $time = ($to_days*24*60*60); + + if ($to_days >= 0) { # already passed. + $time += $daysec; + $reply = "T plus ". &Time2String($time) ." ago"; + } else { # time to go. + $time = -$time - $daysec; + $reply = "T minus ". &Time2String($time); + } + $reply .= ", \002(\002$desc{$query}\002)\002 at $dayname, $monname $day $year"; + + &performStrictReply($reply ."."); + return 1; + } else { # no argument. + my $prefix = "countdown list "; + + &performStrictReply( &formListReply(0, $prefix, sort keys %date) ); + + return 1; + } +} + +1; diff --git a/src/modules.pl b/src/modules.pl index 2070d67..453b24b 100644 --- a/src/modules.pl +++ b/src/modules.pl @@ -25,7 +25,7 @@ if ($@) { "babelfish" => "babelfish.pl", "botmail" => "botmail.pl", "BZFlag" => "BZFlag.pl", - "countdown" => "Countdown.pl", + "countdown" => "countdown.pl", "debian" => "Debian.pl", "debianExtra" => "DebianExtra.pl", "dict" => "Dict.pl",