cinch 0.3.5 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/LICENSE +20 -0
- data/README.md +192 -0
- data/Rakefile +53 -43
- data/examples/basic/autovoice.rb +32 -0
- data/examples/basic/google.rb +35 -0
- data/examples/basic/hello.rb +15 -0
- data/examples/basic/join_part.rb +38 -0
- data/examples/basic/memo.rb +39 -0
- data/examples/basic/msg.rb +16 -0
- data/examples/basic/seen.rb +36 -0
- data/examples/basic/urban_dict.rb +35 -0
- data/examples/basic/url_shorten.rb +35 -0
- data/examples/plugins/autovoice.rb +40 -0
- data/examples/plugins/custom_prefix.rb +23 -0
- data/examples/plugins/google.rb +37 -0
- data/examples/plugins/hello.rb +22 -0
- data/examples/plugins/join_part.rb +42 -0
- data/examples/plugins/memo.rb +50 -0
- data/examples/plugins/msg.rb +22 -0
- data/examples/plugins/multiple_matches.rb +41 -0
- data/examples/plugins/seen.rb +45 -0
- data/examples/plugins/urban_dict.rb +30 -0
- data/examples/plugins/url_shorten.rb +32 -0
- data/lib/cinch.rb +7 -20
- data/lib/cinch/ban.rb +41 -0
- data/lib/cinch/bot.rb +479 -0
- data/lib/cinch/callback.rb +11 -0
- data/lib/cinch/channel.rb +419 -0
- data/lib/cinch/constants.rb +369 -0
- data/lib/cinch/exceptions.rb +25 -0
- data/lib/cinch/helpers.rb +21 -0
- data/lib/cinch/irc.rb +344 -38
- data/lib/cinch/isupport.rb +96 -0
- data/lib/cinch/logger/formatted_logger.rb +80 -0
- data/lib/cinch/logger/logger.rb +44 -0
- data/lib/cinch/logger/null_logger.rb +18 -0
- data/lib/cinch/mask.rb +46 -0
- data/lib/cinch/message.rb +183 -0
- data/lib/cinch/message_queue.rb +62 -0
- data/lib/cinch/plugin.rb +205 -0
- data/lib/cinch/rubyext/infinity.rb +1 -0
- data/lib/cinch/rubyext/module.rb +18 -0
- data/lib/cinch/rubyext/queue.rb +19 -0
- data/lib/cinch/rubyext/string.rb +24 -0
- data/lib/cinch/syncable.rb +55 -0
- data/lib/cinch/user.rb +325 -0
- data/spec/bot_spec.rb +5 -0
- data/spec/channel_spec.rb +5 -0
- data/spec/cinch_spec.rb +5 -0
- data/spec/irc_spec.rb +5 -0
- data/spec/message_spec.rb +5 -0
- data/spec/plugin_spec.rb +5 -0
- data/spec/{helper.rb → spec_helper.rb} +0 -0
- data/spec/user_spec.rb +5 -0
- metadata +69 -51
- data/README.rdoc +0 -195
- data/examples/autovoice.rb +0 -32
- data/examples/custom_patterns.rb +0 -19
- data/examples/custom_prefix.rb +0 -25
- data/examples/google.rb +0 -31
- data/examples/hello.rb +0 -13
- data/examples/join_part.rb +0 -26
- data/examples/memo.rb +0 -40
- data/examples/msg.rb +0 -14
- data/examples/named-param-types.rb +0 -19
- data/examples/seen.rb +0 -41
- data/examples/urban_dict.rb +0 -31
- data/examples/url_shorten.rb +0 -34
- data/lib/cinch/base.rb +0 -368
- data/lib/cinch/irc/message.rb +0 -135
- data/lib/cinch/irc/parser.rb +0 -141
- data/lib/cinch/irc/socket.rb +0 -329
- data/lib/cinch/names.rb +0 -54
- data/lib/cinch/rules.rb +0 -171
- data/spec/base_spec.rb +0 -94
- data/spec/irc/helper.rb +0 -8
- data/spec/irc/message_spec.rb +0 -61
- data/spec/irc/parser_spec.rb +0 -103
- data/spec/irc/socket_spec.rb +0 -90
- data/spec/names_spec.rb +0 -393
- data/spec/options_spec.rb +0 -45
- data/spec/rules_spec.rb +0 -109
data/spec/bot_spec.rb
ADDED
data/spec/cinch_spec.rb
ADDED
data/spec/irc_spec.rb
ADDED
data/spec/plugin_spec.rb
ADDED
File without changes
|
data/spec/user_spec.rb
ADDED
metadata
CHANGED
@@ -1,21 +1,21 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cinch
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash: 25
|
5
4
|
prerelease: false
|
6
5
|
segments:
|
6
|
+
- 1
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
|
10
|
-
version: 0.3.5
|
8
|
+
- 0
|
9
|
+
version: 1.0.0
|
11
10
|
platform: ruby
|
12
11
|
authors:
|
13
|
-
- Lee
|
12
|
+
- Lee Jarvis
|
13
|
+
- Dominik Honnef
|
14
14
|
autorequire:
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2010-
|
18
|
+
date: 2010-08-19 00:00:00 +01:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -26,7 +26,6 @@ dependencies:
|
|
26
26
|
requirements:
|
27
27
|
- - "="
|
28
28
|
- !ruby/object:Gem::Version
|
29
|
-
hash: 27
|
30
29
|
segments:
|
31
30
|
- 1
|
32
31
|
- 3
|
@@ -34,58 +33,79 @@ dependencies:
|
|
34
33
|
version: 1.3.0
|
35
34
|
type: :development
|
36
35
|
version_requirements: *id001
|
37
|
-
description:
|
38
|
-
email:
|
36
|
+
description: A simple, friendly DSL for creating IRC bots
|
37
|
+
email:
|
38
|
+
- lee@jarvis.co
|
39
|
+
- dominikh@fork-bomb.org
|
39
40
|
executables: []
|
40
41
|
|
41
42
|
extensions: []
|
42
43
|
|
43
|
-
extra_rdoc_files:
|
44
|
-
|
44
|
+
extra_rdoc_files: []
|
45
|
+
|
45
46
|
files:
|
46
|
-
-
|
47
|
+
- LICENSE
|
47
48
|
- Rakefile
|
48
|
-
-
|
49
|
-
- spec/
|
50
|
-
- spec/
|
51
|
-
- spec/irc/socket_spec.rb
|
52
|
-
- spec/irc/helper.rb
|
53
|
-
- spec/rules_spec.rb
|
49
|
+
- README.md
|
50
|
+
- spec/message_spec.rb
|
51
|
+
- spec/spec_helper.rb
|
54
52
|
- spec/spec.opts
|
55
|
-
- spec/
|
56
|
-
- spec/
|
57
|
-
- spec/
|
53
|
+
- spec/cinch_spec.rb
|
54
|
+
- spec/plugin_spec.rb
|
55
|
+
- spec/irc_spec.rb
|
56
|
+
- spec/bot_spec.rb
|
57
|
+
- spec/channel_spec.rb
|
58
|
+
- spec/user_spec.rb
|
58
59
|
- lib/cinch.rb
|
59
|
-
- lib/cinch/
|
60
|
-
- lib/cinch/
|
61
|
-
- lib/cinch/
|
62
|
-
- lib/cinch/
|
60
|
+
- lib/cinch/bot.rb
|
61
|
+
- lib/cinch/user.rb
|
62
|
+
- lib/cinch/mask.rb
|
63
|
+
- lib/cinch/exceptions.rb
|
63
64
|
- lib/cinch/irc.rb
|
64
|
-
- lib/cinch/
|
65
|
-
- lib/cinch/
|
66
|
-
-
|
67
|
-
-
|
68
|
-
-
|
69
|
-
-
|
70
|
-
-
|
71
|
-
-
|
72
|
-
-
|
73
|
-
-
|
74
|
-
-
|
75
|
-
-
|
76
|
-
-
|
77
|
-
-
|
65
|
+
- lib/cinch/helpers.rb
|
66
|
+
- lib/cinch/isupport.rb
|
67
|
+
- lib/cinch/logger/null_logger.rb
|
68
|
+
- lib/cinch/logger/logger.rb
|
69
|
+
- lib/cinch/logger/formatted_logger.rb
|
70
|
+
- lib/cinch/constants.rb
|
71
|
+
- lib/cinch/ban.rb
|
72
|
+
- lib/cinch/message.rb
|
73
|
+
- lib/cinch/syncable.rb
|
74
|
+
- lib/cinch/plugin.rb
|
75
|
+
- lib/cinch/callback.rb
|
76
|
+
- lib/cinch/channel.rb
|
77
|
+
- lib/cinch/message_queue.rb
|
78
|
+
- lib/cinch/rubyext/infinity.rb
|
79
|
+
- lib/cinch/rubyext/queue.rb
|
80
|
+
- lib/cinch/rubyext/string.rb
|
81
|
+
- lib/cinch/rubyext/module.rb
|
82
|
+
- examples/basic/join_part.rb
|
83
|
+
- examples/basic/url_shorten.rb
|
84
|
+
- examples/basic/urban_dict.rb
|
85
|
+
- examples/basic/msg.rb
|
86
|
+
- examples/basic/hello.rb
|
87
|
+
- examples/basic/seen.rb
|
88
|
+
- examples/basic/memo.rb
|
89
|
+
- examples/basic/google.rb
|
90
|
+
- examples/basic/autovoice.rb
|
91
|
+
- examples/plugins/join_part.rb
|
92
|
+
- examples/plugins/url_shorten.rb
|
93
|
+
- examples/plugins/custom_prefix.rb
|
94
|
+
- examples/plugins/urban_dict.rb
|
95
|
+
- examples/plugins/msg.rb
|
96
|
+
- examples/plugins/hello.rb
|
97
|
+
- examples/plugins/multiple_matches.rb
|
98
|
+
- examples/plugins/seen.rb
|
99
|
+
- examples/plugins/memo.rb
|
100
|
+
- examples/plugins/google.rb
|
101
|
+
- examples/plugins/autovoice.rb
|
78
102
|
has_rdoc: true
|
79
|
-
homepage: http://
|
103
|
+
homepage: http://doc.injekt.net/cinch
|
80
104
|
licenses: []
|
81
105
|
|
82
106
|
post_install_message:
|
83
|
-
rdoc_options:
|
84
|
-
|
85
|
-
- --title
|
86
|
-
- "Cinch: The IRC Bot Building Framework"
|
87
|
-
- --main
|
88
|
-
- README.rdoc
|
107
|
+
rdoc_options: []
|
108
|
+
|
89
109
|
require_paths:
|
90
110
|
- lib
|
91
111
|
required_ruby_version: !ruby/object:Gem::Requirement
|
@@ -93,18 +113,16 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
93
113
|
requirements:
|
94
114
|
- - ">="
|
95
115
|
- !ruby/object:Gem::Version
|
96
|
-
hash: 57
|
97
116
|
segments:
|
98
117
|
- 1
|
99
|
-
-
|
100
|
-
-
|
101
|
-
version: 1.
|
118
|
+
- 9
|
119
|
+
- 1
|
120
|
+
version: 1.9.1
|
102
121
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
103
122
|
none: false
|
104
123
|
requirements:
|
105
124
|
- - ">="
|
106
125
|
- !ruby/object:Gem::Version
|
107
|
-
hash: 3
|
108
126
|
segments:
|
109
127
|
- 0
|
110
128
|
version: "0"
|
data/README.rdoc
DELETED
@@ -1,195 +0,0 @@
|
|
1
|
-
= Cinch: The IRC Bot Building Framework
|
2
|
-
|
3
|
-
== Description
|
4
|
-
Cinch is an IRC Bot Building Framework for quickly creating IRC bots
|
5
|
-
in Ruby with minimal effort.
|
6
|
-
It provides a minimal interface based on plugins and rules. It's as simple as creating a
|
7
|
-
plugin, defining a rule, and watching your profits flourish.
|
8
|
-
|
9
|
-
Cinch will do all of the hard work for you, so you can spend time creating cool plugins
|
10
|
-
and extensions to wow your internet peers.
|
11
|
-
|
12
|
-
If you'd like to test your own Cinch experiments you can do so in the cinch IRC channel
|
13
|
-
on {irc.freenode.org}[irc://irc.freenode.org/cinch]. Support is also welcome here.
|
14
|
-
|
15
|
-
== Installation
|
16
|
-
|
17
|
-
=== RubyGems
|
18
|
-
You can install the latest version of Cinch using RubyGems
|
19
|
-
gem install cinch
|
20
|
-
|
21
|
-
=== GitHub
|
22
|
-
Alternatively you can check out the latest code directly from Github
|
23
|
-
git clone http://github.com/injekt/cinch.git
|
24
|
-
|
25
|
-
== Example
|
26
|
-
Your typical <em>Hello, World</em> application would go something like this:
|
27
|
-
|
28
|
-
require 'cinch'
|
29
|
-
|
30
|
-
bot = Cinch.setup do
|
31
|
-
server "irc.freenode.org"
|
32
|
-
nick "Cinch"
|
33
|
-
end
|
34
|
-
|
35
|
-
bot.plugin "hello" do |m|
|
36
|
-
m.reply "Hello, #{m.nick}!"
|
37
|
-
end
|
38
|
-
|
39
|
-
bot.run
|
40
|
-
|
41
|
-
It doesn't take much to work out what's happening here, but I'll explain it anyway.
|
42
|
-
|
43
|
-
First we run the <em>Cinch::setup</em> block which is required in every application. Cinch is boxed
|
44
|
-
with a load of default values, so the <b>only</b> option required in this block is the server.
|
45
|
-
|
46
|
-
We then define a plugin using the <em>plugin</em> method and pass it a rule (a String in this
|
47
|
-
case). Every plugin must be mapped to a rule. When the rule matches an IRC message its block is
|
48
|
-
invoked, the contents of which contains your plugin interface. The variable passed to the block is
|
49
|
-
an instance of Cinch::IRC::Message.
|
50
|
-
|
51
|
-
Cinch::IRC::Message also supplies us with some helper methods which aid in replying to users and
|
52
|
-
channels.
|
53
|
-
|
54
|
-
=== See Also
|
55
|
-
* Cinch::IRC::Message#reply
|
56
|
-
* Cinch::IRC::Message#answer
|
57
|
-
|
58
|
-
This example would provide the following response on IRC:
|
59
|
-
|
60
|
-
* Cinch has joined #cinch
|
61
|
-
injekt> !hello
|
62
|
-
Cinch> Hello, injekt!
|
63
|
-
|
64
|
-
Since Cinch doesn't provide a binary executable, running your application is as simple as you would any
|
65
|
-
other Ruby script.
|
66
|
-
|
67
|
-
ruby hello.rb
|
68
|
-
|
69
|
-
Cinch also parses the command line for options, to save you having to configure
|
70
|
-
options within your script.
|
71
|
-
|
72
|
-
ruby hello.rb -s irc.freenode.org -n Coolbot
|
73
|
-
ruby hello.rb -C foo,bar
|
74
|
-
|
75
|
-
Doing a <b>ruby hello.rb -h</b> provides all possible command line options.
|
76
|
-
|
77
|
-
When using the <em>-C</em> or <em>--channels</em> option, the channel prefix is
|
78
|
-
optional, and if none is given the channel will be prefixed with a hash (#) character.
|
79
|
-
|
80
|
-
== Plugins
|
81
|
-
Plugins are invoked using the command prefix character (which by default is set to <b>!</b>). You can
|
82
|
-
also tell Cinch to ignore any command prefix and instead use the bots username. This would provide
|
83
|
-
a result similar to this:
|
84
|
-
|
85
|
-
injekt> Cinch: hello
|
86
|
-
Cinch> Hello, injekt!
|
87
|
-
|
88
|
-
Cinch also provides named parameters. This method of expression was inspired by the {Sinatra
|
89
|
-
Web Framework}[http://www.sinatrarb.com/] and although it doesn't quite follow the same pattern,
|
90
|
-
it's useful for naming parameters passed to plugins. These paramaters are available through the
|
91
|
-
Cinch::IRC::Message#args method which is passed to each plugin.
|
92
|
-
|
93
|
-
bot.plugin("say :text") do |m|
|
94
|
-
m.reply m.args[:text]
|
95
|
-
end
|
96
|
-
|
97
|
-
This plugin would provide the following output:
|
98
|
-
|
99
|
-
injekt> !say foo bar baz
|
100
|
-
Cinch> foo bar baz
|
101
|
-
|
102
|
-
Each plugin takes an optional hash of message specific options. These options provide an extension to
|
103
|
-
the rules given, for example if we want to reply only if the nick sending the message is injekt, we
|
104
|
-
could pass the 'nick' option to the hash.
|
105
|
-
|
106
|
-
bot.plugin("join :channel", :nick => 'injekt') do |m|
|
107
|
-
bot.join #{m.args[:channel]}
|
108
|
-
end
|
109
|
-
|
110
|
-
This method also works for arrays, to only reply to a message sent in the foo and bar channels
|
111
|
-
|
112
|
-
bot.plugin :hello, :channel => ['#foo', '#bar'] do |m|
|
113
|
-
m.reply "Hello"
|
114
|
-
end
|
115
|
-
|
116
|
-
You can also set a custom prefix for each individual plugin, this is a great method if you have
|
117
|
-
two commands which do slightly different things. You can seperate the commands depending on which
|
118
|
-
prefix the rule contains.
|
119
|
-
|
120
|
-
bot.plugin "foo", :prefix => '@' do |m|
|
121
|
-
m.reply "Doing foo.."
|
122
|
-
end
|
123
|
-
|
124
|
-
You can also prefix the rule with the bots nickname. Either pass the <b>:bot</b>, <b>:botnick</b> or
|
125
|
-
<b>bot.nick</b> values to the prefix option.
|
126
|
-
|
127
|
-
bot.plugin "foo", :prefix => :bot do |m|
|
128
|
-
m.reply "Doing foo.."
|
129
|
-
end
|
130
|
-
|
131
|
-
Assuming the username is cinch, this will respond to the following:
|
132
|
-
* cinch: foo
|
133
|
-
* cinch, foo
|
134
|
-
|
135
|
-
More examples of this can be found in the /examples directory
|
136
|
-
|
137
|
-
== Named Parameter Patterns
|
138
|
-
Since version 0.2, Cinch supports named parameter patterns. It means stuff like the this works:
|
139
|
-
|
140
|
-
bot.plugin("say :n-digit :text") do |m|
|
141
|
-
m.args[:n].to_i.times do
|
142
|
-
m.reply m.args[:text]
|
143
|
-
end
|
144
|
-
end
|
145
|
-
|
146
|
-
This would provide the following output on IRC
|
147
|
-
|
148
|
-
injekt> !say foo bar
|
149
|
-
injekt> !say 2 foo bar
|
150
|
-
Cinch> foo bar
|
151
|
-
Cinch> foo bar
|
152
|
-
|
153
|
-
* See Cinch::Base#compile for more information and the available patterns
|
154
|
-
|
155
|
-
Cinch also supports custom named parameter patterns. That's right, you can define you own
|
156
|
-
pattern. Just like this:
|
157
|
-
|
158
|
-
bot.add_custom_pattern(:friends, /injekt|lee|john|bob/)
|
159
|
-
|
160
|
-
bot.plugin("I like :friend-friends", :prefix => false) do |m|
|
161
|
-
m.reply "I like #{m.args[:friend]} too!"
|
162
|
-
end
|
163
|
-
|
164
|
-
Which would provide the following output on IRC:
|
165
|
-
|
166
|
-
* Cinch has joined #cinch
|
167
|
-
injekt> I like spongebob
|
168
|
-
injekt> I like bob
|
169
|
-
Cinch> I like bob too!
|
170
|
-
|
171
|
-
Note though that although Cinch adds the capturing parenthesis for you, you must escape it yourself
|
172
|
-
|
173
|
-
== Examples
|
174
|
-
Check out the /examples directory for basic, yet fully functional out-of-the-box bots.
|
175
|
-
If you have any examples you'd like to add, please either fork the repo and push your example
|
176
|
-
before sending me a pull request. Alternatively paste the example and inform me in the IRC
|
177
|
-
channel or by email
|
178
|
-
|
179
|
-
== Authors
|
180
|
-
* {Lee Jarvis}[http://injekt.net]
|
181
|
-
|
182
|
-
== Notes
|
183
|
-
* RDoc API documentation is available {here}[http://rdoc.injekt.net/cinch]
|
184
|
-
* Issue and feature tracking is available {here}[https://github.com/injekt/cinch/issues]
|
185
|
-
* Contribution in the form of bugfixes or feature requests is welcome and encouraged
|
186
|
-
|
187
|
-
== Contribute
|
188
|
-
If you'd like to contribute, fork the GitHub repository, make any changes, and send
|
189
|
-
{injekt}[http://github.com/injekt] a pull request. Collaborator access is available on
|
190
|
-
request once one patch has been submitted. Any contribution is welcome and appreciated
|
191
|
-
|
192
|
-
== TODO
|
193
|
-
* More specs
|
194
|
-
* More documentation
|
195
|
-
|
data/examples/autovoice.rb
DELETED
@@ -1,32 +0,0 @@
|
|
1
|
-
require 'cinch'
|
2
|
-
|
3
|
-
# Give this bot ops in a channel and it'll auto voice
|
4
|
-
# visitors
|
5
|
-
#
|
6
|
-
# Enable with !autovoice on
|
7
|
-
# Disable with !autovoice off
|
8
|
-
|
9
|
-
bot = Cinch.setup do
|
10
|
-
server "irc.freenode.org"
|
11
|
-
channels %w( #cinch )
|
12
|
-
end
|
13
|
-
|
14
|
-
autovoice = true
|
15
|
-
|
16
|
-
bot.on :join do |m|
|
17
|
-
unless m.nick == bot.options.nick # We shouldn't attempt to voice ourselves
|
18
|
-
bot.mode(m.channel, '+v', m.nick) if autovoice
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
bot.add_custom_pattern(:onoff, '(on|off)')
|
23
|
-
|
24
|
-
bot.plugin "autovoice :option-onoff" do |m|
|
25
|
-
case m.args[:option]
|
26
|
-
when 'on'; autovoice = true
|
27
|
-
when 'off'; autovoice = false
|
28
|
-
end
|
29
|
-
m.answer "Autovoice is now #{autovoice ? 'enabled' : 'disabled'}"
|
30
|
-
end
|
31
|
-
|
32
|
-
bot.run
|