net-yail 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/IRCBot.rb +132 -0
- data/README +66 -0
- data/lib/net/yail.rb +525 -0
- data/lib/net/yail/default_events.rb +192 -0
- data/lib/net/yail/eventmap.yml +248 -0
- data/lib/net/yail/magic_events.rb +55 -0
- data/lib/net/yail/output_api.rb +134 -0
- metadata +54 -0
@@ -0,0 +1,192 @@
|
|
1
|
+
module Net
|
2
|
+
module IRCEvents
|
3
|
+
|
4
|
+
# This module contains all the default events handling - mainly for
|
5
|
+
# reporting things or simple logic. Users can put in their own event handlers
|
6
|
+
# that return true and ignore these, so nothing in here should be truly
|
7
|
+
# essential to a healthy IRC app.
|
8
|
+
module Defaults
|
9
|
+
private
|
10
|
+
|
11
|
+
# Sets up all the default handlers for events - just reporting things others
|
12
|
+
# don't handle in all but a few cases
|
13
|
+
def setup_default_handlers
|
14
|
+
# Incoming events
|
15
|
+
prepend_handler :incoming_msg, self.method(:r_msg)
|
16
|
+
prepend_handler :incoming_act, self.method(:r_act)
|
17
|
+
prepend_handler :incoming_notice, self.method(:r_notice)
|
18
|
+
prepend_handler :incoming_ctcp, self.method(:r_ctcp)
|
19
|
+
prepend_handler :incoming_ctcpreply, self.method(:r_ctcpreply)
|
20
|
+
prepend_handler :incoming_mode, self.method(:r_mode)
|
21
|
+
prepend_handler :incoming_join, self.method(:r_join)
|
22
|
+
prepend_handler :incoming_part, self.method(:r_part)
|
23
|
+
prepend_handler :incoming_kick, self.method(:r_kick)
|
24
|
+
prepend_handler :incoming_quit, self.method(:r_quit)
|
25
|
+
prepend_handler :incoming_nick, self.method(:r_nick)
|
26
|
+
prepend_handler :incoming_miscellany, self.method(:r_miscellany)
|
27
|
+
|
28
|
+
# Incoming numeric events here
|
29
|
+
prepend_handler :incoming_welcome, self.method(:r_welcome)
|
30
|
+
prepend_handler :incoming_bannedfromchan, self.method(:r_bannedfromchan)
|
31
|
+
prepend_handler :incoming_nicknameinuse, self.method(:_nicknameinuse)
|
32
|
+
prepend_handler :incoming_channelurl, self.method(:r_channelurl)
|
33
|
+
prepend_handler :incoming_topic, self.method(:r_topic)
|
34
|
+
prepend_handler :incoming_topicinfo, self.method(:r_topicinfo)
|
35
|
+
prepend_handler :incoming_namreply, self.method(:_namreply)
|
36
|
+
prepend_handler :incoming_endofnames, self.method(:r_endofnames)
|
37
|
+
prepend_handler :incoming_motd, self.method(:r_motd)
|
38
|
+
prepend_handler :incoming_motdstart, self.method(:r_motdstart)
|
39
|
+
prepend_handler :incoming_endofmotd, self.method(:r_endofmotd)
|
40
|
+
|
41
|
+
# Outgoing events
|
42
|
+
prepend_handler :outgoing_begin_connection, self.method(:out_begin_connection)
|
43
|
+
end
|
44
|
+
|
45
|
+
def r_msg(fullactor, actor, target, text)
|
46
|
+
report "{#{target}} <#{actor}> #{text}"
|
47
|
+
end
|
48
|
+
|
49
|
+
def r_act(fullactor, actor, target, text)
|
50
|
+
report "{#{target}} * #{actor} #{text}"
|
51
|
+
end
|
52
|
+
|
53
|
+
def r_notice(fullactor, actor, target, text)
|
54
|
+
report "{#{target}} -#{actor}- #{text}"
|
55
|
+
end
|
56
|
+
|
57
|
+
def r_ctcp(fullactor, actor, target, text)
|
58
|
+
report "{#{target}} [#{actor} #{text}]"
|
59
|
+
end
|
60
|
+
|
61
|
+
def r_ctcpreply(fullactor, actor, target, text)
|
62
|
+
report "{#{target}} [Reply: #{actor} #{text}]"
|
63
|
+
end
|
64
|
+
|
65
|
+
def r_mode(fullactor, actor, target, modes, objects)
|
66
|
+
report "{#{target}} #{actor} sets mode #{modes} #{objects}"
|
67
|
+
end
|
68
|
+
|
69
|
+
def r_join(fullactor, actor, target)
|
70
|
+
report "{#{target}} #{actor} joins"
|
71
|
+
end
|
72
|
+
|
73
|
+
def r_part(fullactor, actor, target, text)
|
74
|
+
report "{#{target}} #{actor} parts (#{text})"
|
75
|
+
end
|
76
|
+
|
77
|
+
def r_kick(fullactor, actor, target, object, text)
|
78
|
+
report "{#{target}} #{actor} kicked #{object} (#{text})"
|
79
|
+
end
|
80
|
+
|
81
|
+
def r_quit(fullactor, actor, text)
|
82
|
+
report "#{actor} quit (#{text})"
|
83
|
+
end
|
84
|
+
|
85
|
+
# Reports nick change unless nickname is us - we check nickname here since
|
86
|
+
# the magic method changes @me to the new nickname.
|
87
|
+
def r_nick(fullactor, actor, nickname)
|
88
|
+
report "#{actor} changed nick to #{nickname}" unless nickname == @me
|
89
|
+
end
|
90
|
+
|
91
|
+
def r_bannedfromchan(text, args)
|
92
|
+
text =~ /^(\S*) :Cannot join channel \((\S*)\)/
|
93
|
+
report "Unable to join channel #{$1}: #{$2}"
|
94
|
+
end
|
95
|
+
|
96
|
+
def r_welcome(*args)
|
97
|
+
report "*** Logged in as #{@me}. ***"
|
98
|
+
end
|
99
|
+
|
100
|
+
def r_miscellany(line)
|
101
|
+
report "serv: #{line}"
|
102
|
+
end
|
103
|
+
|
104
|
+
# Nickname change failed: already in use. This needs a rewrite to at
|
105
|
+
# least hit a "failed too many times" handler of some kind - for a bot,
|
106
|
+
# quitting may be fine, but for something else, we may want to prompt a
|
107
|
+
# user or try again in 20 minutes or something. Note that we only fail
|
108
|
+
# when the adapter hasn't gotten logged in yet - an attempt at changing
|
109
|
+
# nick after registration (welcome message) just generates a report.
|
110
|
+
def _nicknameinuse(text, args)
|
111
|
+
text =~ /^(\S+)/
|
112
|
+
report "Nickname #{$1} is already in use."
|
113
|
+
|
114
|
+
if (!@registered)
|
115
|
+
begin
|
116
|
+
nextnick = @nicknames[(0...@nicknames.length).find { |i| @nicknames[i] == $1 } + 1]
|
117
|
+
if (nextnick != nil)
|
118
|
+
nick nextnick
|
119
|
+
else
|
120
|
+
report '*** All nicknames in use. ***'
|
121
|
+
quit 'All nicknames in use.'
|
122
|
+
end
|
123
|
+
rescue
|
124
|
+
report '*** Nickname selection error. ***'
|
125
|
+
quit 'Nickname selection error.'
|
126
|
+
end
|
127
|
+
end
|
128
|
+
end
|
129
|
+
|
130
|
+
# Channel URL
|
131
|
+
def r_channelurl(text, args)
|
132
|
+
text =~ /^(\S+) :?(.+)$/
|
133
|
+
report "{#{$1}} URL is #{$2}"
|
134
|
+
end
|
135
|
+
|
136
|
+
# Channel topic
|
137
|
+
def r_topic(text, args)
|
138
|
+
text =~ /^(\S+) :?(.+)$/
|
139
|
+
report "{#{$1}} Topic is: #{$2}"
|
140
|
+
end
|
141
|
+
|
142
|
+
# Channel topic setter
|
143
|
+
def r_topicinfo(text, args)
|
144
|
+
text =~ /^(\S+) (\S+) (\d+)$/
|
145
|
+
report "{#{$1}} Topic set by #{$2} on #{Time.at($3.to_i).asctime}"
|
146
|
+
end
|
147
|
+
|
148
|
+
# Names line
|
149
|
+
def _namreply(text, args)
|
150
|
+
text =~ /^(@|\*|=) (\S+) :?(.+)$/
|
151
|
+
channeltype = {'@' => 'Secret', '*' => 'Private', '=' => 'Normal'}[$1]
|
152
|
+
report "{#{$2}} #{channeltype} channel nickname list: #{$3}"
|
153
|
+
@nicklist = $3.split(' ')
|
154
|
+
@nicklist.collect!{|name| name.sub(/^\W*/, '')}
|
155
|
+
report "First nick: #{@nicklist[0]}"
|
156
|
+
end
|
157
|
+
|
158
|
+
# End of names
|
159
|
+
def r_endofnames(text, args)
|
160
|
+
text =~ /^(\S+)/
|
161
|
+
report "{#{$1}} Nickname list complete"
|
162
|
+
end
|
163
|
+
|
164
|
+
# MOTD line
|
165
|
+
def r_motd(text, args)
|
166
|
+
text =~ /^:?(.+)$/
|
167
|
+
report "*MOTD* #{$1}"
|
168
|
+
end
|
169
|
+
|
170
|
+
# Beginning of MOTD
|
171
|
+
def r_motdstart(text, args)
|
172
|
+
text =~ /^:?(.+)$/
|
173
|
+
report "*MOTD* #{$1}"
|
174
|
+
end
|
175
|
+
|
176
|
+
# End of MOTD
|
177
|
+
def r_endofmotd(text, args)
|
178
|
+
report "*MOTD* End of MOTD"
|
179
|
+
end
|
180
|
+
|
181
|
+
# We dun connected to a server! Just sends user info and nick. This isn't
|
182
|
+
# quite "essential" to a working IRC app, but this data *must* be sent at
|
183
|
+
# some point, so be careful before skipping this handler.
|
184
|
+
def out_begin_connection(username, address, realname)
|
185
|
+
user username, '0.0.0.0', address, realname
|
186
|
+
nick @nicknames[0]
|
187
|
+
end
|
188
|
+
|
189
|
+
end
|
190
|
+
|
191
|
+
end
|
192
|
+
end
|
@@ -0,0 +1,248 @@
|
|
1
|
+
# 001 ne 1 for the purpose of hash keying apparently.
|
2
|
+
001 : welcome
|
3
|
+
002 : yourhost
|
4
|
+
003 : created
|
5
|
+
004 : myinfo
|
6
|
+
005 : map # Undernet Extension, Kajetan@Hinner.com, 17/11/98
|
7
|
+
006 : mapmore # Undernet Extension, Kajetan@Hinner.com, 17/11/98
|
8
|
+
007 : mapend # Undernet Extension, Kajetan@Hinner.com, 17/11/98
|
9
|
+
008 : snomask # Undernet Extension, Kajetan@Hinner.com, 17/11/98
|
10
|
+
009 : statmemtot # Undernet Extension, Kajetan@Hinner.com, 17/11/98
|
11
|
+
010 : statmem # Undernet Extension, Kajetan@Hinner.com, 17/11/98
|
12
|
+
200 : tracelink
|
13
|
+
201 : traceconnecting
|
14
|
+
202 : tracehandshake
|
15
|
+
203 : traceunknown
|
16
|
+
204 : traceoperator
|
17
|
+
205 : traceuser
|
18
|
+
206 : traceserver
|
19
|
+
208 : tracenewtype
|
20
|
+
209 : traceclass
|
21
|
+
211 : statslinkinfo
|
22
|
+
212 : statscommands
|
23
|
+
213 : statscline
|
24
|
+
214 : statsnline
|
25
|
+
215 : statsiline
|
26
|
+
216 : statskline
|
27
|
+
217 : statsqline
|
28
|
+
218 : statsyline
|
29
|
+
219 : endofstats
|
30
|
+
220 : statsbline # UnrealIrcd, Hendrik Frenzel
|
31
|
+
221 : umodeis
|
32
|
+
222 : sqline_nick # UnrealIrcd, Hendrik Frenzel
|
33
|
+
223 : statsgline # UnrealIrcd, Hendrik Frenzel
|
34
|
+
224 : statstline # UnrealIrcd, Hendrik Frenzel
|
35
|
+
225 : statseline # UnrealIrcd, Hendrik Frenzel
|
36
|
+
226 : statsnline # UnrealIrcd, Hendrik Frenzel
|
37
|
+
227 : statsvline # UnrealIrcd, Hendrik Frenzel
|
38
|
+
231 : serviceinfo
|
39
|
+
232 : endofservices
|
40
|
+
233 : service
|
41
|
+
234 : servlist
|
42
|
+
235 : servlistend
|
43
|
+
241 : statslline
|
44
|
+
242 : statsuptime
|
45
|
+
243 : statsoline
|
46
|
+
244 : statshline
|
47
|
+
245 : statssline # Reserved, Kajetan@Hinner.com, 17/10/98
|
48
|
+
246 : statstline # Undernet Extension, Kajetan@Hinner.com, 17/10/98
|
49
|
+
247 : statsgline # Undernet Extension, Kajetan@Hinner.com, 17/10/98
|
50
|
+
### TODO: need numerics to be able to map to multiple strings
|
51
|
+
### 247 : statsxline # UnrealIrcd, Hendrik Frenzel
|
52
|
+
248 : statsuline # Undernet Extension, Kajetan@Hinner.com, 17/10/98
|
53
|
+
249 : statsdebug # Unspecific Extension, Kajetan@Hinner.com, 17/10/98
|
54
|
+
250 : luserconns # 1998-03-15 -- tkil
|
55
|
+
251 : luserclient
|
56
|
+
252 : luserop
|
57
|
+
253 : luserunknown
|
58
|
+
254 : luserchannels
|
59
|
+
255 : luserme
|
60
|
+
256 : adminme
|
61
|
+
257 : adminloc1
|
62
|
+
258 : adminloc2
|
63
|
+
259 : adminemail
|
64
|
+
261 : tracelog
|
65
|
+
262 : endoftrace # 1997-11-24 -- archon
|
66
|
+
265 : n_local # 1997-10-16 -- tkil
|
67
|
+
266 : n_global # 1997-10-16 -- tkil
|
68
|
+
271 : silelist # Undernet Extension, Kajetan@Hinner.com, 17/10/98
|
69
|
+
272 : endofsilelist # Undernet Extension, Kajetan@Hinner.com, 17/10/98
|
70
|
+
275 : statsdline # Undernet Extension, Kajetan@Hinner.com, 17/10/98
|
71
|
+
280 : glist # Undernet Extension, Kajetan@Hinner.com, 17/10/98
|
72
|
+
281 : endofglist # Undernet Extension, Kajetan@Hinner.com, 17/10/98
|
73
|
+
290 : helphdr # UnrealIrcd, Hendrik Frenzel
|
74
|
+
291 : helpop # UnrealIrcd, Hendrik Frenzel
|
75
|
+
292 : helptlr # UnrealIrcd, Hendrik Frenzel
|
76
|
+
293 : helphlp # UnrealIrcd, Hendrik Frenzel
|
77
|
+
294 : helpfwd # UnrealIrcd, Hendrik Frenzel
|
78
|
+
295 : helpign # UnrealIrcd, Hendrik Frenzel
|
79
|
+
300 : none
|
80
|
+
301 : away
|
81
|
+
302 : userhost
|
82
|
+
303 : ison
|
83
|
+
304 : rpl_text # Bahamut IRCD
|
84
|
+
305 : unaway
|
85
|
+
306 : nowaway
|
86
|
+
307 : userip # Undernet Extension, Kajetan@Hinner.com, 17/10/98
|
87
|
+
308 : rulesstart # UnrealIrcd, Hendrik Frenzel
|
88
|
+
309 : endofrules # UnrealIrcd, Hendrik Frenzel
|
89
|
+
310 : whoishelp # (July01-01)Austnet Extension, found by Andypoo <andypoo@secret.com.au>
|
90
|
+
311 : whoisuser
|
91
|
+
312 : whoisserver
|
92
|
+
313 : whoisoperator
|
93
|
+
314 : whowasuser
|
94
|
+
315 : endofwho
|
95
|
+
316 : whoischanop
|
96
|
+
317 : whoisidle
|
97
|
+
318 : endofwhois
|
98
|
+
319 : whoischannels
|
99
|
+
320 : whoisvworld # (July01-01)Austnet Extension, found by Andypoo <andypoo@secret.com.au>
|
100
|
+
321 : liststart
|
101
|
+
322 : list
|
102
|
+
323 : listend
|
103
|
+
324 : channelmodeis
|
104
|
+
328 : channelurl
|
105
|
+
329 : channelcreate # 1997-11-24 -- archon
|
106
|
+
331 : notopic
|
107
|
+
332 : topic
|
108
|
+
333 : topicinfo # 1997-11-24 -- archon
|
109
|
+
334 : listusage # Undernet Extension, Kajetan@Hinner.com, 17/10/98
|
110
|
+
335 : whoisbot # UnrealIrcd, Hendrik Frenzel
|
111
|
+
341 : inviting
|
112
|
+
342 : summoning
|
113
|
+
346 : invitelist # UnrealIrcd, Hendrik Frenzel
|
114
|
+
347 : endofinvitelist # UnrealIrcd, Hendrik Frenzel
|
115
|
+
348 : exlist # UnrealIrcd, Hendrik Frenzel
|
116
|
+
349 : endofexlist # UnrealIrcd, Hendrik Frenzel
|
117
|
+
351 : version
|
118
|
+
352 : whoreply
|
119
|
+
353 : namreply
|
120
|
+
354 : whospcrpl # Undernet Extension, Kajetan@Hinner.com, 17/10/98
|
121
|
+
361 : killdone
|
122
|
+
362 : closing
|
123
|
+
363 : closeend
|
124
|
+
364 : links
|
125
|
+
365 : endoflinks
|
126
|
+
366 : endofnames
|
127
|
+
367 : banlist
|
128
|
+
368 : endofbanlist
|
129
|
+
369 : endofwhowas
|
130
|
+
371 : info
|
131
|
+
372 : motd
|
132
|
+
373 : infostart
|
133
|
+
374 : endofinfo
|
134
|
+
375 : motdstart
|
135
|
+
376 : endofmotd
|
136
|
+
377 : motd2 # 1997-10-16 -- tkil
|
137
|
+
378 : austmotd # (July01-01)Austnet Extension, found by Andypoo <andypoo@secret.com.au>
|
138
|
+
379 : whoismodes # UnrealIrcd, Hendrik Frenzel
|
139
|
+
381 : youreoper
|
140
|
+
382 : rehashing
|
141
|
+
383 : youreservice # UnrealIrcd, Hendrik Frenzel
|
142
|
+
384 : myportis
|
143
|
+
385 : notoperanymore # Unspecific Extension, Kajetan@Hinner.com, 17/10/98
|
144
|
+
386 : qlist # UnrealIrcd, Hendrik Frenzel
|
145
|
+
387 : endofqlist # UnrealIrcd, Hendrik Frenzel
|
146
|
+
388 : alist # UnrealIrcd, Hendrik Frenzel
|
147
|
+
389 : endofalist # UnrealIrcd, Hendrik Frenzel
|
148
|
+
391 : time
|
149
|
+
392 : usersstart
|
150
|
+
393 : users
|
151
|
+
394 : endofusers
|
152
|
+
395 : nousers
|
153
|
+
401 : nosuchnick
|
154
|
+
402 : nosuchserver
|
155
|
+
403 : nosuchchannel
|
156
|
+
404 : cannotsendtochan
|
157
|
+
405 : toomanychannels
|
158
|
+
406 : wasnosuchnick
|
159
|
+
407 : toomanytargets
|
160
|
+
408 : nosuchservice # UnrealIrcd, Hendrik Frenzel
|
161
|
+
409 : noorigin
|
162
|
+
411 : norecipient
|
163
|
+
412 : notexttosend
|
164
|
+
413 : notoplevel
|
165
|
+
414 : wildtoplevel
|
166
|
+
416 : querytoolong # Undernet Extension, Kajetan@Hinner.com, 17/10/98
|
167
|
+
421 : unknowncommand
|
168
|
+
422 : nomotd
|
169
|
+
423 : noadmininfo
|
170
|
+
424 : fileerror
|
171
|
+
425 : noopermotd # UnrealIrcd, Hendrik Frenzel
|
172
|
+
431 : nonicknamegiven
|
173
|
+
432 : erroneusnickname # This iz how its speld in thee RFC.
|
174
|
+
433 : nicknameinuse
|
175
|
+
434 : norules # UnrealIrcd, Hendrik Frenzel
|
176
|
+
435 : serviceconfused # UnrealIrcd, Hendrik Frenzel
|
177
|
+
436 : nickcollision
|
178
|
+
437 : bannickchange # Undernet Extension, Kajetan@Hinner.com, 17/10/98
|
179
|
+
438 : nicktoofast # Undernet Extension, Kajetan@Hinner.com, 17/10/98
|
180
|
+
439 : targettoofast # Undernet Extension, Kajetan@Hinner.com, 17/10/98
|
181
|
+
440 : servicesdown # Bahamut IRCD
|
182
|
+
441 : usernotinchannel
|
183
|
+
442 : notonchannel
|
184
|
+
443 : useronchannel
|
185
|
+
444 : nologin
|
186
|
+
445 : summondisabled
|
187
|
+
446 : usersdisabled
|
188
|
+
447 : nonickchange # UnrealIrcd, Hendrik Frenzel
|
189
|
+
451 : notregistered
|
190
|
+
455 : hostilename # UnrealIrcd, Hendrik Frenzel
|
191
|
+
459 : nohiding # UnrealIrcd, Hendrik Frenzel
|
192
|
+
460 : notforhalfops # UnrealIrcd, Hendrik Frenzel
|
193
|
+
461 : needmoreparams
|
194
|
+
462 : alreadyregistered
|
195
|
+
463 : nopermforhost
|
196
|
+
464 : passwdmismatch
|
197
|
+
465 : yourebannedcreep # I love this one...
|
198
|
+
466 : youwillbebanned
|
199
|
+
467 : keyset
|
200
|
+
468 : invalidusername # Undernet Extension, Kajetan@Hinner.com, 17/10/98
|
201
|
+
469 : linkset # UnrealIrcd, Hendrik Frenzel
|
202
|
+
470 : linkchannel # UnrealIrcd, Hendrik Frenzel
|
203
|
+
471 : channelisfull
|
204
|
+
472 : unknownmode
|
205
|
+
473 : inviteonlychan
|
206
|
+
474 : bannedfromchan
|
207
|
+
475 : badchannelkey
|
208
|
+
476 : badchanmask
|
209
|
+
477 : needreggednick # Bahamut IRCD
|
210
|
+
478 : banlistfull # Undernet Extension, Kajetan@Hinner.com, 17/10/98
|
211
|
+
479 : secureonlychannel # pircd
|
212
|
+
### TODO: see above todo
|
213
|
+
### 479 : linkfail # UnrealIrcd, Hendrik Frenzel
|
214
|
+
480 : cannotknock # UnrealIrcd, Hendrik Frenzel
|
215
|
+
481 : noprivileges
|
216
|
+
482 : chanoprivsneeded
|
217
|
+
483 : cantkillserver
|
218
|
+
484 : ischanservice # Undernet Extension, Kajetan@Hinner.com, 17/10/98
|
219
|
+
485 : killdeny # UnrealIrcd, Hendrik Frenzel
|
220
|
+
486 : htmdisabled # UnrealIrcd, Hendrik Frenzel
|
221
|
+
489 : secureonlychan # UnrealIrcd, Hendrik Frenzel
|
222
|
+
491 : nooperhost
|
223
|
+
492 : noservicehost
|
224
|
+
501 : umodeunknownflag
|
225
|
+
502 : usersdontmatch
|
226
|
+
511 : silelistfull # Undernet Extension, Kajetan@Hinner.com, 17/10/98
|
227
|
+
513 : nosuchgline # Undernet Extension, Kajetan@Hinner.com, 17/10/98
|
228
|
+
513 : badping # Undernet Extension, Kajetan@Hinner.com, 17/10/98
|
229
|
+
518 : noinvite # UnrealIrcd, Hendrik Frenzel
|
230
|
+
519 : admonly # UnrealIrcd, Hendrik Frenzel
|
231
|
+
520 : operonly # UnrealIrcd, Hendrik Frenzel
|
232
|
+
521 : listsyntax # UnrealIrcd, Hendrik Frenzel
|
233
|
+
524 : operspverify # UnrealIrcd, Hendrik Frenzel
|
234
|
+
|
235
|
+
600 : rpl_logon # Bahamut IRCD
|
236
|
+
601 : rpl_logoff # Bahamut IRCD
|
237
|
+
602 : rpl_watchoff # UnrealIrcd, Hendrik Frenzel
|
238
|
+
603 : rpl_watchstat # UnrealIrcd, Hendrik Frenzel
|
239
|
+
604 : rpl_nowon # Bahamut IRCD
|
240
|
+
605 : rpl_nowoff # Bahamut IRCD
|
241
|
+
606 : rpl_watchlist # UnrealIrcd, Hendrik Frenzel
|
242
|
+
607 : rpl_endofwatchlist # UnrealIrcd, Hendrik Frenzel
|
243
|
+
610 : mapmore # UnrealIrcd, Hendrik Frenzel
|
244
|
+
640 : rpl_dumping # UnrealIrcd, Hendrik Frenzel
|
245
|
+
641 : rpl_dumprpl # UnrealIrcd, Hendrik Frenzel
|
246
|
+
642 : rpl_eodump # UnrealIrcd, Hendrik Frenzel
|
247
|
+
|
248
|
+
999 : numericerror # Bahamut IRCD
|
@@ -0,0 +1,55 @@
|
|
1
|
+
module Net
|
2
|
+
module IRCEvents
|
3
|
+
|
4
|
+
# This module contains all the "magic" methods that need to happen regardless
|
5
|
+
# of user-defined event hooks and such.
|
6
|
+
module Magic
|
7
|
+
private
|
8
|
+
|
9
|
+
# Sets up the magic handlers that must happen no matter what else occurs
|
10
|
+
def setup_magic_handlers
|
11
|
+
prepend_handler :incoming_welcome, self.method(:magic_welcome)
|
12
|
+
prepend_handler :incoming_ping, self.method(:magic_ping)
|
13
|
+
prepend_handler :incoming_nick, self.method(:magic_nick)
|
14
|
+
end
|
15
|
+
|
16
|
+
# We were welcomed, so we need to set up initial nickname and set that we
|
17
|
+
# registered so nick change failure doesn't cause DEATH!
|
18
|
+
def magic_welcome(text, args)
|
19
|
+
report "#{args[:fullactor]} welcome message: #{text}"
|
20
|
+
if (text =~ /(\S+)!\S+$/)
|
21
|
+
@me = $1
|
22
|
+
elsif (text =~ /(\S+)$/)
|
23
|
+
@me = $1
|
24
|
+
end
|
25
|
+
|
26
|
+
@registered = true
|
27
|
+
mode @me, 'i'
|
28
|
+
|
29
|
+
# Don't break the chain if user wants their own handler
|
30
|
+
return false
|
31
|
+
end
|
32
|
+
|
33
|
+
# Ping must have a PONG even if user wants their own handler
|
34
|
+
def magic_ping(text)
|
35
|
+
@socket.puts "PONG :#{text}"
|
36
|
+
|
37
|
+
# Don't break the chain, man
|
38
|
+
return false
|
39
|
+
end
|
40
|
+
|
41
|
+
# If bot changes his name, @me must change
|
42
|
+
def magic_nick(fullactor, actor, nickname)
|
43
|
+
# Reset name if it's me
|
44
|
+
if actor.downcase == @me.downcase
|
45
|
+
@me = nickname
|
46
|
+
end
|
47
|
+
|
48
|
+
# Allow user-defined events (and/or reporting)
|
49
|
+
return false
|
50
|
+
end
|
51
|
+
|
52
|
+
end
|
53
|
+
|
54
|
+
end
|
55
|
+
end
|