ircbot 0.0.2 → 0.1.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.
- data/README +43 -21
- data/Rakefile +9 -6
- data/bin/ircbot +3 -27
- data/lib/ircbot.rb +12 -15
- data/lib/ircbot/client.rb +32 -0
- data/lib/ircbot/client/commands.rb +34 -0
- data/lib/ircbot/client/config.rb +55 -0
- data/lib/ircbot/client/config/channels.rb +40 -0
- data/lib/ircbot/client/config/plugins.rb +16 -0
- data/lib/ircbot/client/encoding.rb +17 -0
- data/lib/ircbot/client/plugins.rb +64 -0
- data/lib/ircbot/core_ext/delegation.rb +135 -0
- data/lib/ircbot/core_ext/extending.rb +80 -0
- data/lib/ircbot/core_ext/message.rb +18 -0
- data/lib/ircbot/framework.rb +22 -40
- data/lib/ircbot/plugin.rb +63 -0
- data/lib/ircbot/plugins.rb +141 -0
- data/lib/ircbot/version.rb +4 -0
- data/plugins/echo.rb +14 -0
- data/plugins/irc.rb +19 -0
- data/plugins/plugins.rb +59 -0
- data/spec/config_spec.rb +83 -0
- data/spec/fixtures/sama-zu.yml +8 -0
- data/spec/framework_spec.rb +18 -0
- data/spec/its_helper.rb +15 -0
- data/spec/plugin_spec.rb +70 -0
- data/spec/plugins_spec.rb +30 -0
- data/spec/provide_helper.rb +36 -0
- data/spec/spec_helper.rb +16 -0
- metadata +40 -19
- data/lib/irc/agent.rb +0 -177
- data/lib/irc/client.rb +0 -476
- data/lib/irc/const.rb +0 -242
- data/lib/irc/irc.rb +0 -324
- data/lib/irc/localize.rb +0 -260
- data/lib/ircbot/agent_manager.rb +0 -89
- data/lib/ircbot/config_client.rb +0 -369
- data/lib/ircbot/core_ext/digest.rb +0 -14
- data/lib/ircbot/core_ext/irc.rb +0 -61
- data/lib/ircbot/core_ext/rand-polimorphism.rb +0 -23
- data/lib/ircbot/core_ext/writefile.rb +0 -45
- data/lib/ircbot/ordered_hash.rb +0 -91
- data/lib/ircbot/reply_client.rb +0 -328
data/plugins/echo.rb
ADDED
data/plugins/irc.rb
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'rubygems'
|
4
|
+
require 'ircbot'
|
5
|
+
|
6
|
+
class IrcPlugin < Ircbot::Plugin
|
7
|
+
def reply(text)
|
8
|
+
if direct?
|
9
|
+
if text[0] == ?!
|
10
|
+
command, params = text[1..-1].strip.split(/\s+/,2)
|
11
|
+
command = Net::IRC::Constants.const_get(command.to_s.upcase)
|
12
|
+
bot.__send__(:post, command, params)
|
13
|
+
throw :halt
|
14
|
+
end
|
15
|
+
end
|
16
|
+
return nil
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
data/plugins/plugins.rb
ADDED
@@ -0,0 +1,59 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'rubygems'
|
4
|
+
require 'ircbot'
|
5
|
+
|
6
|
+
class PluginsPlugin < Ircbot::Plugin
|
7
|
+
def help
|
8
|
+
<<-EOF
|
9
|
+
[control plugins]
|
10
|
+
usage: #{config.nick}.COMMANDS [PLUGIN_NAME]
|
11
|
+
commands: load, start, stop, delete
|
12
|
+
#{plugins_help}
|
13
|
+
EOF
|
14
|
+
end
|
15
|
+
|
16
|
+
def reply(text)
|
17
|
+
text.strip.gsub(/^#{config.nick}\./) {
|
18
|
+
command, arg = $'.split(/\s+/,2)
|
19
|
+
arg = arg.to_s.strip
|
20
|
+
|
21
|
+
case command.to_s
|
22
|
+
when "load", "register"
|
23
|
+
plugins << Array(arg.split)
|
24
|
+
throw :halt, "Loaded #{arg}"
|
25
|
+
|
26
|
+
when "delete", "remove"
|
27
|
+
plugins.remove arg
|
28
|
+
throw :halt, "Removed #{arg}"
|
29
|
+
|
30
|
+
when "start"
|
31
|
+
plugins.start arg
|
32
|
+
throw :halt, "Started #{arg}"
|
33
|
+
|
34
|
+
when "stop"
|
35
|
+
plugins.stop arg
|
36
|
+
throw :halt, "Stopped #{arg}"
|
37
|
+
|
38
|
+
when "help"
|
39
|
+
if arg.empty?
|
40
|
+
throw :halt, [bot_help, plugins_help].join("\n")
|
41
|
+
else
|
42
|
+
throw :halt, plugins[arg].help
|
43
|
+
end
|
44
|
+
end
|
45
|
+
}
|
46
|
+
return nil
|
47
|
+
end
|
48
|
+
|
49
|
+
private
|
50
|
+
def plugins_help
|
51
|
+
"plugins: %s" % plugins.map(&:to_s).join(', ')
|
52
|
+
end
|
53
|
+
|
54
|
+
def bot_help
|
55
|
+
config.help ||
|
56
|
+
"%s bot [%s (ver:%s)]" % [config.nick, Ircbot::HOMEPAGE, Ircbot::VERSION]
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
data/spec/config_spec.rb
ADDED
@@ -0,0 +1,83 @@
|
|
1
|
+
#!/usr/bin/ruby
|
2
|
+
|
3
|
+
require File.join(File.dirname(__FILE__), 'spec_helper.rb')
|
4
|
+
|
5
|
+
describe Ircbot::Client do
|
6
|
+
it "should provide .new" do
|
7
|
+
Ircbot::Client.should respond_to(:new)
|
8
|
+
end
|
9
|
+
|
10
|
+
describe ".new" do
|
11
|
+
it "should accept a hash" do
|
12
|
+
lambda {
|
13
|
+
Ircbot::Client.new({})
|
14
|
+
}.should_not raise_error
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
describe "#config" do
|
19
|
+
before do
|
20
|
+
@config = {
|
21
|
+
:nick => "sama-zu",
|
22
|
+
:user => "samazu",
|
23
|
+
:real => "sama~zu",
|
24
|
+
:host => "localhost",
|
25
|
+
:port => "6667",
|
26
|
+
}
|
27
|
+
end
|
28
|
+
|
29
|
+
subject { Ircbot::Client.new(@config).config }
|
30
|
+
|
31
|
+
its(:nick) { should == "sama-zu" }
|
32
|
+
its(:user) { should == "samazu" }
|
33
|
+
its(:real) { should == "sama~zu" }
|
34
|
+
its(:host) { should == "localhost" }
|
35
|
+
its(:port) { should == "6667" }
|
36
|
+
|
37
|
+
describe "#channels" do
|
38
|
+
it "should return the array when an array is given" do
|
39
|
+
@config[:channels] = ["#ircbot"]
|
40
|
+
subject.channels.should == ["#ircbot"]
|
41
|
+
end
|
42
|
+
|
43
|
+
it "should return array when a string is given" do
|
44
|
+
@config[:channels] = "#ircbot"
|
45
|
+
subject.channels.should == ["#ircbot"]
|
46
|
+
end
|
47
|
+
|
48
|
+
it "should return [] when nil" do
|
49
|
+
@config[:channels] = nil
|
50
|
+
subject.channels.should == []
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
######################################################################
|
56
|
+
### Initialize from file
|
57
|
+
|
58
|
+
it "should provide .from_file" do
|
59
|
+
Ircbot::Client.should respond_to(:from_file)
|
60
|
+
end
|
61
|
+
|
62
|
+
######################################################################
|
63
|
+
### Readers
|
64
|
+
|
65
|
+
describe Ircbot::Client::Config do
|
66
|
+
describe "#read" do
|
67
|
+
it "should delegate to read_yml" do
|
68
|
+
# mock(subject).read_yml(__FILE__)
|
69
|
+
# subject.read(__FILE__)
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
describe "#read_yml" do
|
74
|
+
it do
|
75
|
+
hash = Ircbot::Client::Config.read(path("sama-zu.yml"))
|
76
|
+
hash.should be_a_kind_of(Mash)
|
77
|
+
hash["nick"].should == "sama-zu"
|
78
|
+
hash[:nick].should == "sama-zu"
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
#!/usr/bin/ruby
|
2
|
+
|
3
|
+
require File.join(File.dirname(__FILE__), 'spec_helper.rb')
|
4
|
+
|
5
|
+
describe Ircbot do
|
6
|
+
provide :root
|
7
|
+
provide :root=
|
8
|
+
provide :push_path
|
9
|
+
provide :glob_for
|
10
|
+
|
11
|
+
describe ".glob_for" do
|
12
|
+
it do
|
13
|
+
dir = Pathname(File.dirname(__FILE__))
|
14
|
+
Ircbot.push_path(:spec, dir)
|
15
|
+
Ircbot.glob_for(:spec, "sama-zu").should == [dir + "fixtures" + "sama-zu.yml"]
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
data/spec/its_helper.rb
ADDED
data/spec/plugin_spec.rb
ADDED
@@ -0,0 +1,70 @@
|
|
1
|
+
#!/usr/bin/ruby
|
2
|
+
|
3
|
+
require File.join(File.dirname(__FILE__), 'spec_helper.rb')
|
4
|
+
|
5
|
+
describe Ircbot::Plugin do
|
6
|
+
class Foo < Ircbot::Plugin; end
|
7
|
+
class Bar < Ircbot::Plugin; end
|
8
|
+
class BarPlugin < Ircbot::Plugin; end
|
9
|
+
|
10
|
+
subject { Ircbot::Plugin.new }
|
11
|
+
|
12
|
+
######################################################################
|
13
|
+
### plugin name
|
14
|
+
|
15
|
+
provide :plugin_name
|
16
|
+
|
17
|
+
its(:plugin_name) { should == 'plugin' }
|
18
|
+
describe "#plugin_name" do
|
19
|
+
it { Foo.new.plugin_name.should == "foo" }
|
20
|
+
it { Bar.new.plugin_name.should == "bar" }
|
21
|
+
it { BarPlugin.new.plugin_name.should == "bar" }
|
22
|
+
end
|
23
|
+
|
24
|
+
provide :message
|
25
|
+
its(:message) { should be_kind_of(Ircbot::Plugin::InitialMessage) }
|
26
|
+
|
27
|
+
provide :plugins
|
28
|
+
provide :running
|
29
|
+
provide :config
|
30
|
+
provide :client
|
31
|
+
provide :bot
|
32
|
+
|
33
|
+
######################################################################
|
34
|
+
### private methods
|
35
|
+
|
36
|
+
provide :plugin
|
37
|
+
provide :plugin!
|
38
|
+
provide :direct?
|
39
|
+
|
40
|
+
######################################################################
|
41
|
+
### Not connected
|
42
|
+
|
43
|
+
context "(not connected)" do
|
44
|
+
subject{ Ircbot::Plugin.new }
|
45
|
+
|
46
|
+
its(:plugin , :foo) { should be_kind_of(Ircbot::Plugin::Null) }
|
47
|
+
its(:plugin!, :foo) { lambda {subject}.should raise_error(Ircbot::PluginNotFound) }
|
48
|
+
its(:direct? ) { should == false }
|
49
|
+
end
|
50
|
+
|
51
|
+
######################################################################
|
52
|
+
### Connected
|
53
|
+
|
54
|
+
describe "(connected)" do
|
55
|
+
before do
|
56
|
+
@client = Ircbot::Client.new({})
|
57
|
+
@plugins = Ircbot::Plugins.new(@client)
|
58
|
+
@foo = Foo.new
|
59
|
+
@bar = Bar.new
|
60
|
+
@plugins << @foo << @bar
|
61
|
+
end
|
62
|
+
subject{ Ircbot::Plugin.new(@plugins) }
|
63
|
+
|
64
|
+
its(:plugin , :foo) { should == @foo }
|
65
|
+
its(:plugin!, :foo) { should == @foo }
|
66
|
+
its(:direct? ) { should == false }
|
67
|
+
end
|
68
|
+
|
69
|
+
end
|
70
|
+
|
@@ -0,0 +1,30 @@
|
|
1
|
+
#!/usr/bin/ruby
|
2
|
+
|
3
|
+
require File.join(File.dirname(__FILE__), 'spec_helper.rb')
|
4
|
+
|
5
|
+
describe Ircbot::Plugins do
|
6
|
+
|
7
|
+
######################################################################
|
8
|
+
### accessor methods
|
9
|
+
|
10
|
+
provide :client
|
11
|
+
provide :plugins
|
12
|
+
provide :active
|
13
|
+
provide :load_plugins
|
14
|
+
provide :load_plugin
|
15
|
+
provide :[]
|
16
|
+
provide :<<
|
17
|
+
provide :bot
|
18
|
+
provide :start
|
19
|
+
provide :stop
|
20
|
+
provide :delete
|
21
|
+
|
22
|
+
######################################################################
|
23
|
+
### Enumerable
|
24
|
+
|
25
|
+
provide :each
|
26
|
+
it "should be enumerable" do
|
27
|
+
subject.class.ancestors.should include(Enumerable)
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
######################################################################
|
2
|
+
### provide matcher
|
3
|
+
Spec::Matchers.define :provide do |expected|
|
4
|
+
match do |obj|
|
5
|
+
(obj.public_methods + obj.protected_methods + obj.private_methods).include?(expected.to_s)
|
6
|
+
end
|
7
|
+
end
|
8
|
+
|
9
|
+
module Spec
|
10
|
+
module Example
|
11
|
+
module Subject
|
12
|
+
module ExampleGroupMethods
|
13
|
+
# == Examples
|
14
|
+
#
|
15
|
+
# describe User do
|
16
|
+
# subject { User.new }
|
17
|
+
# provide :name
|
18
|
+
#
|
19
|
+
# [intead of]
|
20
|
+
#
|
21
|
+
# it "should provide #name" do
|
22
|
+
# methods = subject.public_methods + subject.protected_methods + subject.private_methods
|
23
|
+
# methods.should include("name")
|
24
|
+
# end
|
25
|
+
# end
|
26
|
+
#
|
27
|
+
def provide(name)
|
28
|
+
it "should provide ##{name}" do
|
29
|
+
subject.should provide(name)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
|
2
|
+
require 'spec'
|
3
|
+
require 'rr'
|
4
|
+
|
5
|
+
require File.join(File.dirname(__FILE__), '/../lib/ircbot')
|
6
|
+
require File.join(File.dirname(__FILE__), '/its_helper')
|
7
|
+
require File.join(File.dirname(__FILE__), '/provide_helper')
|
8
|
+
|
9
|
+
|
10
|
+
def path(key)
|
11
|
+
Pathname(File.join(File.dirname(__FILE__) + "/fixtures/#{key}"))
|
12
|
+
end
|
13
|
+
|
14
|
+
def data(key)
|
15
|
+
path(key).read{}
|
16
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ircbot
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- maiha
|
@@ -9,20 +9,30 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2010-01-
|
12
|
+
date: 2010-01-09 00:00:00 +09:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
|
-
name:
|
16
|
+
name: extlib
|
17
17
|
type: :runtime
|
18
18
|
version_requirement:
|
19
19
|
version_requirements: !ruby/object:Gem::Requirement
|
20
20
|
requirements:
|
21
21
|
- - ">="
|
22
22
|
- !ruby/object:Gem::Version
|
23
|
-
version:
|
23
|
+
version: 0.9.14
|
24
24
|
version:
|
25
|
-
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: net-irc
|
27
|
+
type: :runtime
|
28
|
+
version_requirement:
|
29
|
+
version_requirements: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 0.0.9
|
34
|
+
version:
|
35
|
+
description: An irc bot framework that offers easy-to-use by plugins
|
26
36
|
email: maiha@wota.jp
|
27
37
|
executables:
|
28
38
|
- ircbot
|
@@ -35,21 +45,32 @@ files:
|
|
35
45
|
- MIT-LICENSE
|
36
46
|
- README
|
37
47
|
- Rakefile
|
38
|
-
- lib/irc/agent.rb
|
39
|
-
- lib/irc/const.rb
|
40
|
-
- lib/irc/client.rb
|
41
|
-
- lib/irc/localize.rb
|
42
|
-
- lib/irc/irc.rb
|
43
48
|
- lib/ircbot/framework.rb
|
44
|
-
- lib/ircbot/
|
45
|
-
- lib/ircbot/
|
46
|
-
- lib/ircbot/
|
47
|
-
- lib/ircbot/
|
48
|
-
- lib/ircbot/
|
49
|
-
- lib/ircbot/
|
50
|
-
- lib/ircbot/
|
51
|
-
- lib/ircbot/
|
49
|
+
- lib/ircbot/client.rb
|
50
|
+
- lib/ircbot/client/config.rb
|
51
|
+
- lib/ircbot/client/config/channels.rb
|
52
|
+
- lib/ircbot/client/config/plugins.rb
|
53
|
+
- lib/ircbot/client/encoding.rb
|
54
|
+
- lib/ircbot/client/commands.rb
|
55
|
+
- lib/ircbot/client/plugins.rb
|
56
|
+
- lib/ircbot/core_ext/extending.rb
|
57
|
+
- lib/ircbot/core_ext/message.rb
|
58
|
+
- lib/ircbot/core_ext/delegation.rb
|
59
|
+
- lib/ircbot/plugins.rb
|
60
|
+
- lib/ircbot/version.rb
|
61
|
+
- lib/ircbot/plugin.rb
|
52
62
|
- lib/ircbot.rb
|
63
|
+
- spec/config_spec.rb
|
64
|
+
- spec/plugin_spec.rb
|
65
|
+
- spec/provide_helper.rb
|
66
|
+
- spec/fixtures/sama-zu.yml
|
67
|
+
- spec/its_helper.rb
|
68
|
+
- spec/spec_helper.rb
|
69
|
+
- spec/framework_spec.rb
|
70
|
+
- spec/plugins_spec.rb
|
71
|
+
- plugins/echo.rb
|
72
|
+
- plugins/plugins.rb
|
73
|
+
- plugins/irc.rb
|
53
74
|
has_rdoc: true
|
54
75
|
homepage: http://github.com/maiha/ircbot
|
55
76
|
licenses: []
|
@@ -77,6 +98,6 @@ rubyforge_project: asakusarb
|
|
77
98
|
rubygems_version: 1.3.5
|
78
99
|
signing_key:
|
79
100
|
specification_version: 3
|
80
|
-
summary:
|
101
|
+
summary: easy irc bot framework
|
81
102
|
test_files: []
|
82
103
|
|