2 # countdown.pl: Count down to a particular date.
4 # Version: v0.1 (20000104)
14 my $file = "$bot_data_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(2)?)$/i ) {
49 ( &sqlRawReturn("SELECT TO_DAYS(NOW()) - TO_DAYS('$sqldate')") )
51 $dayname = ( &sqlRawReturn("SELECT DAYNAME('$sqldate')") )[0];
52 $monname = ( &sqlRawReturn("SELECT MONTHNAME('$sqldate')") )[0];
55 elsif ( $param{'DBType'} =~ /^pgsql$/i ) {
58 "SELECT date_trunc('day',
59 'now'::timestamp - '$sqldate')"
62 $dayname = qw(Sun Mon Tue Wed Thu Fri Sat) [
65 "SELECT extract(dow from timestamp '$sqldate')")
68 $monname = qw(BAD Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec) [
71 "SELECT extract(month from timestamp '$sqldate')")
77 &ERROR( "countdown: invalid DBType " . $param{'DBType'} . "." );
81 if ( $to_days =~ /^\D+$/ ) {
82 my $str = "to_days is not integer.";
89 my @gmtime = gmtime( time() );
91 ( $gmtime[2] * 60 * 60 ) + ( $gmtime[1] * 60 ) + ( $gmtime[0] );
92 my $time = ( $to_days * 24 * 60 * 60 );
94 if ( $to_days >= 0 ) { # already passed.
96 $reply = "T plus " . &Time2String($time) . " ago";
99 $time = -$time - $daysec;
100 $reply = "T minus " . &Time2String($time);
103 ", \002(\002$desc{$query}\002)\002 at $dayname, $monname $day $year";
105 &performStrictReply( $reply . "." );
108 else { # no argument.
109 my $prefix = "countdown list ";
111 &performStrictReply( &formListReply( 0, $prefix, sort keys %date ) );
119 # vim:ts=4:sw=4:expandtab:tw=80