net-yail 1.4.0 → 1.4.2
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/examples/logger/logger_bot.rb +1 -1
- data/lib/net/yail.rb +57 -16
- data/lib/net/yail/IRCBot.rb +5 -152
- data/lib/net/yail/irc_bot.rb +155 -0
- data/lib/net/yail/output_api.rb +4 -4
- data/lib/net/yail/yail-version.rb +1 -1
- data/tests/tc_event.rb +7 -0
- metadata +4 -3
data/lib/net/yail.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'socket'
|
2
2
|
require 'thread'
|
3
3
|
require 'yaml'
|
4
|
+
require 'logger'
|
4
5
|
|
5
6
|
# To make this library seem smaller, a lot of code has been split up and put
|
6
7
|
# into semi-logical files. I don't really like this hacky solution, but I
|
@@ -242,11 +243,28 @@ class YAIL
|
|
242
243
|
:socket # TCPSocket instance
|
243
244
|
)
|
244
245
|
attr_accessor(
|
245
|
-
:
|
246
|
-
:
|
247
|
-
:throttle_seconds
|
246
|
+
:throttle_seconds,
|
247
|
+
:log
|
248
248
|
)
|
249
249
|
|
250
|
+
def silent
|
251
|
+
@log.warn '[DEPRECATED] - Net::YAIL#silent is deprecated as of 1.4.1'
|
252
|
+
return @log_silent
|
253
|
+
end
|
254
|
+
def silent=(val)
|
255
|
+
@log.warn '[DEPRECATED] - Net::YAIL#silent= is deprecated as of 1.4.1'
|
256
|
+
@log_silent = val
|
257
|
+
end
|
258
|
+
|
259
|
+
def loud
|
260
|
+
@log.warn '[DEPRECATED] - Net::YAIL#loud is deprecated as of 1.4.1'
|
261
|
+
return @log_loud
|
262
|
+
end
|
263
|
+
def loud=(val)
|
264
|
+
@log.warn '[DEPRECATED] - Net::YAIL#loud= is deprecated as of 1.4.1'
|
265
|
+
@log_loud = val
|
266
|
+
end
|
267
|
+
|
250
268
|
# Makes a new instance, obviously.
|
251
269
|
#
|
252
270
|
# Note: I haven't done this everywhere, but for the constructor, I felt
|
@@ -259,15 +277,19 @@ class YAIL
|
|
259
277
|
# * <tt>:username</tt>: Username reported to server
|
260
278
|
# * <tt>:realname</tt>: Real name reported to server
|
261
279
|
# * <tt>:nicknames</tt>: Array of nicknames to cycle through
|
262
|
-
# * <tt>:silent</tt>:
|
263
|
-
#
|
264
|
-
# * <tt>:loud</tt>:
|
265
|
-
# is
|
280
|
+
# * <tt>:silent</tt>: DEPRECATED - Sets Logger level to FATAL and silences most non-Logger
|
281
|
+
# messages.
|
282
|
+
# * <tt>:loud</tt>: DEPRECATED - Sets Logger level to DEBUG. Spits out too many messages for your own good,
|
283
|
+
# and really is only useful when debugging YAIL. Defaults to false, thankfully.
|
266
284
|
# * <tt>:throttle_seconds</tt>: Seconds between a cycle of privmsg sends.
|
267
285
|
# Defaults to 1. One "cycle" is defined as sending one line of output to
|
268
286
|
# *all* targets that have output buffered.
|
269
287
|
# * <tt>:server_password</tt>: Very optional. If set, this is the password
|
270
288
|
# sent out to the server before USER and NICK messages.
|
289
|
+
# * <tt>:log</tt>: Optional, if set uses this logger instead of the default (Ruby's Logger).
|
290
|
+
# If set, :loud and :silent options are ignored.
|
291
|
+
# * <tt>:log_io</tt>: Optional, ignored if you specify your own :log - sends given object to
|
292
|
+
# Logger's constructor. Must be filename or IO object.
|
271
293
|
def initialize(options = {})
|
272
294
|
@me = ''
|
273
295
|
@nicknames = options[:nicknames]
|
@@ -276,11 +298,27 @@ class YAIL
|
|
276
298
|
@realname = options[:realname]
|
277
299
|
@address = options[:address]
|
278
300
|
@port = options[:port] || 6667
|
279
|
-
@
|
280
|
-
@
|
301
|
+
@log_silent = options[:silent] || false
|
302
|
+
@log_loud = options[:loud] || false
|
281
303
|
@throttle_seconds = options[:throttle_seconds] || 1
|
282
304
|
@password = options[:server_password]
|
283
305
|
|
306
|
+
# Special handling to avoid mucking with Logger constants if we're using a different logger
|
307
|
+
if options[:log]
|
308
|
+
@log = options[:log]
|
309
|
+
else
|
310
|
+
@log = Logger.new(options[:log_io] || STDERR)
|
311
|
+
@log.level = Logger::WARN
|
312
|
+
|
313
|
+
# Convert old-school options into logger stuff
|
314
|
+
@log.level = Logger::DEBUG if @log_loud
|
315
|
+
@log.level = Logger::FATAL if @log_silent
|
316
|
+
end
|
317
|
+
|
318
|
+
if (options[:silent] || options[:loud])
|
319
|
+
@log.warn '[DEPRECATED] - passing :silent and :loud options to constructor are deprecated as of 1.4.1'
|
320
|
+
end
|
321
|
+
|
284
322
|
# Read in map of event numbers and names. Yes, I stole this event map
|
285
323
|
# file from RubyIRC and made very minor changes.... They stole it from
|
286
324
|
# somewhere else anyway, so it's okay.
|
@@ -294,7 +332,7 @@ class YAIL
|
|
294
332
|
begin
|
295
333
|
@socket = TCPSocket.new(@address, @port)
|
296
334
|
rescue StandardError => boom
|
297
|
-
|
335
|
+
@log.fatal "+++ERROR: Unable to open socket connection in Net::YAIL.initialize: #{boom.inspect}"
|
298
336
|
@dead_socket = true
|
299
337
|
raise
|
300
338
|
end
|
@@ -387,7 +425,7 @@ class YAIL
|
|
387
425
|
line = @socket.gets
|
388
426
|
rescue StandardError => boom
|
389
427
|
@dead_socket = true
|
390
|
-
|
428
|
+
@log.fatal "+++ERROR in read_incoming_data -> @socket.gets: #{boom.inspect}"
|
391
429
|
raise
|
392
430
|
end
|
393
431
|
|
@@ -399,7 +437,7 @@ class YAIL
|
|
399
437
|
|
400
438
|
line.chomp!
|
401
439
|
|
402
|
-
|
440
|
+
@log.debug "+++INCOMING: #{line}"
|
403
441
|
|
404
442
|
# Only synchronize long enough to push our incoming string onto the
|
405
443
|
# input buffer
|
@@ -562,10 +600,13 @@ class YAIL
|
|
562
600
|
when :incoming_nick
|
563
601
|
handle(event.type, event.fullname, event.nick, event.text)
|
564
602
|
|
603
|
+
when :incoming_error
|
604
|
+
handle(event.type, event.text)
|
605
|
+
|
565
606
|
# Unknown line!
|
566
607
|
else
|
567
|
-
# This should really never happen,
|
568
|
-
|
608
|
+
# This should really never happen, but isn't technically an error per se
|
609
|
+
@log.warn 'Unknown line: %s!' % line.inspect
|
569
610
|
handle(:incoming_miscellany, line)
|
570
611
|
end
|
571
612
|
end
|
@@ -608,7 +649,7 @@ class YAIL
|
|
608
649
|
# Don't bother with anything if there are no handlers registered.
|
609
650
|
return unless Array === @handlers[event]
|
610
651
|
|
611
|
-
|
652
|
+
@log.debug "+++EVENT HANDLER: Handling event #{event} via #{@handlers[event].inspect}:"
|
612
653
|
|
613
654
|
# Call all hooks in order until one breaks the chain. For incoming
|
614
655
|
# events, we want something to break the chain or else it'll likely
|
@@ -633,7 +674,7 @@ class YAIL
|
|
633
674
|
handle(base_event, text, args)
|
634
675
|
else
|
635
676
|
# No handler = report and don't worry about it
|
636
|
-
|
677
|
+
@log.info "Unknown raw #{number.to_s} from #{fullactor}: #{text}"
|
637
678
|
end
|
638
679
|
end
|
639
680
|
|
data/lib/net/yail/IRCBot.rb
CHANGED
@@ -1,154 +1,7 @@
|
|
1
|
+
# This is a deprecated file!
|
2
|
+
warn '[DEPRECATED] Requiring "net/yail/IRCBot" is deprecated! Use "net/yail/irc_bot" instead.'
|
3
|
+
|
4
|
+
# Wrapper for irc_bot for backward-compatibility
|
1
5
|
require 'rubygems'
|
2
6
|
require 'net/yail'
|
3
|
-
|
4
|
-
# My abstraction from adapter to a real bot.
|
5
|
-
class IRCBot
|
6
|
-
attr_reader :irc
|
7
|
-
|
8
|
-
public
|
9
|
-
|
10
|
-
# Creates a new bot yay. Note that due to my laziness, the options here
|
11
|
-
# are almost exactly the same as those in Net::YAIL. But at least there
|
12
|
-
# are more defaults here.
|
13
|
-
#
|
14
|
-
# Options:
|
15
|
-
# * <tt>:irc_network</tt>: Name/IP of the IRC server
|
16
|
-
# * <tt>:channels</tt>: Channels to automatically join on connect
|
17
|
-
# * <tt>:port</tt>: Port number, defaults to 6667
|
18
|
-
# * <tt>:username</tt>: Username reported to server
|
19
|
-
# * <tt>:realname</tt>: Real name reported to server
|
20
|
-
# * <tt>:nicknames</tt>: Array of nicknames to cycle through
|
21
|
-
# * <tt>:silent</tt>: Silence a lot of reports
|
22
|
-
# * <tt>:loud</tt>: Lots more verbose reports
|
23
|
-
def initialize(options = {})
|
24
|
-
@start_time = Time.now
|
25
|
-
|
26
|
-
@channels = options[:channels] || []
|
27
|
-
@irc_network = options[:irc_network]
|
28
|
-
@port = options[:port] || 6667
|
29
|
-
@username = options[:username] || 'IRCBot'
|
30
|
-
@realname = options[:realname] || 'IRCBot'
|
31
|
-
@nicknames = options[:nicknames] || ['IRCBot1', 'IRCBot2', 'IRCBot3']
|
32
|
-
@silent = options[:silent] || false
|
33
|
-
@loud = options[:loud] || false
|
34
|
-
end
|
35
|
-
|
36
|
-
# Returns a string representing uptime
|
37
|
-
def get_uptime_string
|
38
|
-
uptime = (Time.now - @start_time).to_i
|
39
|
-
seconds = uptime % 60
|
40
|
-
minutes = (uptime / 60) % 60
|
41
|
-
hours = (uptime / 3600) % 24
|
42
|
-
days = (uptime / 86400)
|
43
|
-
|
44
|
-
str = []
|
45
|
-
str.push("#{days} day(s)") if days > 0
|
46
|
-
str.push("#{hours} hour(s)") if hours > 0
|
47
|
-
str.push("#{minutes} minute(s)") if minutes > 0
|
48
|
-
str.push("#{seconds} second(s)") if seconds > 0
|
49
|
-
|
50
|
-
return str.join(', ')
|
51
|
-
end
|
52
|
-
|
53
|
-
# Creates the socket connection and registers the (very simple) default
|
54
|
-
# welcome handler. Subclasses should build their hooks in
|
55
|
-
# add_custom_handlers to allow auto-creation in case of a restart.
|
56
|
-
def connect_socket
|
57
|
-
@irc = Net::YAIL.new(
|
58
|
-
:address => @irc_network,
|
59
|
-
:port => @port,
|
60
|
-
:username => @username,
|
61
|
-
:realname => @realname,
|
62
|
-
:nicknames => @nicknames,
|
63
|
-
:silent => @silent,
|
64
|
-
:loud => @loud
|
65
|
-
)
|
66
|
-
|
67
|
-
# Simple hook for welcome to allow auto-joining of the channel
|
68
|
-
@irc.prepend_handler :incoming_welcome, self.method(:welcome)
|
69
|
-
|
70
|
-
add_custom_handlers
|
71
|
-
end
|
72
|
-
|
73
|
-
# To be subclassed - this method is a nice central location to allow the
|
74
|
-
# bot to register its handlers before this class takes control and hits
|
75
|
-
# the IRC network.
|
76
|
-
def add_custom_handlers
|
77
|
-
raise "You must define your handlers in add_custom_handlers, or else " +
|
78
|
-
"explicitly override with an empty method."
|
79
|
-
end
|
80
|
-
|
81
|
-
# Enters the socket's listening loop(s)
|
82
|
-
def start_listening
|
83
|
-
# If socket's already dead (probably couldn't connect to server), don't
|
84
|
-
# try to listen!
|
85
|
-
if @irc.dead_socket
|
86
|
-
$stderr.puts "Dead socket, can't start listening!"
|
87
|
-
end
|
88
|
-
|
89
|
-
@irc.start_listening
|
90
|
-
end
|
91
|
-
|
92
|
-
# Tells us the main app wants to just wait until we're done with all
|
93
|
-
# thread processing, or get a kill signal, or whatever. For now this is
|
94
|
-
# basically an endless loop that lets the threads do their thing until
|
95
|
-
# the socket dies. If a bot wants, it can handle :irc_loop to do regular
|
96
|
-
# processing.
|
97
|
-
def irc_loop
|
98
|
-
while true
|
99
|
-
until @irc.dead_socket
|
100
|
-
sleep 15
|
101
|
-
@irc.handle(:irc_loop)
|
102
|
-
Thread.pass
|
103
|
-
end
|
104
|
-
|
105
|
-
# Disconnected? Wait a little while and start up again.
|
106
|
-
sleep 30
|
107
|
-
@irc.stop_listening
|
108
|
-
self.connect_socket
|
109
|
-
start_listening
|
110
|
-
end
|
111
|
-
end
|
112
|
-
|
113
|
-
private
|
114
|
-
# Basic handler for joining our channels upon successful registration
|
115
|
-
def welcome(text, args)
|
116
|
-
@channels.each {|channel| @irc.join(channel) }
|
117
|
-
# Let the default welcome stuff still happen
|
118
|
-
return false
|
119
|
-
end
|
120
|
-
|
121
|
-
################
|
122
|
-
# Helpful wrappers
|
123
|
-
################
|
124
|
-
|
125
|
-
# Wraps Net::YAIL.me
|
126
|
-
def bot_name
|
127
|
-
@irc.me
|
128
|
-
end
|
129
|
-
|
130
|
-
# Wraps Net::YAIL.msg
|
131
|
-
def msg(*args)
|
132
|
-
@irc.msg(*args)
|
133
|
-
end
|
134
|
-
|
135
|
-
# Wraps Net::YAIL.act
|
136
|
-
def act(*args)
|
137
|
-
@irc.act(*args)
|
138
|
-
end
|
139
|
-
|
140
|
-
# Wraps Net::YAIL.join
|
141
|
-
def join(*args)
|
142
|
-
@irc.join(*args)
|
143
|
-
end
|
144
|
-
|
145
|
-
# Wraps Net::YAIL.report
|
146
|
-
def report(*args)
|
147
|
-
@irc.report(*args)
|
148
|
-
end
|
149
|
-
|
150
|
-
# Wraps Net::YAIL.nick
|
151
|
-
def nick(*args)
|
152
|
-
@irc.nick(*args)
|
153
|
-
end
|
154
|
-
end
|
7
|
+
require 'net/yail/irc_bot'
|
@@ -0,0 +1,155 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'net/yail'
|
3
|
+
|
4
|
+
# My abstraction from adapter to a real bot.
|
5
|
+
class IRCBot
|
6
|
+
attr_reader :irc
|
7
|
+
|
8
|
+
public
|
9
|
+
|
10
|
+
# Creates a new bot. Options are anything you can pass to the Net::YAIL constructor:
|
11
|
+
# * <tt>:irc_network</tt>: Name/IP of the IRC server - backward-compatibility hack, and is
|
12
|
+
# ignored if :address is passed in
|
13
|
+
# * <tt>:address</tt>: Name/IP of the IRC server
|
14
|
+
# * <tt>:port</tt>: Port number, defaults to 6667
|
15
|
+
# * <tt>:username</tt>: Username reported to server
|
16
|
+
# * <tt>:realname</tt>: Real name reported to server
|
17
|
+
# * <tt>:nicknames</tt>: Array of nicknames to cycle through
|
18
|
+
# * <tt>:throttle_seconds</tt>: Seconds between a cycle of privmsg sends.
|
19
|
+
# Defaults to 1. One "cycle" is defined as sending one line of output to
|
20
|
+
# *all* targets that have output buffered.
|
21
|
+
# * <tt>:server_password</tt>: Very optional. If set, this is the password
|
22
|
+
# sent out to the server before USER and NICK messages.
|
23
|
+
# * <tt>:log</tt>: Optional, if set uses this logger instead of the default (Ruby's Logger).
|
24
|
+
# If set, :loud and :silent options are ignored.
|
25
|
+
# * <tt>:log_io</tt>: Optional, ignored if you specify your own :log - sends given object to
|
26
|
+
# Logger's constructor. Must be filename or IO object.
|
27
|
+
def initialize(options = {})
|
28
|
+
@start_time = Time.now
|
29
|
+
@options = options
|
30
|
+
|
31
|
+
# Set up some friendly defaults
|
32
|
+
@options[:address] ||= @options.delete(:irc_network)
|
33
|
+
@options[:channels] ||= []
|
34
|
+
@options[:port] ||= 6667
|
35
|
+
@options[:username] ||= 'IRCBot'
|
36
|
+
@options[:realname] ||= 'IRCBot'
|
37
|
+
@options[:nicknames] ||= ['IRCBot1', 'IRCBot2', 'IRCBot3']
|
38
|
+
end
|
39
|
+
|
40
|
+
# Returns a string representing uptime
|
41
|
+
def get_uptime_string
|
42
|
+
uptime = (Time.now - @start_time).to_i
|
43
|
+
seconds = uptime % 60
|
44
|
+
minutes = (uptime / 60) % 60
|
45
|
+
hours = (uptime / 3600) % 24
|
46
|
+
days = (uptime / 86400)
|
47
|
+
|
48
|
+
str = []
|
49
|
+
str.push("#{days} day(s)") if days > 0
|
50
|
+
str.push("#{hours} hour(s)") if hours > 0
|
51
|
+
str.push("#{minutes} minute(s)") if minutes > 0
|
52
|
+
str.push("#{seconds} second(s)") if seconds > 0
|
53
|
+
|
54
|
+
return str.join(', ')
|
55
|
+
end
|
56
|
+
|
57
|
+
# Creates the socket connection and registers the (very simple) default
|
58
|
+
# welcome handler. Subclasses should build their hooks in
|
59
|
+
# add_custom_handlers to allow auto-creation in case of a restart.
|
60
|
+
def connect_socket
|
61
|
+
@irc = Net::YAIL.new(@options)
|
62
|
+
|
63
|
+
# Simple hook for welcome to allow auto-joining of the channel
|
64
|
+
@irc.prepend_handler :incoming_welcome, self.method(:welcome)
|
65
|
+
|
66
|
+
add_custom_handlers
|
67
|
+
end
|
68
|
+
|
69
|
+
# To be subclassed - this method is a nice central location to allow the
|
70
|
+
# bot to register its handlers before this class takes control and hits
|
71
|
+
# the IRC network.
|
72
|
+
def add_custom_handlers
|
73
|
+
raise "You must define your handlers in add_custom_handlers, or else " +
|
74
|
+
"explicitly override with an empty method."
|
75
|
+
end
|
76
|
+
|
77
|
+
# Enters the socket's listening loop(s)
|
78
|
+
def start_listening
|
79
|
+
# If socket's already dead (probably couldn't connect to server), don't
|
80
|
+
# try to listen!
|
81
|
+
if @irc.dead_socket
|
82
|
+
$stderr.puts "Dead socket, can't start listening!"
|
83
|
+
end
|
84
|
+
|
85
|
+
@irc.start_listening
|
86
|
+
end
|
87
|
+
|
88
|
+
# Tells us the main app wants to just wait until we're done with all
|
89
|
+
# thread processing, or get a kill signal, or whatever. For now this is
|
90
|
+
# basically an endless loop that lets the threads do their thing until
|
91
|
+
# the socket dies. If a bot wants, it can handle :irc_loop to do regular
|
92
|
+
# processing.
|
93
|
+
def irc_loop
|
94
|
+
while true
|
95
|
+
until @irc.dead_socket
|
96
|
+
sleep 15
|
97
|
+
@irc.handle(:irc_loop)
|
98
|
+
Thread.pass
|
99
|
+
end
|
100
|
+
|
101
|
+
# Disconnected? Wait a little while and start up again.
|
102
|
+
sleep 30
|
103
|
+
@irc.stop_listening
|
104
|
+
self.connect_socket
|
105
|
+
start_listening
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
private
|
110
|
+
# Basic handler for joining our channels upon successful registration
|
111
|
+
def welcome(text, args)
|
112
|
+
@options[:channels].each {|channel| @irc.join(channel) }
|
113
|
+
# Let the default welcome stuff still happen
|
114
|
+
return false
|
115
|
+
end
|
116
|
+
|
117
|
+
################
|
118
|
+
# Helpful wrappers
|
119
|
+
################
|
120
|
+
|
121
|
+
# Wraps Net::YAIL.log
|
122
|
+
def log
|
123
|
+
@irc.log
|
124
|
+
end
|
125
|
+
|
126
|
+
# Wraps Net::YAIL.me
|
127
|
+
def bot_name
|
128
|
+
@irc.me
|
129
|
+
end
|
130
|
+
|
131
|
+
# Wraps Net::YAIL.msg
|
132
|
+
def msg(*args)
|
133
|
+
@irc.msg(*args)
|
134
|
+
end
|
135
|
+
|
136
|
+
# Wraps Net::YAIL.act
|
137
|
+
def act(*args)
|
138
|
+
@irc.act(*args)
|
139
|
+
end
|
140
|
+
|
141
|
+
# Wraps Net::YAIL.join
|
142
|
+
def join(*args)
|
143
|
+
@irc.join(*args)
|
144
|
+
end
|
145
|
+
|
146
|
+
# Wraps Net::YAIL.report
|
147
|
+
def report(*args)
|
148
|
+
@irc.report(*args)
|
149
|
+
end
|
150
|
+
|
151
|
+
# Wraps Net::YAIL.nick
|
152
|
+
def nick(*args)
|
153
|
+
@irc.nick(*args)
|
154
|
+
end
|
155
|
+
end
|
data/lib/net/yail/output_api.rb
CHANGED
@@ -69,7 +69,7 @@ module IRCOutputAPI
|
|
69
69
|
|
70
70
|
handle(:outgoing_msg, target, text)
|
71
71
|
|
72
|
-
report_string = @
|
72
|
+
report_string = @log_silent ? '' : "{#{target}} <#{@me}> #{text}"
|
73
73
|
privmsg(target, text, report_string)
|
74
74
|
end
|
75
75
|
|
@@ -81,7 +81,7 @@ module IRCOutputAPI
|
|
81
81
|
|
82
82
|
handle(:outgoing_ctcp, target, text)
|
83
83
|
|
84
|
-
report_string = @
|
84
|
+
report_string = @log_silent ? '' : "{#{target}} [#{@me} #{text}]"
|
85
85
|
privmsg(target, "\001#{text}\001", report_string)
|
86
86
|
end
|
87
87
|
|
@@ -105,7 +105,7 @@ module IRCOutputAPI
|
|
105
105
|
|
106
106
|
handle(:outgoing_notice, target, text)
|
107
107
|
|
108
|
-
report "{#{target}} -#{@me}- #{text}" unless @
|
108
|
+
report "{#{target}} -#{@me}- #{text}" unless @log_silent
|
109
109
|
raw("NOTICE #{target} :#{text}", false)
|
110
110
|
end
|
111
111
|
|
@@ -118,7 +118,7 @@ module IRCOutputAPI
|
|
118
118
|
|
119
119
|
handle(:outgoing_ctcpreply, target, text)
|
120
120
|
|
121
|
-
report "{#{target}} [Reply: #{@me} #{text}]" unless @
|
121
|
+
report "{#{target}} [Reply: #{@me} #{text}]" unless @log_silent
|
122
122
|
notice(target, "\001#{text}\001")
|
123
123
|
end
|
124
124
|
|
data/tests/tc_event.rb
CHANGED
@@ -224,4 +224,11 @@ class MessageParserEventTest < Test::Unit::TestCase
|
|
224
224
|
assert_equal ['foo'], event.targets
|
225
225
|
assert_equal '+k', event.text
|
226
226
|
end
|
227
|
+
|
228
|
+
# Simple test of error event
|
229
|
+
def test_error
|
230
|
+
event = Net::YAIL::IncomingEvent.parse 'ERROR :Closing Link: nerdbucket.com (Quit: Terminated by user)'
|
231
|
+
assert_equal :incoming_error, event.type
|
232
|
+
assert_equal 'Closing Link: nerdbucket.com (Quit: Terminated by user)', event.text
|
233
|
+
end
|
227
234
|
end
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 1
|
7
7
|
- 4
|
8
|
-
-
|
9
|
-
version: 1.4.
|
8
|
+
- 2
|
9
|
+
version: 1.4.2
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Jeremy Echols
|
@@ -14,7 +14,7 @@ autorequire: net/yail
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2010-09-
|
17
|
+
date: 2010-09-08 00:00:00 -04:00
|
18
18
|
default_executable:
|
19
19
|
dependencies: []
|
20
20
|
|
@@ -40,6 +40,7 @@ files:
|
|
40
40
|
- lib/net/yail/output_api.rb
|
41
41
|
- lib/net/yail/event.rb
|
42
42
|
- lib/net/yail/yail-version.rb
|
43
|
+
- lib/net/yail/irc_bot.rb
|
43
44
|
- tests/net_yail.rb
|
44
45
|
- tests/tc_message_parser.rb
|
45
46
|
- tests/tc_event.rb
|