]> Pileus Git - ~andy/rhawk/blob - rhawk
Misc updates
[~andy/rhawk] / rhawk
1 #!awk -f
2
3 @include "irc.awk"
4 @include "spades.awk"
5 #@include "email.awk"
6
7 # Initialization
8 BEGIN {
9         OWNER = "andy753421"
10         connect("localhost", "rhawk", "#rhtest");
11         if (FIRST) {
12                 join("#rhnoise")
13                 join("#rhspades")
14                 join("#sfvlug")
15         }
16 }
17
18 # Admin
19 FROM == OWNER && TO == NICK && /^die in a fire/ {
20         say("Ack, argh, barasdjf..")
21         quit()
22 }
23
24 FROM == OWNER && TO == NICK && /^reload/ {
25         say("Reloading..")
26         reload()
27 }
28
29 FROM == OWNER && TO == NICK && /^rejoin/ {
30         reply("joining..")
31         join("#rhnoise")
32         next
33 }
34
35 FROM == OWNER && TO == NICK && /^(join|part)/ {
36         match(MSG, /(join|part) +(#+\w+)/, arr)
37         if (arr[1] && arr[2]) {
38                 send(toupper(arr[1]) " " arr[2]);
39                 next
40         }
41 }
42
43 FROM == OWNER && TO == NICK && /^\.msg/ {
44         match(MSG, /.*\.msg +(#*\w+) +(.*)/, arr)
45         send("PRIVMSG " arr[1] " :" arr[2])
46 }
47
48 # Kick handling
49 CMD == "KICK" && ARG == NICK {
50         kick_delay = (kick_delay + 2) * 2
51         system("sleep " kick_delay)
52         join(DST)
53         reply("I feel happy!")
54 }
55
56 # Identify bots
57 FROM ~ /bo+t$|rhnoise/ {
58         bots[FROM] = 1
59 }
60
61 CMD == "NICK" && FROM in bots {
62         bots[MSG] = FROM
63 }
64
65
66 # Unicode
67 /[Uu]nicode :-?\(/ {
68         plain[FROM] = 1
69 }
70
71 /[Uu]nicode :-?\)/ {
72         plain[FROM] = 0
73 }
74
75 # SFV Lug
76 BEGIN { pollchan = "#sfvlug" }
77 (CMD == "PING"    && systime()-lastpoll > 60*60*24) ||
78 (CMD == "PRIVMSG" && /^\.poll/) {
79         if (!topics[pollchan]) {
80                 debug("Unknown topic for " pollchan);
81                 send("TOPIC " pollchan)
82                 next
83         }
84         _curl     = "curl -s http://sfvlug.org/"
85         _day      = "(Sun|Mon|Tue|Wed|Thu|Fri|Sat)"
86         _web_ptrn = "next meeting.*" _day "\\w+[, ]+([A-Z]\\w+) +([0-9]+)[, ]+([0-9]+)"
87         _irc_ptrn = _day "\\w*[, ]+([A-Z]\\w+) +([0-9]+)"
88         while (_curl | getline _line) {
89                 #debug("match(" _line ", " _web_ptrn ", ..)")
90                 if (match(_line, _web_ptrn, _parts)) {
91                         _date  = _parts[1] " " _parts[2] " " _parts[3]
92                         _topic = topics[pollchan]
93                         sub(_irc_ptrn, _date, _topic)
94                         if (_topic != topics[pollchan])
95                                 topic(pollchan, topics[pollchan] = _topic)
96                         else
97                                 debug("topic is already correct")
98                         break
99                 }
100         }
101         lastpoll = systime()
102         close(cmd)
103 }
104
105 # Uptime
106 function uptime(time,  fmt) {
107         fmt = "%d:%02d:%02d:%02d"
108         fmt = "%d days %02d:%02d:%02d"
109         return sprintf(fmt,
110                 time / (60*60*24),
111                 time / (60*60   ) % 24,
112                 time / (60      ) % 60,
113                 time / (1       ) % 60)
114 }
115 BEGIN {
116         up_reload = systime();
117 }
118 /^\.uptime/ {
119         _now = systime();
120         say("uptime: " uptime(_now - START) ", " \
121             "reload: " uptime(_now - up_reload))
122 }
123
124 # Fortune
125 TO == NICK && /^/               { extra = ""   }
126 TO == NICK && /^\.?fortune.*-o/ { extra = "-o" }
127 TO == NICK && /^\.?fortune/     {
128         gsub(/.*\.?fortune *|-[a-z]* *|[^a-zA-Z0-9 ]/, "", MSG)
129         cmd = "fortune " extra " " (MSG ? "-m '" MSG "'" : "-s")
130         _lines = 0
131         while (cmd | getline _fortune && _lines < 5) {
132                 say(_fortune)
133                 _lines++
134         }
135         close(cmd)
136         next
137 }
138
139 # Noise
140 FROM ~ OWNER && /^go go gadget woop/ {
141         for (i=20; i>0; i--)
142                 say(".delay " i " seconds; .woop " i)
143 }
144
145 function woop(msg) {
146         gsub(/[^Oo]/, "", $1)
147         _len = length($1)
148         if (_len == 2)
149                 _len = 10
150         if ($2)
151                 _len = $2
152         _woop = msg
153         for (i=1; i<_len; i++)
154                 _woop = _woop " " msg
155         say(_woop)
156 }
157
158 TO == NICK && /^[Ww][Oo]+[Pp] *([0-9]*)/ {
159         woop("WOOP")
160 }
161
162 /^~WOOP *([0-9]*)/ {
163         woop("(00/")
164 }
165
166 /^~woop *([0-9]*)/ {
167         woop("^H^P^P^O")
168 }
169
170 TO == NICK && DST ~ /^#/ {
171         #say("Hello, " FROM)
172 }
173
174 !(FROM in bots) &&
175 MSG !~ /^\./ &&
176 /awk/ {
177         say("Awk, awk, awk! I'm a bird!")
178 }
179
180 !(FROM in bots) &&
181 ((TO == NICK && /(help|halp)/) ||
182  /^[^.](help|halp)/) {
183         reply("Nothing can help you now..")
184 }
185
186 /(\<[Hh][Oo]\>.*){3}/ {
187         say("\00309Merry \00304Christmas!")
188 }
189
190 !(FROM in bots) &&
191 tolower($0) ~ /\<cloud\>/ {
192         _cmd = "shuf clouds.txt"
193         _cmd | getline _cloud
194         close(_cmd)
195         say(_cloud)
196 }
197
198 /^headshot [Cc]hristmas/ {
199         say(".load Christmas")
200         say(".jingle")
201         say(".unload Christmas")
202 }
203
204 FROM == "rhnoise" && $2 == "slaps" && $3 == NICK {
205         say(".spin")
206 }
207
208 /^[Aa]nd now[.,]/ {
209         say("And now...");
210         say("THE LARCH");
211 }
212
213 # God damn commands
214 FROM == "rhnoise" && load_mod {
215         say(".load " load_mod)
216         say("rhnoise: You slag!")
217 }
218 // {
219         load_mod = ""
220 }
221 (TO  ==  "rhnoise" && /^load \w+/) ||
222 (DST == "#rhniose" && /^\.load [a-z]\w+/) {
223         gsub(/[^a-zA-Z0-9_]/, " ")
224         load_mod = toupper(substr($2,1,1)) substr($2,2);
225 }
226
227 (DST == "#rhnoise" && /^\.line /) {
228         sub(/\./, "!");
229         say($0);
230         say("scalawag: You slag!")
231 }
232
233 # Misc
234 { fflush("") }
235
236 # vim: ft=awk