2 # countdown.pl: Count down to a particular date.
4 # Version: v0.1 (20000104)
14 my $file = "$bot_base_dir/$param{'ircUser'}.countdown";
18 if (!open(IN,$file)) {
19 &ERROR("cannot open $file.");
27 if (/^(\d{8}) (\S+) (.*)$/) {
34 if (defined $query) { # argument.
35 if (!exists $date{$query}) {
36 &msg($who,"error: $query is not in my countdown list.");
40 $date{$query} =~ /^(\d{4})(\d{2})(\d{2})$/;
41 my($year,$month,$day) = ($1,$2,$3);
42 my $sqldate = "$1-$2-$3";
45 my ($to_days,$dayname,$monname);
47 if ($param{'DBType'} =~ /^mysql|sqlite$/i) {
48 $to_days = (&sqlRawReturn("SELECT TO_DAYS(NOW()) - TO_DAYS('$sqldate')"))[0];
49 $dayname = (&sqlRawReturn("SELECT DAYNAME('$sqldate')"))[0];
50 $monname = (&sqlRawReturn("SELECT MONTHNAME('$sqldate')"))[0];
52 } elsif ($param{'DBType'} =~ /^pgsql$/i) {
53 $to_days = (&sqlRawReturn("SELECT date_trunc('day',
54 'now'::timestamp - '$sqldate')"))[0];
55 $dayname = qw(Sun Mon Tue Wed Thu Fri Sat)[(&sqlRawReturn("SELECT extract(dow from timestamp '$sqldate')"))[0]];
56 $monname = qw(BAD Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec)[(&sqlRawReturn("SELECT extract(month from timestamp '$sqldate')"))[0]];
59 &ERROR("countdown: invalid DBType " . $param{'DBType'} . ".");
63 if ($to_days =~ /^\D+$/) {
64 my $str = "to_days is not integer.";
71 my @gmtime = gmtime(time());
72 my $daysec = ($gmtime[2]*60*60) + ($gmtime[1]*60) + ($gmtime[0]);
73 my $time = ($to_days*24*60*60);
75 if ($to_days >= 0) { # already passed.
77 $reply = "T plus ". &Time2String($time) ." ago";
78 } else { # time to go.
79 $time = -$time - $daysec;
80 $reply = "T minus ". &Time2String($time);
82 $reply .= ", \002(\002$desc{$query}\002)\002 at $dayname, $monname $day $year";
84 &performStrictReply($reply .".");
86 } else { # no argument.
87 my $prefix = "countdown list ";
89 &performStrictReply( &formListReply(0, $prefix, sort keys %date) );