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'} =~ /pg|postgres|mysql/i) {
48 $to_days = (&dbRawReturn("SELECT TO_DAYS(NOW()) - TO_DAYS('$sqldate')"))[0];
49 $dayname = (&dbRawReturn("SELECT DAYNAME('$sqldate')"))[0];
50 $monname = (&dbRawReturn("SELECT MONTHNAME('$sqldate')"))[0];
51 } elsif ($param{'DBType'} =~ /^dbm$/i) {
52 &DEBUG("Countdown: FIXME!!!");
58 &ERROR("Countdown: invalid DBType?");
62 if ($to_days =~ /^\D+$/) {
63 my $str = "to_days is not integer.";
70 my @gmtime = gmtime(time());
71 my $daysec = ($gmtime[2]*60*60) + ($gmtime[1]*60) + ($gmtime[0]);
72 my $time = ($to_days*24*60*60);
74 if ($to_days >= 0) { # already passed.
76 $reply = "T plus ". &Time2String($time) ." ago";
77 } else { # time to go.
78 $time = -$time - $daysec;
79 $reply = "T minus ". &Time2String($time);
81 $reply .= ", \002(\002$desc{$query}\002)\002 at $dayname, $monname $day $year";
83 &performStrictReply($reply .".");
85 } else { # no argument.
86 my $prefix = "Countdown list ";
88 &performStrictReply( &formListReply(0, $prefix, sort keys %date) );