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.
@@ -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