mitten 0.0.3 → 0.0.4
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.rdoc +3 -30
- data/Rakefile +4 -0
- data/VERSION +1 -1
- data/configs/time_call.yaml +0 -1
- data/configs/twitter_bot.yaml +3 -0
- data/lib/mitten.rb +17 -6
- data/lib/plugin.rb +26 -13
- data/mitten.gemspec +19 -4
- data/plugins/{sun_sign_astrology.rb → holoscope.rb} +1 -1
- data/plugins/loo_holoscope.rb +51 -0
- data/plugins/twitter_bot.rb +32 -0
- metadata +80 -10
data/README.rdoc
CHANGED
@@ -5,38 +5,13 @@
|
|
5
5
|
Mitten is A Ruby IRC Bot Pluggable Framework.
|
6
6
|
|
7
7
|
|
8
|
-
== Require
|
9
|
-
|
10
|
-
=== RubyGems
|
11
|
-
|
12
|
-
1. gemcutter
|
13
|
-
|
14
|
-
$ sudo gem install gemcutter
|
15
|
-
|
16
|
-
2. rake
|
17
|
-
|
18
|
-
$ sudo gem install rake
|
19
|
-
|
20
|
-
3. rspec
|
21
|
-
|
22
|
-
$ sudo gem install rspec
|
23
|
-
|
24
|
-
4. net-irc
|
25
|
-
|
26
|
-
$ sudo gem install net-irc
|
27
|
-
|
28
|
-
5. daemons
|
29
|
-
|
30
|
-
$ sudo gem install daemons
|
31
|
-
|
32
|
-
|
33
8
|
== Installation
|
34
9
|
|
35
|
-
|
10
|
+
- RubyGems
|
36
11
|
|
37
12
|
$ sudo gem install mitten
|
38
13
|
|
39
|
-
|
14
|
+
- GitHub
|
40
15
|
|
41
16
|
$ git clone http://github.com/Tomohiro/mitten.git
|
42
17
|
|
@@ -103,6 +78,4 @@ Copyright (c) 2010 Tomohiro, TAIRA.
|
|
103
78
|
|
104
79
|
== Licence
|
105
80
|
|
106
|
-
The MIT License
|
107
|
-
|
108
|
-
See LICENSE for details.
|
81
|
+
The MIT License. See LICENSE for details.
|
data/Rakefile
CHANGED
@@ -10,7 +10,11 @@ begin
|
|
10
10
|
gem.email = 'tomohiro.t@gmail.com'
|
11
11
|
gem.homepage = 'http://github.com/Tomohiro/mitten'
|
12
12
|
gem.authors = ['Tomohiro, TAIRA']
|
13
|
+
gem.add_dependency 'net-irc', '>= 0.0.9'
|
14
|
+
gem.add_dependency 'daemons', '>= 1.0.10'
|
15
|
+
gem.add_dependency 'json_pure', '>= 1.2.0'
|
13
16
|
gem.add_development_dependency 'rspec', '>= 1.2.9'
|
17
|
+
gem.add_development_dependency 'rake', '>= 0.8.7'
|
14
18
|
# gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
|
15
19
|
end
|
16
20
|
Jeweler::GemcutterTasks.new
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.4
|
data/configs/time_call.yaml
CHANGED
data/lib/mitten.rb
CHANGED
@@ -73,24 +73,24 @@ module Mitten
|
|
73
73
|
|
74
74
|
def run_plugins
|
75
75
|
threads = []
|
76
|
-
|
76
|
+
load_plugins(@server['plugin_dir'], @config.plugins)
|
77
77
|
|
78
78
|
threads.push(
|
79
79
|
Thread.fork do
|
80
80
|
while line = @socket.gets
|
81
81
|
message = Message.parse(line)
|
82
82
|
if message.command.upcase == 'PRIVMSG'
|
83
|
-
@
|
84
|
-
plugin.
|
83
|
+
@response_plugins.each do |plugin|
|
84
|
+
plugin.response(message.prefix, message[0], message[1])
|
85
85
|
end
|
86
86
|
end
|
87
87
|
end
|
88
88
|
end
|
89
89
|
)
|
90
90
|
|
91
|
-
@
|
91
|
+
@notify_plugins.each do |plugin|
|
92
92
|
plugin.before_hook
|
93
|
-
threads.push(Thread.fork
|
93
|
+
threads.push(Thread.fork { plugin.notify })
|
94
94
|
end
|
95
95
|
|
96
96
|
threads.each { |t| t.join }
|
@@ -118,16 +118,27 @@ module Mitten
|
|
118
118
|
end
|
119
119
|
|
120
120
|
plugins = instantiation(class_tables)
|
121
|
+
instance_categorize(plugins)
|
121
122
|
end
|
122
123
|
|
123
124
|
def instantiation(class_tables)
|
124
125
|
plugins = []
|
125
126
|
class_tables.each do |name, plugin|
|
126
|
-
plugins << plugin[:class].new(plugin[:configs], @socket)
|
127
|
+
plugins << plugin[:class].new(plugin[:configs], @opts, @socket)
|
127
128
|
puts "Plugin: #{name} is loaded"
|
128
129
|
end
|
129
130
|
|
130
131
|
plugins
|
131
132
|
end
|
133
|
+
|
134
|
+
def instance_categorize(plugins)
|
135
|
+
@response_plugins = []
|
136
|
+
@notify_plugins = []
|
137
|
+
|
138
|
+
plugins.each do |plugin|
|
139
|
+
@response_plugins << plugin if plugin.respond_to? 'on_privmsg'
|
140
|
+
@notify_plugins << plugin if plugin.respond_to? 'main'
|
141
|
+
end
|
142
|
+
end
|
132
143
|
end
|
133
144
|
end
|
data/lib/plugin.rb
CHANGED
@@ -4,33 +4,46 @@ require 'net/irc'
|
|
4
4
|
module Mitten
|
5
5
|
DEFAULT_SLEEP = 360
|
6
6
|
|
7
|
-
class Plugin
|
8
|
-
|
7
|
+
class Plugin
|
8
|
+
include Net::IRC
|
9
|
+
include Constants
|
10
|
+
|
11
|
+
def initialize(config, server, socket)
|
9
12
|
@config = config || {}
|
13
|
+
@server = server
|
10
14
|
@socket = socket
|
11
|
-
@channels = @config['channels'] || @config['channel']
|
15
|
+
@channels = @config['channels'] || @config['channel'] || @server.channel
|
12
16
|
@sleep = @config['sleep'] || DEFAULT_SLEEP
|
13
17
|
end
|
14
18
|
|
15
|
-
def post(command, *
|
16
|
-
@socket << Message.new(nil, command,
|
19
|
+
def post(command, *args)
|
20
|
+
@socket << Message.new(nil, command, args.map { |s| s.gsub(/\r|\n/, " ") })
|
17
21
|
end
|
18
22
|
|
19
|
-
def notice(*
|
20
|
-
post(NOTICE, *
|
23
|
+
def notice(*args)
|
24
|
+
post(NOTICE, *args)
|
21
25
|
end
|
22
26
|
|
23
|
-
def message(*
|
24
|
-
post(PRIVMSG, *
|
27
|
+
def message(*args)
|
28
|
+
post(PRIVMSG, *args)
|
25
29
|
end
|
26
30
|
|
27
|
-
def
|
31
|
+
def response(*args)
|
32
|
+
begin
|
33
|
+
on_privmsg(*args)
|
34
|
+
rescue Exception => e
|
35
|
+
post(NOTICE, @server.channel, "#{e.class} #{e.to_s}") if @server.channel
|
36
|
+
end
|
28
37
|
end
|
29
38
|
|
30
39
|
def notify
|
31
|
-
|
32
|
-
|
33
|
-
|
40
|
+
begin
|
41
|
+
loop do
|
42
|
+
main
|
43
|
+
sleep @sleep
|
44
|
+
end
|
45
|
+
rescue Exception => e
|
46
|
+
post(NOTICE, @server.channel, "#{e.class} #{e.to_s}") if @server.channel
|
34
47
|
end
|
35
48
|
end
|
36
49
|
end
|
data/mitten.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{mitten}
|
8
|
-
s.version = "0.0.
|
8
|
+
s.version = "0.0.4"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Tomohiro, TAIRA"]
|
12
|
-
s.date = %q{2010-02-
|
12
|
+
s.date = %q{2010-02-25}
|
13
13
|
s.description = %q{Mitten is A Ruby IRC Bot Pluggable Framework}
|
14
14
|
s.email = %q{tomohiro.t@gmail.com}
|
15
15
|
s.executables = ["daemon", "server"]
|
@@ -28,6 +28,7 @@ Gem::Specification.new do |s|
|
|
28
28
|
"bin/server",
|
29
29
|
"configs/example_environment.yaml",
|
30
30
|
"configs/time_call.yaml",
|
31
|
+
"configs/twitter_bot.yaml",
|
31
32
|
"example/sample.rb",
|
32
33
|
"lib/mitten.rb",
|
33
34
|
"lib/plugin.rb",
|
@@ -42,6 +43,8 @@ Gem::Specification.new do |s|
|
|
42
43
|
"plugins/google_profile.rb",
|
43
44
|
"plugins/google_transit.rb",
|
44
45
|
"plugins/google_weather.rb",
|
46
|
+
"plugins/holoscope.rb",
|
47
|
+
"plugins/loo_holoscope.rb",
|
45
48
|
"plugins/mixi_voice.rb",
|
46
49
|
"plugins/nanapi.rb",
|
47
50
|
"plugins/newspaper_headlines.rb",
|
@@ -49,9 +52,9 @@ Gem::Specification.new do |s|
|
|
49
52
|
"plugins/ramen.rb",
|
50
53
|
"plugins/rate.rb",
|
51
54
|
"plugins/screen_time_search.rb",
|
52
|
-
"plugins/sun_sign_astrology.rb",
|
53
55
|
"plugins/time_call.rb",
|
54
56
|
"plugins/tweet.rb",
|
57
|
+
"plugins/twitter_bot.rb",
|
55
58
|
"plugins/typhoon.rb",
|
56
59
|
"plugins/uri_shorten.rb",
|
57
60
|
"spec/mitten_spec.rb",
|
@@ -61,7 +64,7 @@ Gem::Specification.new do |s|
|
|
61
64
|
s.homepage = %q{http://github.com/Tomohiro/mitten}
|
62
65
|
s.rdoc_options = ["--charset=UTF-8"]
|
63
66
|
s.require_paths = ["lib"]
|
64
|
-
s.rubygems_version = %q{1.3.
|
67
|
+
s.rubygems_version = %q{1.3.6}
|
65
68
|
s.summary = %q{IRC Bot Framework}
|
66
69
|
s.test_files = [
|
67
70
|
"spec/spec_helper.rb",
|
@@ -73,12 +76,24 @@ Gem::Specification.new do |s|
|
|
73
76
|
s.specification_version = 3
|
74
77
|
|
75
78
|
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
79
|
+
s.add_runtime_dependency(%q<net-irc>, [">= 0.0.9"])
|
80
|
+
s.add_runtime_dependency(%q<daemons>, [">= 1.0.10"])
|
81
|
+
s.add_runtime_dependency(%q<json_pure>, [">= 1.2.0"])
|
76
82
|
s.add_development_dependency(%q<rspec>, [">= 1.2.9"])
|
83
|
+
s.add_development_dependency(%q<rake>, [">= 0.8.7"])
|
77
84
|
else
|
85
|
+
s.add_dependency(%q<net-irc>, [">= 0.0.9"])
|
86
|
+
s.add_dependency(%q<daemons>, [">= 1.0.10"])
|
87
|
+
s.add_dependency(%q<json_pure>, [">= 1.2.0"])
|
78
88
|
s.add_dependency(%q<rspec>, [">= 1.2.9"])
|
89
|
+
s.add_dependency(%q<rake>, [">= 0.8.7"])
|
79
90
|
end
|
80
91
|
else
|
92
|
+
s.add_dependency(%q<net-irc>, [">= 0.0.9"])
|
93
|
+
s.add_dependency(%q<daemons>, [">= 1.0.10"])
|
94
|
+
s.add_dependency(%q<json_pure>, [">= 1.2.0"])
|
81
95
|
s.add_dependency(%q<rspec>, [">= 1.2.9"])
|
96
|
+
s.add_dependency(%q<rake>, [">= 0.8.7"])
|
82
97
|
end
|
83
98
|
end
|
84
99
|
|
@@ -0,0 +1,51 @@
|
|
1
|
+
require 'nkf'
|
2
|
+
|
3
|
+
require 'open-uri'
|
4
|
+
require 'nokogiri'
|
5
|
+
|
6
|
+
class LooHoloscope < Mitten::Plugin
|
7
|
+
def initialize(*args)
|
8
|
+
super
|
9
|
+
|
10
|
+
@suffix = @config['suffix'] || 'の運勢教えて'
|
11
|
+
@signs = {
|
12
|
+
'おひつじ座' => 'http://lou5.jp/uranai/aries/',
|
13
|
+
'おうし座' => 'http://lou5.jp/uranai/taurus/',
|
14
|
+
'ふたご座' => 'http://lou5.jp/uranai/gemini/',
|
15
|
+
'かに座' => 'http://lou5.jp/uranai/cancer/',
|
16
|
+
'しし座' => 'http://lou5.jp/uranai/leo/',
|
17
|
+
'おとめ座' => 'http://lou5.jp/uranai/virgo/',
|
18
|
+
'てんびん座' => 'http://lou5.jp/uranai/libra/',
|
19
|
+
'さそり座' => 'http://lou5.jp/uranai/scorpio/',
|
20
|
+
'いて座' => 'http://lou5.jp/uranai/sagittarius/',
|
21
|
+
'やぎ座' => 'http://lou5.jp/uranai/capricorn/',
|
22
|
+
'みずがめ座' => 'http://lou5.jp/uranai/aquarius/',
|
23
|
+
'うお座' => 'http://lou5.jp/uranai/pisces/',
|
24
|
+
}
|
25
|
+
end
|
26
|
+
|
27
|
+
def on_privmsg(prefix, channel, message)
|
28
|
+
case message
|
29
|
+
when /^(.+)#{@suffix}$/
|
30
|
+
result = get_result(@signs[$1])
|
31
|
+
|
32
|
+
if result == nil
|
33
|
+
notice(channel, '/(^o^)\ わかにゃいっ')
|
34
|
+
else
|
35
|
+
notice(channel, result)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
private
|
41
|
+
|
42
|
+
def get_result(uri)
|
43
|
+
begin
|
44
|
+
doc = Nokogiri::HTML(open(uri).read)
|
45
|
+
|
46
|
+
loo = (doc/'div.box-inner/p').first.text.gsub("\n", '') + ' ってルーさんが言ってたよ♪'
|
47
|
+
rescue Exception => e
|
48
|
+
e.to_s
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'ostruct'
|
2
|
+
require 'yaml'
|
3
|
+
require 'open-uri'
|
4
|
+
require 'nokogiri'
|
5
|
+
|
6
|
+
class TwitterBot < Mitten::Plugin
|
7
|
+
def initialize(*args)
|
8
|
+
super
|
9
|
+
|
10
|
+
@config_file = @config['config']
|
11
|
+
@bot_list = load_config
|
12
|
+
end
|
13
|
+
|
14
|
+
def load_config
|
15
|
+
OpenStruct.new(File.open(@config_file) { |f| YAML.load(f) }).bot_list
|
16
|
+
end
|
17
|
+
|
18
|
+
def on_privmsg(prefix, channel, message)
|
19
|
+
@bot_list.each_key do |key|
|
20
|
+
notice(channel, get_tweet(@bot_list[key])) if message =~ Regexp.new(/#{key}(|?|\?)/)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def get_tweet(bot)
|
25
|
+
html = Nokogiri::HTML(open("http://twitter.com/#{bot}").read)
|
26
|
+
|
27
|
+
tweet = (html/'.entry-content').first
|
28
|
+
if !tweet.nil?
|
29
|
+
tweet = tweet.text
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,12 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mitten
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 0
|
7
|
+
- 0
|
8
|
+
- 4
|
9
|
+
version: 0.0.4
|
5
10
|
platform: ruby
|
6
11
|
authors:
|
7
12
|
- Tomohiro, TAIRA
|
@@ -9,19 +14,79 @@ autorequire:
|
|
9
14
|
bindir: bin
|
10
15
|
cert_chain: []
|
11
16
|
|
12
|
-
date: 2010-02-
|
17
|
+
date: 2010-02-25 00:00:00 +09:00
|
13
18
|
default_executable:
|
14
19
|
dependencies:
|
20
|
+
- !ruby/object:Gem::Dependency
|
21
|
+
name: net-irc
|
22
|
+
prerelease: false
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
24
|
+
requirements:
|
25
|
+
- - ">="
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
segments:
|
28
|
+
- 0
|
29
|
+
- 0
|
30
|
+
- 9
|
31
|
+
version: 0.0.9
|
32
|
+
type: :runtime
|
33
|
+
version_requirements: *id001
|
34
|
+
- !ruby/object:Gem::Dependency
|
35
|
+
name: daemons
|
36
|
+
prerelease: false
|
37
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
38
|
+
requirements:
|
39
|
+
- - ">="
|
40
|
+
- !ruby/object:Gem::Version
|
41
|
+
segments:
|
42
|
+
- 1
|
43
|
+
- 0
|
44
|
+
- 10
|
45
|
+
version: 1.0.10
|
46
|
+
type: :runtime
|
47
|
+
version_requirements: *id002
|
48
|
+
- !ruby/object:Gem::Dependency
|
49
|
+
name: json_pure
|
50
|
+
prerelease: false
|
51
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
52
|
+
requirements:
|
53
|
+
- - ">="
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
segments:
|
56
|
+
- 1
|
57
|
+
- 2
|
58
|
+
- 0
|
59
|
+
version: 1.2.0
|
60
|
+
type: :runtime
|
61
|
+
version_requirements: *id003
|
15
62
|
- !ruby/object:Gem::Dependency
|
16
63
|
name: rspec
|
17
|
-
|
18
|
-
|
19
|
-
version_requirements: !ruby/object:Gem::Requirement
|
64
|
+
prerelease: false
|
65
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
20
66
|
requirements:
|
21
67
|
- - ">="
|
22
68
|
- !ruby/object:Gem::Version
|
69
|
+
segments:
|
70
|
+
- 1
|
71
|
+
- 2
|
72
|
+
- 9
|
23
73
|
version: 1.2.9
|
24
|
-
|
74
|
+
type: :development
|
75
|
+
version_requirements: *id004
|
76
|
+
- !ruby/object:Gem::Dependency
|
77
|
+
name: rake
|
78
|
+
prerelease: false
|
79
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
80
|
+
requirements:
|
81
|
+
- - ">="
|
82
|
+
- !ruby/object:Gem::Version
|
83
|
+
segments:
|
84
|
+
- 0
|
85
|
+
- 8
|
86
|
+
- 7
|
87
|
+
version: 0.8.7
|
88
|
+
type: :development
|
89
|
+
version_requirements: *id005
|
25
90
|
description: Mitten is A Ruby IRC Bot Pluggable Framework
|
26
91
|
email: tomohiro.t@gmail.com
|
27
92
|
executables:
|
@@ -43,6 +108,7 @@ files:
|
|
43
108
|
- bin/server
|
44
109
|
- configs/example_environment.yaml
|
45
110
|
- configs/time_call.yaml
|
111
|
+
- configs/twitter_bot.yaml
|
46
112
|
- example/sample.rb
|
47
113
|
- lib/mitten.rb
|
48
114
|
- lib/plugin.rb
|
@@ -57,6 +123,8 @@ files:
|
|
57
123
|
- plugins/google_profile.rb
|
58
124
|
- plugins/google_transit.rb
|
59
125
|
- plugins/google_weather.rb
|
126
|
+
- plugins/holoscope.rb
|
127
|
+
- plugins/loo_holoscope.rb
|
60
128
|
- plugins/mixi_voice.rb
|
61
129
|
- plugins/nanapi.rb
|
62
130
|
- plugins/newspaper_headlines.rb
|
@@ -64,9 +132,9 @@ files:
|
|
64
132
|
- plugins/ramen.rb
|
65
133
|
- plugins/rate.rb
|
66
134
|
- plugins/screen_time_search.rb
|
67
|
-
- plugins/sun_sign_astrology.rb
|
68
135
|
- plugins/time_call.rb
|
69
136
|
- plugins/tweet.rb
|
137
|
+
- plugins/twitter_bot.rb
|
70
138
|
- plugins/typhoon.rb
|
71
139
|
- plugins/uri_shorten.rb
|
72
140
|
- spec/mitten_spec.rb
|
@@ -85,18 +153,20 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
85
153
|
requirements:
|
86
154
|
- - ">="
|
87
155
|
- !ruby/object:Gem::Version
|
156
|
+
segments:
|
157
|
+
- 0
|
88
158
|
version: "0"
|
89
|
-
version:
|
90
159
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
91
160
|
requirements:
|
92
161
|
- - ">="
|
93
162
|
- !ruby/object:Gem::Version
|
163
|
+
segments:
|
164
|
+
- 0
|
94
165
|
version: "0"
|
95
|
-
version:
|
96
166
|
requirements: []
|
97
167
|
|
98
168
|
rubyforge_project:
|
99
|
-
rubygems_version: 1.3.
|
169
|
+
rubygems_version: 1.3.6
|
100
170
|
signing_key:
|
101
171
|
specification_version: 3
|
102
172
|
summary: IRC Bot Framework
|