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