Make daily-digest work for more users than just me
[blerg.git] / aux / bin / daily-digest
1 #!/usr/bin/perl
2 use Blerg::Database;
3 use Mail::Message;
4 use POSIX qw/strftime/;
5 use strict;
6 use v5.10;
7
8 my $t1 = time;
9 my $t0 = $t1 - 86400;
10
11 sub send_email {
12     my ($username) = @_;
13
14     if (!Blerg::Database::exists($username)) {
15         return;
16     }
17
18     my $email_conf_path = Blerg::Database::configuration->{data_path} . "/$username/email";
19     if (!-f $email_conf_path) {
20         return;
21     }
22
23     open CONF, $email_conf_path;
24     my $email = <CONF>;
25     close CONF;
26
27     my $blerg = Blerg::Database->open_existing($username);
28     my @items = $blerg->subscription_list;
29     $blerg->close;
30
31     if (!@items) {
32         return;
33     }
34
35     my $feeditems;
36     for my $i (@items) {
37         use Data::Dumper;
38         $blerg = Blerg::Database->open_existing($i->{author})
39             or next;
40
41         my $ts = $blerg->timestamp($i->{record});
42         if ($ts >= $t0 && $ts < $t1) {
43             my $data = $blerg->fetch($i->{record});
44             next if !defined $data;
45             my $date = strftime('%T %b %-d %Y (%Z)', localtime($ts));
46             $feeditems .= "== $i->{author} at $date\n\n$data\n\n\n";
47         }
48
49         $blerg->close;
50     }
51
52     if (!defined $feeditems) {
53         return;
54     }
55
56     Mail::Message->build(
57         From => Mail::Address->new('BlergBot', 'noreply@blerg.cc'),
58         To => Mail::Address->new($username, $email),
59         Subject => 'Blërg Daily Digest',
60         Mail::Message::Field->new('Content-Type', 'text/plain', 'charset="utf8"'),
61         data => <<EMAIL
62 Hello, $username!  Here is your daily digest:
63
64 $feeditems
65 - Blërg
66 EMAIL
67     )->send;
68 }
69
70 # TODO: Be smarter about this.  Maybe maintain a list of users with email addresses?
71 opendir USERS, Blerg::Database::configuration->{data_path};
72 while (my $user = readdir USERS) {
73     next if $user =~ /^\./;
74     send_email($user);
75 }