]> Pileus Git - ~andy/rhawk/blob - rhawk
skip joins on reload
[~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" && DST == pollchan && /^\.poll/) {
79         if (!topics[pollchan]) {
80                 debug("Unknown topic for " pollchan);
81                 next
82         }
83         cmd = "curl -s http://sfvlug.org/"
84         day = "(Sun|Mon|Tue|Wed|Thu|Fri|Sat)"
85         web = "next meeting.*" day "\\w+[, ]+([A-Z]\\w+) +([0-9]+)[, ]+([0-9]+)"
86         irc = day "\\w*[, ]+([A-Z]\\w+) +([0-9]+)"
87         while (cmd | getline line) {
88                 if (match(line, web, arr)) {
89                         new = arr[1] " " arr[2] " " arr[3]
90                         sub(irc, new, topics[pollchan])
91                         topic(pollchan, topics[pollchan])
92                         break
93                 }
94         }
95         lastpoll = systime()
96         close(cmd)
97 }
98
99 # Fortune
100 TO == NICK && /^/               { extra = ""   }
101 TO == NICK && /^\.?fortune.*-o/ { extra = "-o" }
102 TO == NICK && /^\.?fortune/     {
103         gsub(/.*\.?fortune *|-[a-z]* *|[^a-zA-Z0-9 ]/, "", MSG)
104         cmd = "fortune " extra " " (MSG ? "-m '" MSG "'" : "-s")
105         _lines = 0
106         while (cmd | getline _fortune && _lines < 5) {
107                 say(_fortune)
108                 _lines++
109         }
110         close(cmd)
111         next
112 }
113
114 # Noise
115 FROM ~ OWNER && /^go go gadget woop/ {
116         for (i=20; i>0; i--)
117                 say(".delay " i " seconds; .woop " i)
118 }
119
120 TO == NICK && /^[Ww][Oo]+[Pp]/ {
121         gsub(/[^Oo]/, "", $1)
122         _len = length($1)
123         if (_len == 2)
124                 _len = 10
125         _woop = "WOOP"
126         for (i=1; i<_len; i++)
127                 _woop = _woop " WOOP"
128         say(_woop)
129 }
130
131 TO == NICK && DST ~ /^#/ {
132         #say("Hello, " FROM)
133 }
134
135 !(FROM in bots) &&
136 MSG !~ /^\./ &&
137 /awk/ {
138         say("Awk, awk, awk! I'm a bird!")
139 }
140
141 !(FROM in bots) &&
142 /^[^.](help|halp)/ {
143         reply("Nothing can help you now..")
144 }
145
146 /Ho.*Ho.*Ho/ {
147         say("\00309Merry \00304Christmas!")
148 }
149
150 { fflush("") }
151
152 # vim: ft=awk