cinch 2.0.0.pre.1 → 2.0.0.pre.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/docs/bot_options.md +1 -0
- data/docs/changes.md +25 -32
- data/docs/common_mistakes.md +1 -0
- data/docs/common_tasks.md +1 -0
- data/docs/encodings.md +2 -0
- data/docs/events.md +1 -0
- data/docs/logging.md +1 -0
- data/docs/migrating.md +3 -2
- data/docs/readme.md +9 -8
- data/lib/cinch/channel.rb +3 -3
- data/lib/cinch/dcc/dccable_object.rb +3 -3
- data/lib/cinch/dcc/incoming/send.rb +4 -4
- data/lib/cinch/dcc/outgoing/send.rb +2 -2
- data/lib/cinch/helpers.rb +2 -2
- data/lib/cinch/logger/zcbot_logger.rb +1 -1
- data/lib/cinch/logger.rb +4 -4
- data/lib/cinch/message.rb +1 -1
- data/lib/cinch/mode_parser.rb +1 -1
- data/lib/cinch/network.rb +2 -2
- data/lib/cinch/plugin.rb +15 -22
- data/lib/cinch/rubyext/string.rb +2 -2
- data/lib/cinch/sasl/dh_blowfish.rb +1 -1
- data/lib/cinch/timer.rb +4 -4
- data/lib/cinch/user.rb +1 -1
- data/lib/cinch/version.rb +1 -1
- metadata +2 -2
data/docs/bot_options.md
CHANGED
data/docs/changes.md
CHANGED
@@ -1,37 +1,30 @@
|
|
1
1
|
# @title What has changed?
|
2
|
+
# @markup kramdown
|
2
3
|
|
3
4
|
# What has changed in 2.0?
|
4
|
-
1.
|
5
|
-
1.
|
6
|
-
1.
|
7
|
-
1.
|
8
|
-
1.
|
9
|
-
1.
|
10
|
-
1.
|
11
|
-
1.
|
12
|
-
1.
|
13
|
-
1.
|
14
|
-
1.
|
15
|
-
1.
|
16
|
-
|
17
|
-
1.
|
18
|
-
1.
|
19
|
-
1.
|
20
|
-
1.
|
21
|
-
1.
|
22
|
-
|
23
|
-
1. **Cinch::Channel**
|
24
|
-
1. **Cinch::Helpers**
|
25
|
-
1. **Cinch::IRC**
|
26
|
-
1. **Cinch::Message**
|
27
|
-
1. **Cinch::User**
|
28
|
-
1. **Removed/Renamed methods**
|
29
|
-
1. **Handlers**
|
5
|
+
1. Added support for SASL
|
6
|
+
1. Added support for DCC SEND
|
7
|
+
1. Added a fair scheduler for outgoing messages
|
8
|
+
1. Added required plugin options
|
9
|
+
1. Added support for colors/formatting
|
10
|
+
1. Added network discovery
|
11
|
+
1. Added match groups
|
12
|
+
1. Added match options overwriting plugin options
|
13
|
+
1. Added support for actions (/me)
|
14
|
+
1. Added support for broken IRC networks
|
15
|
+
1. Dynamic timers
|
16
|
+
1. Reworked logging facilities
|
17
|
+
1. API improvements
|
18
|
+
1. Helper changes
|
19
|
+
1. Added a Cinch::Target Target class
|
20
|
+
1. Cinch::Constants
|
21
|
+
1. New methods
|
22
|
+
1. Removed/Renamed methods
|
23
|
+
1. Handlers
|
30
24
|
1. The Plugin class
|
31
|
-
1.
|
32
|
-
1.
|
33
|
-
|
34
|
-
1. **New events**
|
25
|
+
1. Channel/Target/User implement Comparable
|
26
|
+
1. Renamed `*Manager` to `*List`
|
27
|
+
1. New events
|
35
28
|
|
36
29
|
## Added support for SASL
|
37
30
|
|
@@ -141,7 +134,7 @@ Example:
|
|
141
134
|
|
142
135
|
## Added match options overwriting plugin options
|
143
136
|
|
144
|
-
Matchers now have their own `:prefix`, `:suffix` and `:
|
137
|
+
Matchers now have their own `:prefix`, `:suffix` and `:react_on`
|
145
138
|
options which overwrite plugin options for single matchers.
|
146
139
|
|
147
140
|
|
@@ -150,7 +143,7 @@ options which overwrite plugin options for single matchers.
|
|
150
143
|
A new event, {`:action`} has been added and can be used for matching
|
151
144
|
actions as follows:
|
152
145
|
|
153
|
-
match "kicks the bot",
|
146
|
+
match "kicks the bot", react_on: :action
|
154
147
|
def execute(m)
|
155
148
|
m.reply "Ouch!"
|
156
149
|
end
|
data/docs/common_mistakes.md
CHANGED
data/docs/common_tasks.md
CHANGED
data/docs/encodings.md
CHANGED
data/docs/events.md
CHANGED
data/docs/logging.md
CHANGED
data/docs/migrating.md
CHANGED
@@ -1,4 +1,6 @@
|
|
1
1
|
# @title Migration Guide
|
2
|
+
# @markup kramdown
|
3
|
+
|
2
4
|
# Migration Guide
|
3
5
|
|
4
6
|
This document explains how to migrate between API incompatible
|
@@ -36,9 +38,8 @@ shouldn't and usually mustn't overwrite:
|
|
36
38
|
- `::plugin_name`
|
37
39
|
- `::prefix=`
|
38
40
|
- `::prefix`
|
41
|
+
- `::react_on=`
|
39
42
|
- `::react_on`
|
40
|
-
- `::reacting_on=`
|
41
|
-
- `::reacting_on`
|
42
43
|
- `::required_options=`
|
43
44
|
- `::required_options`
|
44
45
|
- `::set`
|
data/docs/readme.md
CHANGED
@@ -1,18 +1,19 @@
|
|
1
1
|
# @title README
|
2
|
+
# @markup kramdown
|
2
3
|
|
3
4
|
|
4
|
-
- {file:changes.md Changelog}
|
5
|
-
- {file:migrating.md Migration guides}
|
5
|
+
- {file:docs/changes.md Changelog}
|
6
|
+
- {file:docs/migrating.md Migration guides}
|
6
7
|
|
7
8
|
# Important documents
|
8
9
|
|
9
10
|
The following is a list of important documents to read.
|
10
11
|
|
11
|
-
- {file:bot_options.md Bot options}
|
12
|
-
- {file:common_tasks.md Common Tasks}
|
13
|
-
- {file:common_mistakes.md Common mistakes}
|
12
|
+
- {file:docs/bot_options.md Bot options}
|
13
|
+
- {file:docs/common_tasks.md Common Tasks}
|
14
|
+
- {file:docs/common_mistakes.md Common mistakes}
|
14
15
|
- {Cinch::DCC DCC}
|
15
|
-
- {file:encodings.md Encodings}
|
16
|
-
- {file:logging.md Logging}
|
16
|
+
- {file:docs/encodings.md Encodings}
|
17
|
+
- {file:docs/logging.md Logging}
|
17
18
|
- {Cinch::SASL SASL}
|
18
|
-
- {file:events.
|
19
|
+
- {file:docs/events.md Events}
|
data/lib/cinch/channel.rb
CHANGED
@@ -17,7 +17,7 @@ module Cinch
|
|
17
17
|
# Users are represented by a Hash, mapping individual users to an
|
18
18
|
# array of modes (e.g. "o" for opped).
|
19
19
|
#
|
20
|
-
# @return [Hash
|
20
|
+
# @return [Hash{User => Array<String}>] all users in the channel
|
21
21
|
# @version 1.1.0
|
22
22
|
attr_reader :users
|
23
23
|
synced_attr_reader :users
|
@@ -40,7 +40,7 @@ module Cinch
|
|
40
40
|
# either a value in the case of modes that take an option (e.g.
|
41
41
|
# "k" for the channel key) or true.
|
42
42
|
#
|
43
|
-
# @return [Hash
|
43
|
+
# @return [Hash{String => Object}]
|
44
44
|
attr_reader :modes
|
45
45
|
synced_attr_reader :modes
|
46
46
|
def initialize(name, bot)
|
@@ -139,7 +139,7 @@ module Cinch
|
|
139
139
|
end
|
140
140
|
# @endgroup
|
141
141
|
|
142
|
-
# @return [
|
142
|
+
# @return [Integer] The maximum number of allowed users in the
|
143
143
|
# channel. 0 if unlimited.
|
144
144
|
def limit
|
145
145
|
@modes["l"].to_i
|
@@ -9,7 +9,7 @@ module Cinch
|
|
9
9
|
module DCCableObject
|
10
10
|
# Return the next `number` bytes of the object.
|
11
11
|
#
|
12
|
-
# @param [
|
12
|
+
# @param [Integer] number Read `number` bytes at most
|
13
13
|
# @return [String] The read data
|
14
14
|
# @return [nil] If no more data can be read
|
15
15
|
def read(number)
|
@@ -17,7 +17,7 @@ module Cinch
|
|
17
17
|
|
18
18
|
# Seek to a specific position.
|
19
19
|
#
|
20
|
-
# @param [
|
20
|
+
# @param [Integer] position The position in bytes to seek to
|
21
21
|
# @return [void]
|
22
22
|
def seek(position)
|
23
23
|
end
|
@@ -29,7 +29,7 @@ module Cinch
|
|
29
29
|
def path
|
30
30
|
end
|
31
31
|
|
32
|
-
# @return [
|
32
|
+
# @return [Integer] The total size of the data, in bytes.
|
33
33
|
def size
|
34
34
|
end
|
35
35
|
end
|
@@ -60,21 +60,21 @@ module Cinch
|
|
60
60
|
# @return [String]
|
61
61
|
attr_reader :filename
|
62
62
|
|
63
|
-
# @return [
|
63
|
+
# @return [Integer]
|
64
64
|
attr_reader :size
|
65
65
|
|
66
66
|
# @return [String]
|
67
67
|
attr_reader :ip
|
68
68
|
|
69
|
-
# @return [
|
69
|
+
# @return [Fixnum]
|
70
70
|
attr_reader :port
|
71
71
|
|
72
72
|
# @param [Hash] opts
|
73
73
|
# @option opts [User] user
|
74
74
|
# @option opts [String] filename
|
75
|
-
# @option opts [
|
75
|
+
# @option opts [Integer] size
|
76
76
|
# @option opts [String] ip
|
77
|
-
# @option opts [
|
77
|
+
# @option opts [Fixnum] port
|
78
78
|
# @api private
|
79
79
|
def initialize(opts)
|
80
80
|
@user, @filename, @size, @ip, @port = opts.values_at(:user, :filename, :size, :ip, :port)
|
@@ -87,14 +87,14 @@ module Cinch
|
|
87
87
|
|
88
88
|
# Seek to `pos` in the data.
|
89
89
|
#
|
90
|
-
# @param [
|
90
|
+
# @param [Integer] pos
|
91
91
|
# @return [void]
|
92
92
|
# @api private
|
93
93
|
def seek(pos)
|
94
94
|
@io.seek(pos)
|
95
95
|
end
|
96
96
|
|
97
|
-
# @return [
|
97
|
+
# @return [Fixnum] The port used for the socket
|
98
98
|
def port
|
99
99
|
@port ||= @socket.addr[1]
|
100
100
|
end
|
data/lib/cinch/helpers.rb
CHANGED
@@ -72,13 +72,13 @@ module Cinch
|
|
72
72
|
# Timer(5) { puts "timer fired" }
|
73
73
|
# end
|
74
74
|
#
|
75
|
-
# @param [
|
75
|
+
# @param [Numeric] interval Interval in seconds
|
76
76
|
# @param [Proc] block A proc to execute
|
77
77
|
# @option options [Symbol] :method (:timer) Method to call (only
|
78
78
|
# if no proc is provided)
|
79
79
|
# @option options [Boolean] :threaded (true) Call method in a
|
80
80
|
# thread?
|
81
|
-
# @option options [
|
81
|
+
# @option options [Integer] :shots (Float::INFINITY) How often
|
82
82
|
# should the timer fire?
|
83
83
|
# @option options [Boolean] :start_automatically (true) If true,
|
84
84
|
# the timer will automatically start after the bot finished
|
data/lib/cinch/logger.rb
CHANGED
@@ -101,10 +101,10 @@ module Cinch
|
|
101
101
|
# Logs a message.
|
102
102
|
#
|
103
103
|
# @param [String, Array] messages The message(s) to log
|
104
|
-
# @param [
|
105
|
-
# :exception, :error, :fatal
|
104
|
+
# @param [:debug, :incoming, :outgoing, :info, :warn,
|
105
|
+
# :exception, :error, :fatal] event The kind of event that
|
106
106
|
# triggered the message
|
107
|
-
# @param [
|
107
|
+
# @param [:debug, :info, :warn, :error, :fatal] level The level of the message
|
108
108
|
# @return [void]
|
109
109
|
# @version 2.0.0
|
110
110
|
def log(messages, event = :debug, level = event)
|
@@ -120,7 +120,7 @@ module Cinch
|
|
120
120
|
end
|
121
121
|
end
|
122
122
|
|
123
|
-
# @param [
|
123
|
+
# @param [:debug, :info, :warn, :error, :fatal] level
|
124
124
|
# @return [Boolean] Whether the currently set logging level will
|
125
125
|
# allow the passed in level to be logged
|
126
126
|
# @since 2.0.0
|
data/lib/cinch/message.rb
CHANGED
@@ -93,7 +93,7 @@ module Cinch
|
|
93
93
|
@server ||= @prefix[/^(\S+)/, 1]
|
94
94
|
end
|
95
95
|
|
96
|
-
# @return [
|
96
|
+
# @return [Integer, nil] the numeric error code, if any
|
97
97
|
def error
|
98
98
|
@error ||= (command.to_i if numeric_reply? && command[/[45]\d\d/])
|
99
99
|
end
|
data/lib/cinch/mode_parser.rb
CHANGED
@@ -4,7 +4,7 @@ module Cinch
|
|
4
4
|
module ModeParser
|
5
5
|
# @param [String] modes The mode string as sent by the server
|
6
6
|
# @param [Array<String>] params Parameters belonging to the modes
|
7
|
-
# @param [Hash
|
7
|
+
# @param [Hash{:add, :remove => Array<String>}] param_modes
|
8
8
|
# A mapping describing which modes require parameters
|
9
9
|
def self.parse_modes(modes, params, param_modes = {})
|
10
10
|
if modes.size == 0
|
data/lib/cinch/network.rb
CHANGED
@@ -79,7 +79,7 @@ module Cinch
|
|
79
79
|
# value for when no network/ircd was detected so that MessageQueue
|
80
80
|
# doesn't break.
|
81
81
|
|
82
|
-
# @return [
|
82
|
+
# @return [Numeric] The `messages per second` value that best suits
|
83
83
|
# the current network
|
84
84
|
def default_messages_per_second
|
85
85
|
case @network
|
@@ -90,7 +90,7 @@ module Cinch
|
|
90
90
|
end
|
91
91
|
end
|
92
92
|
|
93
|
-
# @return [
|
93
|
+
# @return [Integer] The `server queue size` value that best suits
|
94
94
|
# the current network
|
95
95
|
def default_server_queue_size
|
96
96
|
case @network
|
data/lib/cinch/plugin.rb
CHANGED
@@ -24,11 +24,11 @@ module Cinch
|
|
24
24
|
#
|
25
25
|
# @attr plugin_name
|
26
26
|
module ClassMethods
|
27
|
-
# @return [Hash
|
27
|
+
# @return [Hash{:pre, :post => Array<Hook>}] All hooks
|
28
28
|
attr_reader :hooks
|
29
29
|
|
30
|
-
# @return [Array
|
31
|
-
attr_accessor :
|
30
|
+
# @return [Array<:message, :channel, :private>] The list of events to react on
|
31
|
+
attr_accessor :react_on
|
32
32
|
|
33
33
|
# The name of the plugin.
|
34
34
|
# @overload plugin_name
|
@@ -79,7 +79,7 @@ module Cinch
|
|
79
79
|
# @attr [Boolean] use_suffix
|
80
80
|
# @attr [Symbol] method
|
81
81
|
# @attr [Symbol] group
|
82
|
-
Matcher = Struct.new(:pattern, :use_prefix, :use_suffix, :method, :group, :prefix, :suffix, :
|
82
|
+
Matcher = Struct.new(:pattern, :use_prefix, :use_suffix, :method, :group, :prefix, :suffix, :react_on)
|
83
83
|
|
84
84
|
# Represents a Listener as created by {#listen_to}.
|
85
85
|
#
|
@@ -94,7 +94,7 @@ module Cinch
|
|
94
94
|
# timers. This class only describes a Timer that still has to
|
95
95
|
# be created.
|
96
96
|
#
|
97
|
-
# @attr [
|
97
|
+
# @attr [Numeric] interval
|
98
98
|
# @attr [Symbol] method
|
99
99
|
# @attr [Hash] options
|
100
100
|
# @attr [Boolean] registered
|
@@ -118,7 +118,7 @@ module Cinch
|
|
118
118
|
@hooks = Hash.new{|h, k| h[k] = []}
|
119
119
|
@prefix = nil
|
120
120
|
@suffix = nil
|
121
|
-
@
|
121
|
+
@react_on = :message
|
122
122
|
@required_options = []
|
123
123
|
self.plugin_name = nil
|
124
124
|
end
|
@@ -131,7 +131,7 @@ module Cinch
|
|
131
131
|
# - {#help}
|
132
132
|
# - {#plugin_name}
|
133
133
|
# - {#prefix}
|
134
|
-
# - {#
|
134
|
+
# - {#react_on}
|
135
135
|
# - {#required_options}
|
136
136
|
# - {#suffix}
|
137
137
|
#
|
@@ -140,7 +140,7 @@ module Cinch
|
|
140
140
|
# @param [Object] value
|
141
141
|
# @return [void]
|
142
142
|
# @overload set(options)
|
143
|
-
# @param [Hash
|
143
|
+
# @param [Hash{Symbol => Object}] options The options, as key => value associations
|
144
144
|
# @return [void]
|
145
145
|
# @example
|
146
146
|
# set(:help => "the help message",
|
@@ -177,8 +177,8 @@ module Cinch
|
|
177
177
|
# @todo Document match/listener grouping
|
178
178
|
# @todo document new options
|
179
179
|
def match(pattern, options = {})
|
180
|
-
options = {:use_prefix => true, :use_suffix => true, :method => :execute, :group => nil, :prefix => nil, :suffix => nil, :
|
181
|
-
matcher = Matcher.new(pattern, *options.values_at(:use_prefix, :use_suffix, :method, :group, :prefix, :suffix, :
|
180
|
+
options = {:use_prefix => true, :use_suffix => true, :method => :execute, :group => nil, :prefix => nil, :suffix => nil, :react_on => nil}.merge(options)
|
181
|
+
matcher = Matcher.new(pattern, *options.values_at(:use_prefix, :use_suffix, :method, :group, :prefix, :suffix, :react_on))
|
182
182
|
@matchers << matcher
|
183
183
|
|
184
184
|
matcher
|
@@ -200,7 +200,7 @@ module Cinch
|
|
200
200
|
# @param [Hash] options
|
201
201
|
# @option options [Symbol] :method (:listen) The method to
|
202
202
|
# execute
|
203
|
-
# @return [Array<Listener]
|
203
|
+
# @return [Array<Listener>]
|
204
204
|
def listen_to(*types)
|
205
205
|
options = {:method => :listen}
|
206
206
|
if types.last.is_a?(Hash)
|
@@ -218,23 +218,16 @@ module Cinch
|
|
218
218
|
@ctcps << command.to_s.upcase
|
219
219
|
end
|
220
220
|
|
221
|
-
# Set which kind of messages to react on for matchers.
|
222
|
-
# @param [Symbol<:message, :channel, :private>] event Which event to react on
|
223
|
-
# @return [void]
|
224
|
-
def react_on(event)
|
225
|
-
self.reacting_on = event
|
226
|
-
end
|
227
|
-
|
228
221
|
# @example
|
229
222
|
# timer 5, method: :some_method
|
230
223
|
# def some_method
|
231
224
|
# Channel("#cinch-bots").send(Time.now.to_s)
|
232
225
|
# end
|
233
226
|
#
|
234
|
-
# @param [
|
227
|
+
# @param [Numeric] interval Interval in seconds
|
235
228
|
# @option options [Symbol] :method (:timer) Method to call (only
|
236
229
|
# if no proc is provided)
|
237
|
-
# @option options [
|
230
|
+
# @option options [Integer] :shots (Float::INFINITY) How often
|
238
231
|
# should the timer fire?
|
239
232
|
# @option options [Boolean] :threaded (true) Call method in a
|
240
233
|
# thread?
|
@@ -256,7 +249,7 @@ module Cinch
|
|
256
249
|
# Defines a hook which will be run before or after a handler is
|
257
250
|
# executed, depending on the value of `type`.
|
258
251
|
#
|
259
|
-
# @param [
|
252
|
+
# @param [:pre, :post] type Run the hook before or after
|
260
253
|
# a handler?
|
261
254
|
# @option options [Array<:match, :listen_to, :ctcp>] :for ([:match, :listen_to, :ctcp])
|
262
255
|
# Which kinds of events to run the hook for.
|
@@ -369,7 +362,7 @@ module Cinch
|
|
369
362
|
_suffix = matcher.use_suffix ? matcher.suffix || suffix : nil
|
370
363
|
|
371
364
|
pattern_to_register = Pattern.new(_prefix, matcher.pattern, _suffix)
|
372
|
-
react_on = matcher.
|
365
|
+
react_on = matcher.react_on || self.class.react_on || :message
|
373
366
|
|
374
367
|
@bot.loggers.debug "[plugin] #{self.class.plugin_name}: Registering executor with pattern `#{pattern_to_register.inspect}`, reacting on `#{react_on}`"
|
375
368
|
|
data/lib/cinch/rubyext/string.rb
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
class String
|
3
3
|
# Like `String#downcase`, but respecting different IRC casemaps.
|
4
4
|
#
|
5
|
-
# @param [
|
5
|
+
# @param [:rfc1459, :"strict-rfc1459", :ascii] mapping
|
6
6
|
# @return [String]
|
7
7
|
def irc_downcase(mapping)
|
8
8
|
case mapping
|
@@ -18,7 +18,7 @@ class String
|
|
18
18
|
|
19
19
|
# Like `String#upcase`, but respecting different IRC casemaps.
|
20
20
|
#
|
21
|
-
# @param [
|
21
|
+
# @param [:rfc1459, :"strict-rfc1459", :ascii] mapping
|
22
22
|
# @return [String]
|
23
23
|
def irc_upcase(mapping)
|
24
24
|
case mapping
|
data/lib/cinch/timer.rb
CHANGED
@@ -24,7 +24,7 @@ module Cinch
|
|
24
24
|
# @return [Bot]
|
25
25
|
attr_reader :bot
|
26
26
|
|
27
|
-
# @return [
|
27
|
+
# @return [Numeric] The interval (in seconds) of the timer
|
28
28
|
attr_accessor :interval
|
29
29
|
|
30
30
|
# @return [Boolean] If true, each invocation will be
|
@@ -37,7 +37,7 @@ module Cinch
|
|
37
37
|
# @return [Boolean]
|
38
38
|
attr_reader :started
|
39
39
|
|
40
|
-
# @return [
|
40
|
+
# @return [Integer] The remaining number of shots before this timer
|
41
41
|
# will stop. This value will automatically reset after
|
42
42
|
# restarting the timer.
|
43
43
|
attr_accessor :shots
|
@@ -50,9 +50,9 @@ module Cinch
|
|
50
50
|
|
51
51
|
# @param [Bot] bot The instance of {Bot} the timer is associated
|
52
52
|
# with
|
53
|
-
# @option options [
|
53
|
+
# @option options [Numeric] :interval The interval (in seconds) of
|
54
54
|
# the timer
|
55
|
-
# @option options [
|
55
|
+
# @option options [Integer] :shots (Float::INFINITY) How often should the
|
56
56
|
# timer fire?
|
57
57
|
# @option options [Boolean] :threaded (true) If true, each invocation will be
|
58
58
|
# executed in a thread of its own.
|
data/lib/cinch/user.rb
CHANGED
@@ -7,7 +7,7 @@ module Cinch
|
|
7
7
|
# @attr_reader [String] host
|
8
8
|
# @attr_reader [String] realname
|
9
9
|
# @attr_reader [String] authname
|
10
|
-
# @attr_reader [
|
10
|
+
# @attr_reader [Integer] idle How long this user has been idle, in seconds.
|
11
11
|
# This is a snapshot of the last WHOIS.
|
12
12
|
# @attr_reader [Time] signed_on_at
|
13
13
|
# @attr_reader [Array<Channel>] channels All channels the user is in.
|
data/lib/cinch/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cinch
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.0.pre.
|
4
|
+
version: 2.0.0.pre.2
|
5
5
|
prerelease: 6
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-03-
|
12
|
+
date: 2012-03-05 00:00:00.000000000 Z
|
13
13
|
dependencies: []
|
14
14
|
description: A simple, friendly DSL for creating IRC bots
|
15
15
|
email:
|