]> git.donarmstrong.com Git - infobot.git/blob - src/Modules/Countdown.pl
88477fa3c0f7bef01c279d946655d1d39a57827b
[infobot.git] / src / Modules / Countdown.pl
1 #
2 # Countdown.pl: Count down to a particular date.
3 #       Author: xk <xk@leguin.openprojects.net>
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 = "$infobot_base_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'} =~ /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!!!");
53 #           $to_days = 
54 #           $dayname = 
55 #           $monname = 
56             return 1;
57         } else {
58             &ERROR("Countdown: invalid DBType?");
59             return 1;
60         }
61
62         if ($to_days =~ /^\D+$/) {
63             my $str = "to_days is not integer.";
64             &msg($who,$str);
65             &ERROR($str);
66
67             return 1;
68         }
69
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);
73
74         if ($to_days >= 0) {    # already passed.
75             $time  += $daysec;
76             $reply  = "T plus ". &Time2String($time) ." ago";
77         } else {                # time to go.
78             $time   = -$time - $daysec;
79             $reply  = "T minus ". &Time2String($time);
80         }
81         $reply    .= ", \002(\002$desc{$query}\002)\002 at $dayname, $monname $day $year";
82
83         &performStrictReply($reply .".");
84         return 1;
85     } else {                            # no argument.
86         my $prefix = "Countdown list ";
87
88         &performStrictReply( &formListReply(0, $prefix, sort keys %date) );
89
90         return 1;
91     }
92 }
93
94 1;