]> Pileus Git - ~andy/rhawk/blob - rhawk
better
[~andy/rhawk] / rhawk
1 #!awk -f
2
3 @include "irc.awk"
4 @include "spades.awk"
5
6 # Initialization
7 BEGIN {
8         OWNER = "andy753421"
9         connect("localhost", "rhawk", "#rhtest");
10         join("#rhnoise")
11         join("#rhspades")
12         join("#sfvlug")
13 }
14
15 # Admin
16 FROM == OWNER && TO == NICK && /^die in a fire/ {
17         say("Ack, argh, barasdjf..")
18         quit()
19 }
20
21 FROM == OWNER && TO == NICK && /^reload/ {
22         say("Reloading..")
23         reload()
24 }
25
26 FROM == OWNER && TO == NICK && /^rejoin/ {
27         reply("joining..")
28         join("#rhnoise")
29         next
30 }
31
32 FROM == OWNER && TO == NICK && /^(join|part)/ {
33         match(MSG, /(join|part) +(#+\w+)/, arr)
34         if (arr[1] && arr[2]) {
35                 send(toupper(arr[1]) " " arr[2]);
36                 next
37         }
38 }
39
40 FROM == OWNER && TO == NICK && /^\.msg/ {
41         match(MSG, /.*\.msg +(#*\w+) +(.*)/, arr)
42         send("PRIVMSG " arr[1] " :" arr[2])
43 }
44
45 # Kick handling
46 CMD == "KICK" && ARG == NICK {
47         kick_delay = (kick_delay + 2) * 2
48         system("sleep " kick_delay)
49         join(DST)
50         reply("I feel happy!")
51 }
52
53 # Identify bots
54 FROM ~ /bo+t$|rhnoise/ {
55         bots[FROM] = 1
56 }
57
58 CMD == "NICK" && FROM in bots {
59         bots[MSG] = FROM
60 }
61
62
63 # Unicode
64 /[Uu]nicode :-?\(/ {
65         plain[FROM] = 1
66 }
67
68 /[Uu]nicode :-?\)/ {
69         plain[FROM] = 0
70 }
71
72 # SFV Lug
73 BEGIN { pollchan = "#sfvlug" }
74 (CMD == "PING"    && systime()-lastpoll > 60*60*24) ||
75 (CMD == "PRIVMSG" && DST == pollchan && /^\.poll/) {
76         if (!topics[pollchan]) {
77                 debug("Unknown topic for " pollchan);
78                 next
79         }
80         cmd = "curl -s http://sfvlug.org/"
81         day = "(Sun|Mon|Tue|Wed|Thu|Fri|Sat)"
82         web = "next meeting.*" day "\\w+[, ]+([A-Z]\\w+) +([0-9]+)[, ]+([0-9]+)"
83         irc = day "\\w*[, ]+([A-Z]\\w+) +([0-9]+)"
84         while (cmd | getline line) {
85                 if (match(line, web, arr)) {
86                         new = arr[1] " " arr[2] " " arr[3]
87                         sub(irc, new, topics[pollchan])
88                         topic(pollchan, topics[pollchan])
89                         break
90                 }
91         }
92         lastpoll = systime()
93         close(cmd)
94 }
95
96 # Fortune
97 TO == NICK && /^/               { extra = ""   }
98 TO == NICK && /^\.?fortune.*-o/ { extra = "-o" }
99 TO == NICK && /^\.?fortune/     {
100         gsub(/.*\.?fortune *|-[a-z]* *|[^a-zA-Z0-9 ]/, "", MSG)
101         cmd = "fortune " extra " " (MSG ? "-m '" MSG "'" : "-s")
102         _lines = 0
103         while (cmd | getline _fortune && _lines < 5) {
104                 say(_fortune)
105                 _lines++
106         }
107         close(cmd)
108         next
109 }
110
111 # Noise
112 FROM ~ OWNER && /^go go gadget woop/ {
113         for (i=20; i>0; i--)
114                 say(".delay " i " seconds; .woop " i)
115 }
116
117 TO == NICK && DST ~ /^#/ {
118         #say("Hello, " FROM)
119 }
120
121 !(FROM in bots) &&
122 MSG !~ /^\./ &&
123 /awk/ {
124         say("Awk, awk, awk! I'm a bird!")
125 }
126
127 !(FROM in bots) &&
128 /^[^.](help|halp)/ {
129         reply("Nothing can help you now..")
130 }
131
132 /Ho.*Ho.*Ho/ {
133         say("\00309Merry \00304Christmas!")
134 }
135
136 { fflush("") }
137
138 # vim: ft=awk