]> Pileus Git - ~andy/rhawk/blob - email.awk
Add pre-idle time to mail
[~andy/rhawk] / email.awk
1 @include "json.awk"
2
3 # Save email addresses
4 BEGIN { json_load("var/mail.txt", mail_enable) }
5 END   { json_save("var/mail.txt", mail_enable) }
6
7 # Email notifications
8 BEGIN {
9         mail_hist   = 2*60 # If the users has not spoken withn mail_before before 
10         mail_before = 2*60 # someone mentions their name and does not reply within
11         mail_after  = 2*60 # mail_after seconds, email them hist seconds of the backlog
12
13         mail_from   = NICK "<andy753421@gmail.com>"
14         mail_err    = "If you received this message in error,\n" \
15                       "someone in #rhnoise is being a jerk"
16
17         for (_user in mail_enable) 
18                 debug("watching " mail_enable[_user] " for " _user)
19 }
20
21 function mail_send(addr, subj, body,
22                    sendmail, errmsg)
23 {
24         gsub(/[^a-zA-Z0-9_+@.-]/, "", addr)
25         sendmail = "/usr/sbin/sendmail " addr
26         print "To: " addr        | sendmail
27         print "From: " mail_from | sendmail
28         print "Subject: " subj   | sendmail
29         print ""                 | sendmail
30         print body               | sendmail
31         print mail_err           | sendmail
32         close(sendmail)
33 }
34
35 function mail_prep(user, chan,
36                    addr, line, body,
37                    sec, si, sn, ss,
38                    msg, mi, mn)
39 {
40         addr = mail_enable[user]
41         sn   = asorti(mail_log[chan], ss)
42         body = ""
43         for (si = 1; si <= sn; si++) {
44                 sec = ss[si]
45                 mn = length(mail_log[chan][sec])
46                 for (mi = 0; mi < mn; mi++) { 
47                         msg = mail_log[chan][sec][mi]
48                         if (sec > mail_ready[user][chan] - mail_hist) {
49                                 if (msg ~ user)
50                                         line = "* " msg
51                                 else
52                                         line = "  " msg
53                                 body = body line "\n"
54                         }
55                 }
56         }
57         privmsg(chan, "notifying " user " at " addr)
58         mail_send(addr, "Message for " user " in " chan, body)
59         delete mail_ready[user][chan]
60 }
61
62 function mail_run(  user, chan, ready, time)
63 {
64         for (user in mail_ready)
65         for (chan in mail_ready[user]) {
66                 ready = mail_ready[user][chan]
67                 delay = systime() - ready
68                 if (ready && delay > mail_after)
69                         mail_prep(user, chan)
70         }
71 }
72
73 FROM ~ OWNER &&
74 TO == NICK &&
75 /^e?mail .* .*/ {
76         reply("notifying " $2 " for " $3)
77         mail_enable[$3] = $2
78 }
79
80 TO == NICK &&
81 /^e?mail  *[^ ]*$/ {
82         _user = FROM
83         _addr = $2
84         gsub(/[^a-zA-Z0-9_+@.-]/, "", _user)
85         gsub(/[^a-zA-Z0-9_+@.-]/, "", _addr)
86         reply("notifying " _addr " for " _user)
87         mail_enable[_user] = _addr
88 }
89
90 FROM ~ OWNER &&
91 TO == NICK &&
92 /^stfu .*/ {
93         reply("well fine then")
94         delete mail_enable[$2]
95         delete mail_ready[$2]
96         delete mail_seen[$2]
97 }
98
99 TO == NICK &&
100 /^stfu$/ {
101         reply("well fine then")
102         delete mail_enable[FROM]
103         delete mail_ready[FROM]
104         delete mail_seen[FROM]
105 }
106
107 TO == NICK &&
108 /^who/ {
109         for (_user in mail_enable)
110                 reply("\"" _user "\" <" mail_enable[_user] ">")
111 }
112
113 DST ~ /^#.*/ {
114         for (_user in mail_enable) {
115                 _idle = systime() - mail_seen[_user]
116                 if ($0 ~ "\\<"_user"\\>" && _idle > mail_before) {
117                         mail_ready[_user][DST] = systime()
118                         debug("queueing messages to " DST " for " _user)
119                 }
120         }
121 }
122
123 FROM in mail_enable {
124         delete mail_ready[FROM]
125         mail_seen[FROM] = systime()
126         debug("clearing message for " FROM)
127 }
128
129 DST ~ /^#.*/ {
130         _t = systime()
131         _i = length(mail_log[DST][_t])
132         if (_i==0) delete mail_log[DST][_t]
133         mail_log[DST][_t][_i] = DST " " strftime("(%H:%M:%S) ") FROM ": " $0
134         #debug("log["DST"]["_t"]["_i"] = "mail_log[DST][_t][_i])
135 }
136
137 // {
138         mail_run()
139 }