cinch 0.2.9 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README.rdoc +9 -13
- data/Rakefile +7 -2
- data/lib/cinch.rb +1 -1
- data/lib/cinch/base.rb +42 -32
- data/lib/cinch/irc.rb +3 -3
- data/lib/cinch/irc/message.rb +18 -14
- data/lib/cinch/irc/parser.rb +10 -8
- data/lib/cinch/irc/socket.rb +6 -5
- data/lib/cinch/rules.rb +12 -12
- data/spec/base_spec.rb +13 -3
- data/spec/irc/parser_spec.rb +1 -1
- metadata +7 -7
data/README.rdoc
CHANGED
@@ -1,8 +1,7 @@
|
|
1
|
-
= Cinch: The IRC
|
1
|
+
= Cinch: The IRC Bot Building Framework
|
2
2
|
|
3
3
|
== Description
|
4
|
-
|
5
|
-
Cinch is an IRC Microframework for quickly creating IRC bots
|
4
|
+
Cinch is an IRC Bot Building Framework for quickly creating IRC bots
|
6
5
|
in Ruby with minimal effort.
|
7
6
|
It provides a minimal interface based on plugins and rules. It's as simple as creating a
|
8
7
|
plugin, defining a rule, and watching your profits flourish.
|
@@ -14,7 +13,6 @@ If you'd like to test your own Cinch experiments you can do so in the cinch IRC
|
|
14
13
|
on {irc.freenode.org}[irc://irc.freenode.org/cinch]. Support is also welcome here.
|
15
14
|
|
16
15
|
== Installation
|
17
|
-
The latest version of Cinch is 0.2
|
18
16
|
|
19
17
|
=== RubyGems
|
20
18
|
You can install the latest version of Cinch using RubyGems
|
@@ -25,7 +23,6 @@ Alternatively you can check out the latest code directly from Github
|
|
25
23
|
git clone http://github.com/injekt/cinch.git
|
26
24
|
|
27
25
|
== Example
|
28
|
-
|
29
26
|
Your typical <em>Hello, World</em> application would go something like this:
|
30
27
|
|
31
28
|
require 'cinch'
|
@@ -62,17 +59,18 @@ other Ruby script.
|
|
62
59
|
|
63
60
|
ruby hello.rb
|
64
61
|
|
65
|
-
Cinch also parses the command line for options, to save you having to configure
|
62
|
+
Cinch also parses the command line for options, to save you having to configure
|
63
|
+
options within your script.
|
66
64
|
|
67
65
|
ruby hello.rb -s irc.freenode.org -n Coolbot
|
68
|
-
ruby hello.rb
|
66
|
+
ruby hello.rb -C foo,bar
|
69
67
|
|
70
|
-
Doing a <b>ruby hello.rb -h</b> provides all possible command line options. When using the <em
|
71
|
-
option, the channel prefix is option, and if none is given the channel
|
68
|
+
Doing a <b>ruby hello.rb -h</b> provides all possible command line options. When using the <em>-C</em>
|
69
|
+
or <em>--channels</em> option, the channel prefix is option, and if none is given the channel
|
70
|
+
will be prefixed with a hash (#)
|
72
71
|
character
|
73
72
|
|
74
73
|
== Plugins
|
75
|
-
|
76
74
|
Plugins are invoked using the command prefix character (which by default is set to <b>!</b>). You can
|
77
75
|
also tell Cinch to ignore any command prefix and instead use the bots username. This would provide
|
78
76
|
a result similar to this:
|
@@ -172,8 +170,7 @@ before sending me a pull request. Alternatively paste the example and inform me
|
|
172
170
|
channel or by email
|
173
171
|
|
174
172
|
== Authors
|
175
|
-
|
176
|
-
* {Lee Jarvis}[http://blog.injekt.net]
|
173
|
+
* {Lee Jarvis}[http://injekt.net]
|
177
174
|
|
178
175
|
== Notes
|
179
176
|
* RDoc API documentation is available {here}[http://rdoc.injekt.net/cinch]
|
@@ -189,5 +186,4 @@ request once one patch has been submitted. Any contribution is welcome and appre
|
|
189
186
|
== TODO
|
190
187
|
* More specs
|
191
188
|
* More documentation
|
192
|
-
* More examples
|
193
189
|
|
data/Rakefile
CHANGED
@@ -1,14 +1,19 @@
|
|
1
1
|
require "rake"
|
2
2
|
require "rake/clean"
|
3
3
|
require "rake/gempackagetask"
|
4
|
-
require "rake/rdoctask"
|
5
4
|
require "spec/rake/spectask"
|
6
5
|
|
6
|
+
begin
|
7
|
+
require 'hanna/rdoctask'
|
8
|
+
rescue LoadError
|
9
|
+
require 'rake/rdoctask'
|
10
|
+
end
|
11
|
+
|
7
12
|
require 'lib/cinch'
|
8
13
|
|
9
14
|
NAME = 'cinch'
|
10
15
|
VERSION = Cinch::VERSION
|
11
|
-
TITLE = "Cinch: The IRC
|
16
|
+
TITLE = "Cinch: The IRC Bot Building Framework"
|
12
17
|
CLEAN.include ["*.gem", "rdoc"]
|
13
18
|
RDOC_OPTS = [
|
14
19
|
"-U", "--title", TITLE,
|
data/lib/cinch.rb
CHANGED
data/lib/cinch/base.rb
CHANGED
@@ -1,8 +1,5 @@
|
|
1
1
|
module Cinch
|
2
2
|
|
3
|
-
# == Author
|
4
|
-
# * Lee Jarvis - ljjarvis@gmail.com
|
5
|
-
#
|
6
3
|
# == Description
|
7
4
|
# The base for an IRC connection
|
8
5
|
# TODO: More documentation
|
@@ -17,6 +14,9 @@ module Cinch
|
|
17
14
|
# bot.plugin "say :text" do |m|
|
18
15
|
# m.reply m.args[:text]
|
19
16
|
# end
|
17
|
+
#
|
18
|
+
# == Author
|
19
|
+
# * Lee Jarvis - ljjarvis@gmail.com
|
20
20
|
class Base
|
21
21
|
|
22
22
|
# A Hash holding rules and attributes
|
@@ -28,6 +28,12 @@ module Cinch
|
|
28
28
|
# An OpenStruct holding all configuration options
|
29
29
|
attr_reader :options
|
30
30
|
|
31
|
+
# Hash of custom rule patterns
|
32
|
+
attr_reader :custom_patterns
|
33
|
+
|
34
|
+
# Our IRC::Socket instance
|
35
|
+
attr_reader :irc
|
36
|
+
|
31
37
|
# Default options hash
|
32
38
|
DEFAULTS = {
|
33
39
|
:port => 6667,
|
@@ -64,7 +70,14 @@ module Cinch
|
|
64
70
|
|
65
71
|
@rules = Rules.new
|
66
72
|
@listeners = {}
|
67
|
-
|
73
|
+
|
74
|
+
@custom_patterns = {
|
75
|
+
'digit' => "(\\d+?)",
|
76
|
+
'word' => "([a-zA-Z_]+?)",
|
77
|
+
'string' => "(\\w+?)",
|
78
|
+
'upper' => "([A-Z]+?)",
|
79
|
+
'lower' => "([a-z]+?)",
|
80
|
+
}
|
68
81
|
|
69
82
|
@irc = IRC::Socket.new(options[:server], options[:port])
|
70
83
|
@parser = IRC::Parser.new
|
@@ -78,7 +91,7 @@ module Cinch
|
|
78
91
|
end
|
79
92
|
|
80
93
|
if @options.respond_to?(:channels)
|
81
|
-
on(
|
94
|
+
on("004") { @options.channels.each {|c| @irc.join(c) } }
|
82
95
|
end
|
83
96
|
end
|
84
97
|
|
@@ -123,6 +136,7 @@ module Cinch
|
|
123
136
|
@rules.add_rule(rule, keys, options, blk)
|
124
137
|
end
|
125
138
|
end
|
139
|
+
alias :rule :plugin
|
126
140
|
|
127
141
|
# Add new listeners
|
128
142
|
#
|
@@ -130,6 +144,11 @@ module Cinch
|
|
130
144
|
# on(376) do |m|
|
131
145
|
# m.join "#mychan"
|
132
146
|
# end
|
147
|
+
#
|
148
|
+
# Note that when adding listeners for numberic IRC replies which
|
149
|
+
# begin with a 0 (digit), make sure you define the command as a
|
150
|
+
# String and not Integer. This is because 001.to_s == "1" so the
|
151
|
+
# command will not work as expected.
|
133
152
|
def on(*commands, &blk)
|
134
153
|
commands.map {|x| x.to_s.downcase.to_sym }.each do |cmd|
|
135
154
|
if @listeners.key?(cmd)
|
@@ -153,28 +172,28 @@ module Cinch
|
|
153
172
|
# * upper - matches [A-Z]+
|
154
173
|
#
|
155
174
|
# == Examples
|
156
|
-
#
|
175
|
+
# === Capturing individual words
|
157
176
|
# bot.plugin("say :text-word")
|
158
177
|
# * Does match !say foo
|
159
178
|
# * Does not match !say foo bar baz
|
160
179
|
#
|
161
|
-
#
|
180
|
+
# === Capturing digits
|
162
181
|
# bot.plugin("say :text-digit")
|
163
182
|
# * Does match !say 3
|
164
183
|
# * Does not match !say 3 4
|
165
184
|
# * Does not match !say foo
|
166
185
|
#
|
167
|
-
#
|
186
|
+
# === Both digit and word
|
168
187
|
# bot.plugin("say :n-digit :text-word")
|
169
188
|
# * Does match !say 3 foo
|
170
189
|
# * Does not match !say 3 foo bar
|
171
190
|
#
|
172
|
-
#
|
191
|
+
# === Capturing until the end of the line
|
173
192
|
# bot.plugin("say :text")
|
174
193
|
# * Does match !say foo
|
175
194
|
# * Does match !say foo bar
|
176
195
|
#
|
177
|
-
# Or mix them all
|
196
|
+
# === Or mix them all
|
178
197
|
# bot.plugin("say :n-digit :who-word :text")
|
179
198
|
#
|
180
199
|
# Using "!say 3 injekt some text here" would provide
|
@@ -193,22 +212,14 @@ module Cinch
|
|
193
212
|
Regexp.escape(match)
|
194
213
|
else
|
195
214
|
k = $2
|
196
|
-
if k =~
|
215
|
+
if k =~ /\-\w+$/
|
197
216
|
key, type = k.split('-')
|
198
217
|
keys << key[1..-1]
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
when 'word'; "([a-zA-Z_]+?)"
|
203
|
-
when 'string'; "(\\w+?)"
|
204
|
-
when 'upper'; "([A-Z]+?)"
|
205
|
-
when 'lower'; "([a-z]+?)"
|
218
|
+
|
219
|
+
if @custom_patterns.include?(type)
|
220
|
+
@custom_patterns[type]
|
206
221
|
else
|
207
|
-
|
208
|
-
@custom_patterns[type]
|
209
|
-
else
|
210
|
-
"([^\x00\r\n]+?)"
|
211
|
-
end
|
222
|
+
"([^\x00\r\n]+?)"
|
212
223
|
end
|
213
224
|
else
|
214
225
|
keys << k[1..-1]
|
@@ -222,20 +233,19 @@ module Cinch
|
|
222
233
|
# Add a custom 'type', for rule validation
|
223
234
|
#
|
224
235
|
# == Example
|
225
|
-
#
|
226
|
-
#
|
227
|
-
#
|
228
|
-
#
|
236
|
+
# bot = Cinch.setup do
|
237
|
+
# server 'irc.freenode.org'
|
238
|
+
# port 6667
|
239
|
+
# end
|
229
240
|
#
|
230
|
-
#
|
241
|
+
# bot.add_custom_pattern(:number, "[0-9]")
|
231
242
|
#
|
232
|
-
#
|
233
|
-
#
|
234
|
-
#
|
243
|
+
# bot.plugin("getnum :foo-number") do |m|
|
244
|
+
# m.reply "Your number was: #{m.args[:foo]}"
|
245
|
+
# end
|
235
246
|
def add_custom_pattern(name, pattern)
|
236
247
|
@custom_patterns[name.to_s] = "(#{pattern.to_s})"
|
237
248
|
end
|
238
|
-
alias :add_custom_type :add_custom_pattern # backwards
|
239
249
|
alias :add_pattern :add_custom_pattern
|
240
250
|
|
241
251
|
# Run run run
|
data/lib/cinch/irc.rb
CHANGED
@@ -8,9 +8,7 @@ require 'irc/message'
|
|
8
8
|
require 'irc/socket'
|
9
9
|
|
10
10
|
module Cinch
|
11
|
-
|
12
|
-
# * Lee Jarvis - ljjarvis@gmail.com
|
13
|
-
#
|
11
|
+
|
14
12
|
# == Description
|
15
13
|
# Cinch::IRC provides tools to interact with an IRC server, this
|
16
14
|
# includes reading/writing/parsing and building a message response.
|
@@ -38,6 +36,8 @@ module Cinch
|
|
38
36
|
# end
|
39
37
|
# end
|
40
38
|
#
|
39
|
+
# == Author
|
40
|
+
# * Lee Jarvis - ljjarvis@gmail.com
|
41
41
|
module IRC
|
42
42
|
|
43
43
|
end
|
data/lib/cinch/irc/message.rb
CHANGED
@@ -1,18 +1,17 @@
|
|
1
1
|
module Cinch
|
2
2
|
module IRC
|
3
3
|
|
4
|
-
# == Author
|
5
|
-
# * Lee Jarvis - ljjarvis@gmail.com
|
6
|
-
#
|
7
4
|
# == Description
|
8
|
-
# IRC::Message
|
9
|
-
# IRC::Parser#
|
10
|
-
# not do any parsing of itself, that's all down to the parser
|
11
|
-
#
|
12
|
-
# == See
|
13
|
-
# * Cinch::IRC::Parser#parse_servermessage
|
5
|
+
# IRC::Message provies a nicely encapsulated IRC message object. Used directly by
|
6
|
+
# IRC::Parser#parse and sent to any plugin or listener defined.
|
14
7
|
#
|
15
8
|
# TODO: Add more documentation
|
9
|
+
#
|
10
|
+
# == See Also
|
11
|
+
# * Cinch::IRC::Parser#parse
|
12
|
+
#
|
13
|
+
# == Author
|
14
|
+
# * Lee Jarvis - ljjarvis@gmail.com
|
16
15
|
class Message
|
17
16
|
|
18
17
|
# Message prefix
|
@@ -74,16 +73,21 @@ module Cinch
|
|
74
73
|
@data.delete(var)
|
75
74
|
end
|
76
75
|
|
76
|
+
# Alter an attribute
|
77
|
+
def alter(var, val)
|
78
|
+
if @data.key?(var)
|
79
|
+
@data[var] = val
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
77
83
|
# Check if our message was sent privately
|
78
84
|
def private?
|
79
85
|
!@data[:channel]
|
80
86
|
end
|
81
87
|
|
82
|
-
#
|
83
|
-
def
|
84
|
-
|
85
|
-
@data[:user] = user
|
86
|
-
@data[:host] = host
|
88
|
+
# Check if our message was sent publicly (in a channel)
|
89
|
+
def public?
|
90
|
+
!private?
|
87
91
|
end
|
88
92
|
|
89
93
|
# Reply to a channel or user, probably the most commonly used helper
|
data/lib/cinch/irc/parser.rb
CHANGED
@@ -1,9 +1,6 @@
|
|
1
1
|
module Cinch
|
2
2
|
module IRC
|
3
3
|
|
4
|
-
# == Author
|
5
|
-
# * Lee Jarvis - ljjarvis@gmail.com
|
6
|
-
#
|
7
4
|
# == Description
|
8
5
|
# Parse incoming IRC lines and extract data, returning a nicely
|
9
6
|
# encapsulated Cinch::IRC::Message
|
@@ -19,6 +16,9 @@ module Cinch
|
|
19
16
|
# message.nick #=> foo
|
20
17
|
# message.channel #=> #mychan
|
21
18
|
# message.text #=> ding dong!
|
19
|
+
#
|
20
|
+
# == Author
|
21
|
+
# * Lee Jarvis - ljjarvis@gmail.com
|
22
22
|
class Parser
|
23
23
|
|
24
24
|
# A hash holding all of our patterns
|
@@ -79,7 +79,7 @@ module Cinch
|
|
79
79
|
|
80
80
|
# Parse the incoming raw IRC string and return
|
81
81
|
# a nicely formatted IRC::Message
|
82
|
-
def
|
82
|
+
def parse(raw)
|
83
83
|
raise ArgumentError, raw unless raw && matches = raw.match(pattern(:message))
|
84
84
|
|
85
85
|
prefix, command, parameters = matches.captures
|
@@ -90,17 +90,19 @@ module Cinch
|
|
90
90
|
m = IRC::Message.new(raw, prefix, command, params)
|
91
91
|
|
92
92
|
if prefix && userhost = parse_userhost(prefix)
|
93
|
-
|
93
|
+
nick, user, host = userhost
|
94
|
+
m.add(:nick, nick)
|
95
|
+
m.add(:user, user)
|
96
|
+
m.add(:host, host)
|
94
97
|
|
95
98
|
unless m.params.empty?
|
96
|
-
m
|
97
|
-
m
|
99
|
+
m.add(:recipient, m.params.first)
|
100
|
+
m.add(:channel, m.recipient) if valid_channel?(m.recipient)
|
98
101
|
end
|
99
102
|
end
|
100
103
|
|
101
104
|
m # Return our IRC::Message
|
102
105
|
end
|
103
|
-
alias :parse :parse_servermessage
|
104
106
|
|
105
107
|
# Parse the prefix returned from the server
|
106
108
|
# and return an Array of [nick, user, host] or
|
data/lib/cinch/irc/socket.rb
CHANGED
@@ -1,10 +1,8 @@
|
|
1
1
|
module Cinch
|
2
2
|
module IRC
|
3
|
-
|
4
|
-
# * Lee Jarvis - ljjarvis@gmail.com
|
5
|
-
#
|
3
|
+
|
6
4
|
# == Description
|
7
|
-
# This class has been directly
|
5
|
+
# This class has been directly taken from the irc-socket library. Original documentation
|
8
6
|
# for this class can be found {here}[http://rdoc.injekt.net/irc-socket].
|
9
7
|
#
|
10
8
|
# IRCSocket is an IRC wrapper around a TCPSocket. It implements all of the major
|
@@ -37,6 +35,9 @@ module Cinch
|
|
37
35
|
#
|
38
36
|
# puts irc.read
|
39
37
|
# end
|
38
|
+
#
|
39
|
+
# == Author
|
40
|
+
# * Lee Jarvis - ljjarvis@gmail.com
|
40
41
|
class Socket
|
41
42
|
|
42
43
|
# The server our socket is connected to
|
@@ -166,7 +167,7 @@ module Cinch
|
|
166
167
|
|
167
168
|
# Send JOIN command - Join a channel with given password
|
168
169
|
def join(channel, password=nil)
|
169
|
-
|
170
|
+
write_optional("JOIN #{channel}", password)
|
170
171
|
end
|
171
172
|
|
172
173
|
# Send PART command
|
data/lib/cinch/rules.rb
CHANGED
@@ -1,8 +1,5 @@
|
|
1
1
|
module Cinch
|
2
2
|
|
3
|
-
# == Author
|
4
|
-
# * Lee Jarvis - ljjarvis@gmail.com
|
5
|
-
#
|
6
3
|
# == Description
|
7
4
|
# Every rule defined through the Cinch::Base#plugin method becomes an instance
|
8
5
|
# of this class. Each rule consists of keys used for named parameters, a hash
|
@@ -10,25 +7,28 @@ module Cinch
|
|
10
7
|
#
|
11
8
|
# When a rule matches an IRC message, all options with be checked, then all
|
12
9
|
# callbacks will be invoked.
|
10
|
+
#
|
11
|
+
# == Author
|
12
|
+
# * Lee Jarvis - ljjarvis@gmail.com
|
13
13
|
class Rule < Struct.new(:rule, :keys, :options, :callbacks)
|
14
14
|
def initialize(rule, keys, options, callback)
|
15
15
|
callbacks = [callback]
|
16
16
|
super(rule, keys, options, callbacks)
|
17
17
|
end
|
18
18
|
|
19
|
-
# Execute all callbacks, passing
|
19
|
+
# Execute all callbacks, passing a Cinch::IRC::Message to them
|
20
20
|
def execute(message)
|
21
21
|
options.keys.each do |key|
|
22
22
|
case key
|
23
23
|
when :nick, :nicks
|
24
|
-
return unless validate(options[:nick], message.nick)
|
24
|
+
return unless validate(options[:nick] || options[:nicks], message.nick)
|
25
25
|
when :host, :hosts
|
26
|
-
return unless validate(options[:host], message.host)
|
26
|
+
return unless validate(options[:host] || options[:hosts], message.host)
|
27
27
|
when :user, :users
|
28
|
-
return unless validate(options[:user], message.user)
|
28
|
+
return unless validate(options[:user] || options[:users], message.user)
|
29
29
|
when :channel, :channels
|
30
30
|
if message.channel
|
31
|
-
return unless validate(options[:channel], message.channel)
|
31
|
+
return unless validate(options[:channel] || options[:channels], message.channel)
|
32
32
|
end
|
33
33
|
end
|
34
34
|
end
|
@@ -43,7 +43,7 @@ module Cinch
|
|
43
43
|
if option.is_a?(Array)
|
44
44
|
return unless option.any?{|o| o == attr }
|
45
45
|
else
|
46
|
-
return unless
|
46
|
+
return unless option.to_s == attr
|
47
47
|
end
|
48
48
|
true
|
49
49
|
end
|
@@ -54,9 +54,6 @@ module Cinch
|
|
54
54
|
end
|
55
55
|
end
|
56
56
|
|
57
|
-
# == Author
|
58
|
-
# * Lee Jarvis - ljjarvis@gmail.com
|
59
|
-
#
|
60
57
|
# == Description
|
61
58
|
# This class provides an interface to manage rules. A rule should only ever be
|
62
59
|
# added using the Rules#add_rule method and retrieved using the Rules#get_rule
|
@@ -87,6 +84,9 @@ module Cinch
|
|
87
84
|
# rules.get_rule('foo')
|
88
85
|
# rules.options = {:foo => 'bar'}
|
89
86
|
# rules.options[:bar] = 'baz'
|
87
|
+
#
|
88
|
+
# == Author
|
89
|
+
# * Lee Jarvis - ljjarvis@gmail.com
|
90
90
|
class Rules
|
91
91
|
def initialize
|
92
92
|
@rules = {}
|
data/spec/base_spec.rb
CHANGED
@@ -20,9 +20,19 @@ describe "Cinch::Base" do
|
|
20
20
|
@base.listeners.should include :"433"
|
21
21
|
end
|
22
22
|
|
23
|
-
it "should add a
|
24
|
-
@base.listeners.should_not include :'
|
25
|
-
@full.listeners.should include :'
|
23
|
+
it "should add a 004 listener, only if channels are set" do
|
24
|
+
@base.listeners.should_not include :'004'
|
25
|
+
@full.listeners.should include :'004'
|
26
|
+
end
|
27
|
+
|
28
|
+
it "should add a 433 nick taken listener" do
|
29
|
+
@base.listeners.should include :'433'
|
30
|
+
end
|
31
|
+
|
32
|
+
it "should add default custom_patterns" do
|
33
|
+
[:digit, :word, :string, :upper, :lower].each do |l|
|
34
|
+
@base.custom_patterns.should include l.to_s
|
35
|
+
end
|
26
36
|
end
|
27
37
|
end
|
28
38
|
|
data/spec/irc/parser_spec.rb
CHANGED
metadata
CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
|
|
4
4
|
prerelease: false
|
5
5
|
segments:
|
6
6
|
- 0
|
7
|
-
-
|
8
|
-
-
|
9
|
-
version: 0.
|
7
|
+
- 3
|
8
|
+
- 0
|
9
|
+
version: 0.3.0
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Lee 'injekt' Jarvis
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2010-05-
|
17
|
+
date: 2010-05-18 00:00:00 +01:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
@@ -31,7 +31,7 @@ dependencies:
|
|
31
31
|
version: 1.3.0
|
32
32
|
type: :development
|
33
33
|
version_requirements: *id001
|
34
|
-
description: An IRC
|
34
|
+
description: An IRC Bot Building Framework
|
35
35
|
email: ljjarvis@gmail.com
|
36
36
|
executables: []
|
37
37
|
|
@@ -77,7 +77,7 @@ post_install_message:
|
|
77
77
|
rdoc_options:
|
78
78
|
- --quiet
|
79
79
|
- --title
|
80
|
-
- "Cinch: The IRC
|
80
|
+
- "Cinch: The IRC Bot Building Framework"
|
81
81
|
- --main
|
82
82
|
- README.rdoc
|
83
83
|
require_paths:
|
@@ -104,6 +104,6 @@ rubyforge_project:
|
|
104
104
|
rubygems_version: 1.3.6
|
105
105
|
signing_key:
|
106
106
|
specification_version: 3
|
107
|
-
summary: An IRC
|
107
|
+
summary: An IRC Bot Building Framework
|
108
108
|
test_files: []
|
109
109
|
|