]> Pileus Git - ~andy/rhawk/blob - email.awk
Add json load/save and save email addresses
[~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  = 60 # Send 60 seconds of backlog
10         mail_delay = 60 # Wait 60 seconds after last mention before mailing
11
12         mail_from  = NICK "<andy753421@gmail.com>"
13         mail_err   = "If you received this message in error,\n" \
14                      "someone in #rhnoise is being a jerk"
15
16         for (_user in mail_enable) 
17                 debug("watching " mail_enable[_user] " for " _user)
18 }
19
20 function mail_send(addr, subj, body,
21                    sendmail, errmsg)
22 {
23         gsub(/[^a-zA-Z0-9_+@.-]/, "", addr)
24         sendmail = "/usr/sbin/sendmail " addr
25         print "To: " addr        | sendmail
26         print "From: " mail_from | sendmail
27         print "Subject: " subj   | sendmail
28         print ""                 | sendmail
29         print body               | sendmail
30         print mail_err           | sendmail
31         close(sendmail)
32 }
33
34 function mail_prep(user, chan,
35                    addr, line, body,
36                    sec, si, sn, ss,
37                    msg, mi, mn)
38 {
39         addr = mail_enable[user]
40         sn   = asorti(mail_log[chan], ss)
41         body = ""
42         for (si = 1; si <= sn; si++) {
43                 sec = ss[si]
44                 mn = length(mail_log[chan][sec])
45                 for (mi = 0; mi < mn; mi++) { 
46                         msg = mail_log[chan][sec][mi]
47                         if (sec > mail_ready[user][chan] - mail_hist) {
48                                 if (msg ~ user)
49                                         line = "* " msg
50                                 else
51                                         line = "  " msg
52                                 body = body line "\n"
53                         }
54                 }
55         }
56         privmsg(chan, "notifying " user " at " addr)
57         mail_send(addr, "Message for " user " in " chan, body)
58         delete mail_ready[user][chan]
59 }
60
61 function mail_run(  user, chan, ready, time)
62 {
63         for (user in mail_ready)
64         for (chan in mail_ready[user]) {
65                 ready = mail_ready[user][chan]
66                 delay = systime() - ready
67                 if (ready && delay > mail_delay)
68                         mail_prep(user, chan)
69         }
70 }
71
72 FROM ~ OWNER &&
73 /^e?mail .* .*/ {
74         reply("notifying " $2 " for " $3)
75         mail_enable[$3] = $2
76 }
77
78 /^e?mail  *[^ ]*$/ {
79         reply("notifying " $2 " for " FROM)
80         mail_enable[FROM] = $2
81 }
82
83 /^stfu$/ {
84         reply("well fine then")
85         delete mail_enable[FROM]
86         delete mail_ready[FROM]
87 }
88
89 DST ~ /^#.*/ {
90         for (_user in mail_enable)
91                 if ($0 ~ "\\<"_user"\\>") {
92                         mail_ready[_user][DST] = systime()
93                         debug("queueing messages to " DST " for " _user)
94                 }
95 }
96
97 FROM in mail_enable {
98         delete mail_ready[FROM]
99         debug("clearing message for " FROM)
100 }
101
102 DST ~ /^#.*/ {
103         _t = systime()
104         _i = length(mail_log[DST][_t])
105         if (_i==0) delete mail_log[DST][_t]
106         mail_log[DST][_t][_i] = DST " " strftime("(%H:%M:%S) ") FROM ": " $0
107         #debug("log["DST"]["_t"]["_i"] = "mail_log[DST][_t][_i])
108 }
109
110 // {
111         mail_run()
112 }