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