]> git.donarmstrong.com Git - infobot.git/blob - src/Modules/countdown.pl
* Accidentally left in a debug output
[infobot.git] / src / Modules / countdown.pl
1 #
2 # countdown.pl: Count down to a particular date.
3 #       Author: dms
4 #      Version: v0.1 (20000104)
5 #      Created: 20000104
6 #
7
8 use strict;
9
10 #use vars qw();
11
12 sub countdown {
13     my ($query) = @_;
14     my $file = "$bot_data_dir/$param{'ircUser'}.countdown";
15     my ( %date, %desc );
16     my $reply;
17
18     if ( !open( IN, $file ) ) {
19         &ERROR("cannot open $file.");
20         return 0;
21     }
22
23     while (<IN>) {
24         chop;
25         s/[\s\t]+/ /g;
26
27         if (/^(\d{8}) (\S+) (.*)$/) {
28             $date{$2} = $1;
29             $desc{$2} = $3;
30         }
31     }
32     close IN;
33
34     if ( defined $query ) {    # argument.
35         if ( !exists $date{$query} ) {
36             &msg( $who, "error: $query is not in my countdown list." );
37             return 0;
38         }
39
40         $date{$query} =~ /^(\d{4})(\d{2})(\d{2})$/;
41         my ( $year, $month, $day ) = ( $1, $2, $3 );
42         my $sqldate = "$1-$2-$3";
43
44         ### SQL SPECIFIC.
45         my ( $to_days, $dayname, $monname );
46
47         if ( $param{'DBType'} =~ /^(mysql|sqlite(2)?)$/i ) {
48             $to_days =
49               ( &sqlRawReturn("SELECT TO_DAYS(NOW()) - TO_DAYS('$sqldate')") )
50               [0];
51             $dayname = ( &sqlRawReturn("SELECT DAYNAME('$sqldate')") )[0];
52             $monname = ( &sqlRawReturn("SELECT MONTHNAME('$sqldate')") )[0];
53
54         }
55         elsif ( $param{'DBType'} =~ /^pgsql$/i ) {
56             $to_days = (
57                 &sqlRawReturn(
58                     "SELECT date_trunc('day',
59                                 'now'::timestamp - '$sqldate')"
60                 )
61             )[0];
62             $dayname = qw(Sun Mon Tue Wed Thu Fri Sat) [
63                 (
64                     &sqlRawReturn(
65                         "SELECT extract(dow from timestamp '$sqldate')")
66                 )[0]
67             ];
68             $monname = qw(BAD Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec) [
69                 (
70                     &sqlRawReturn(
71                         "SELECT extract(month from timestamp '$sqldate')")
72                 )[0]
73             ];
74
75         }
76         else {
77             &ERROR( "countdown: invalid DBType " . $param{'DBType'} . "." );
78             return 1;
79         }
80
81         if ( $to_days =~ /^\D+$/ ) {
82             my $str = "to_days is not integer.";
83             &msg( $who, $str );
84             &ERROR($str);
85
86             return 1;
87         }
88
89         my @gmtime = gmtime( time() );
90         my $daysec =
91           ( $gmtime[2] * 60 * 60 ) + ( $gmtime[1] * 60 ) + ( $gmtime[0] );
92         my $time = ( $to_days * 24 * 60 * 60 );
93
94         if ( $to_days >= 0 ) {    # already passed.
95             $time += $daysec;
96             $reply = "T plus " . &Time2String($time) . " ago";
97         }
98         else {                    # time to go.
99             $time  = -$time - $daysec;
100             $reply = "T minus " . &Time2String($time);
101         }
102         $reply .=
103           ", \002(\002$desc{$query}\002)\002 at $dayname, $monname $day $year";
104
105         &performStrictReply( $reply . "." );
106         return 1;
107     }
108     else {                        # no argument.
109         my $prefix = "countdown list ";
110
111         &performStrictReply( &formListReply( 0, $prefix, sort keys %date ) );
112
113         return 1;
114     }
115 }
116
117 1;
118
119 # vim:ts=4:sw=4:expandtab:tw=80