ceiling_cat 0.1.3 → 0.1.4
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/ceiling_cat/connection.rb +5 -5
- data/lib/ceiling_cat/errors.rb +5 -10
- data/lib/ceiling_cat/event.rb +4 -5
- data/lib/ceiling_cat/plugins/about.rb +2 -2
- data/lib/ceiling_cat/plugins/base.rb +6 -5
- data/lib/ceiling_cat/plugins/calc.rb +5 -5
- data/lib/ceiling_cat/plugins/call_and_response.rb +1 -3
- data/lib/ceiling_cat/plugins/campfire_account_monitor.rb +1 -2
- data/lib/ceiling_cat/plugins/days.rb +9 -9
- data/lib/ceiling_cat/plugins/greeter.rb +2 -2
- data/lib/ceiling_cat/plugins/messages.rb +76 -0
- data/lib/ceiling_cat/plugins/notifo.rb +23 -11
- data/lib/ceiling_cat/plugins/twss.rb +29 -0
- data/lib/ceiling_cat/services/campfire/connection.rb +1 -1
- data/lib/ceiling_cat/services/campfire/event.rb +2 -2
- data/lib/ceiling_cat/services/irc/event.rb +2 -2
- data/lib/ceiling_cat/services/irc/room.rb +6 -6
- data/lib/ceiling_cat/setup.rb +6 -6
- data/lib/ceiling_cat/storage/yaml.rb +1 -1
- data/lib/ceiling_cat/user.rb +2 -2
- data/lib/ceiling_cat/version.rb +1 -1
- data/setup/Chatfile +2 -2
- metadata +44 -26
@@ -1,19 +1,19 @@
|
|
1
1
|
module CeilingCat
|
2
2
|
class Connection
|
3
3
|
attr_accessor :config
|
4
|
-
|
4
|
+
|
5
5
|
def initialize(config)
|
6
|
-
@config=config
|
6
|
+
@config = config
|
7
7
|
@config.storage ||= CeilingCat::Storage::Hash
|
8
8
|
end
|
9
|
-
|
9
|
+
|
10
10
|
def plugins
|
11
11
|
self.config.plugins
|
12
12
|
end
|
13
|
-
|
13
|
+
|
14
14
|
def storage
|
15
15
|
self.config.storage
|
16
16
|
end
|
17
|
-
|
17
|
+
|
18
18
|
end
|
19
19
|
end
|
data/lib/ceiling_cat/errors.rb
CHANGED
@@ -1,17 +1,12 @@
|
|
1
1
|
module CeilingCat
|
2
|
-
class Error < StandardError
|
2
|
+
class Error < StandardError; end
|
3
3
|
|
4
|
-
def initialize(message)
|
5
|
-
super message
|
6
|
-
end
|
7
|
-
end
|
8
|
-
|
9
4
|
# Gem Specific Errors
|
10
|
-
class CeilingCatError <
|
11
|
-
|
5
|
+
class CeilingCatError < CeilingCat::Error; end
|
6
|
+
|
12
7
|
class UnsupportedChatServiceError < CeilingCatError; end
|
13
|
-
|
8
|
+
|
14
9
|
class NotImplementedError < CeilingCatError; end
|
15
|
-
|
10
|
+
|
16
11
|
class ReloadException < CeilingCatError; end
|
17
12
|
end
|
data/lib/ceiling_cat/event.rb
CHANGED
@@ -2,17 +2,16 @@ module CeilingCat
|
|
2
2
|
class Event
|
3
3
|
attr_accessor :room, :body, :user, :type, :time
|
4
4
|
|
5
|
-
def initialize(room, body,user,opts={})
|
5
|
+
def initialize(room, body, user, opts={})
|
6
6
|
@room = room
|
7
7
|
@body = body.to_s.strip
|
8
8
|
@user = user
|
9
9
|
@type = opts[:type]
|
10
10
|
@time = opts[:time] || Time.now
|
11
11
|
end
|
12
|
-
|
13
|
-
def handle
|
12
|
+
|
13
|
+
def handle
|
14
14
|
@room.plugins.each do |plugin|
|
15
|
-
puts "running #{plugin}"
|
16
15
|
begin
|
17
16
|
response = plugin.new(self).handle
|
18
17
|
break if response.present?
|
@@ -21,7 +20,7 @@ module CeilingCat
|
|
21
20
|
end
|
22
21
|
end
|
23
22
|
end
|
24
|
-
|
23
|
+
|
25
24
|
def type # assume that all messages are just text unless the specific room type overrides it.
|
26
25
|
@type || :chat
|
27
26
|
end
|
@@ -29,7 +29,7 @@ module CeilingCat
|
|
29
29
|
messages << "Run commands with '![command]' or '#{room.me.name}: [command]'"
|
30
30
|
reply messages
|
31
31
|
end
|
32
|
-
|
32
|
+
|
33
33
|
def list_users
|
34
34
|
members = room.users_in_room(:type => "member")
|
35
35
|
if members.size > 0
|
@@ -38,7 +38,7 @@ module CeilingCat
|
|
38
38
|
reply "There are no registered users in the room at this time."
|
39
39
|
end
|
40
40
|
end
|
41
|
-
|
41
|
+
|
42
42
|
def list_guests
|
43
43
|
guests = room.users_in_room(:type => "guest")
|
44
44
|
if guests.size > 0
|
@@ -12,6 +12,7 @@ module CeilingCat
|
|
12
12
|
begin
|
13
13
|
if command[:public] || user.is_registered?
|
14
14
|
self.send command[:method]
|
15
|
+
return true
|
15
16
|
end
|
16
17
|
rescue => e
|
17
18
|
reply "There was an error: #{$!}"
|
@@ -47,11 +48,11 @@ module CeilingCat
|
|
47
48
|
def room
|
48
49
|
event.room
|
49
50
|
end
|
50
|
-
|
51
|
+
|
51
52
|
def store
|
52
53
|
self.class.store
|
53
54
|
end
|
54
|
-
|
55
|
+
|
55
56
|
def self.store
|
56
57
|
CeilingCat::Setup.config ? CeilingCat::Setup.config.storage : CeilingCat::Storage::Hash
|
57
58
|
end
|
@@ -67,7 +68,7 @@ module CeilingCat
|
|
67
68
|
def reply(message)
|
68
69
|
room.say(message)
|
69
70
|
end
|
70
|
-
|
71
|
+
|
71
72
|
def words
|
72
73
|
body.split
|
73
74
|
end
|
@@ -79,11 +80,11 @@ module CeilingCat
|
|
79
80
|
def body_without_nick(text=body)
|
80
81
|
text.sub(/^#{room.me.name}:?\s*/i,'').strip
|
81
82
|
end
|
82
|
-
|
83
|
+
|
83
84
|
def body_without_nick_or_command(command,text=body)
|
84
85
|
body_without_command(command, body_without_nick(text).sub(/^#{command}/i,"!#{command}"))
|
85
86
|
end
|
86
|
-
|
87
|
+
|
87
88
|
def pluralize(n, singular, plural=nil)
|
88
89
|
if n == 1
|
89
90
|
"#{singular}"
|
@@ -1,22 +1,22 @@
|
|
1
1
|
module CeilingCat
|
2
2
|
module Plugin
|
3
|
-
class Calc < CeilingCat::Plugin::Base
|
3
|
+
class Calc < CeilingCat::Plugin::Base
|
4
4
|
def self.commands
|
5
5
|
[{:command => "calculate", :description => "Performs basic math functions - '!calculate 7*5'", :method => "calculate", :public => true}]
|
6
6
|
end
|
7
|
-
|
7
|
+
|
8
8
|
def self.description
|
9
9
|
"A basic calculator, for all your mathin' needs!"
|
10
10
|
end
|
11
|
-
|
11
|
+
|
12
12
|
def self.name
|
13
13
|
"Calculator"
|
14
14
|
end
|
15
|
-
|
15
|
+
|
16
16
|
def self.public?
|
17
17
|
true
|
18
18
|
end
|
19
|
-
|
19
|
+
|
20
20
|
def calculate
|
21
21
|
begin
|
22
22
|
math = body.gsub(/[^\d+-\/*\(\)\.]/,"") # Removing anything but numbers, operators, and parens
|
@@ -2,15 +2,13 @@ module CeilingCat
|
|
2
2
|
module Plugin
|
3
3
|
class CallAndResponse < CeilingCat::Plugin::Base
|
4
4
|
def handle
|
5
|
-
if event.type == :chat
|
5
|
+
if !super && event.type == :chat
|
6
6
|
if match = self.class.list.find{|car| body =~ Regexp.new(car[:call],true) }
|
7
7
|
response = [match[:response]].flatten # Support old responses which are strings, not arrays
|
8
8
|
reply response[Kernel.rand(response.size)]
|
9
9
|
return nil
|
10
10
|
end
|
11
|
-
super
|
12
11
|
end
|
13
|
-
|
14
12
|
end
|
15
13
|
|
16
14
|
def self.commands
|
@@ -13,7 +13,7 @@ module CeilingCat
|
|
13
13
|
user_count = room.connection.total_user_count
|
14
14
|
max_users = room.connection.config.max_users || 100
|
15
15
|
if room.plugin_installed?("notifo") && user_count > max_users-2
|
16
|
-
room.plugin("notifo").new(@event).deliver("#{user_count} of #{max_users} max connections to Campfire.")
|
16
|
+
room.plugin("notifo").new(@event).deliver("#{user_count} of #{max_users} max connections to Campfire.")
|
17
17
|
end
|
18
18
|
end
|
19
19
|
super
|
@@ -45,4 +45,3 @@ module CeilingCat
|
|
45
45
|
end
|
46
46
|
end
|
47
47
|
end
|
48
|
-
|
@@ -7,7 +7,7 @@ module CeilingCat
|
|
7
7
|
[{:command => "today", :description => "Find out if there's anything special about today.", :method => "about", :public => true},
|
8
8
|
{:command => "add holiday", :description => "Add a holiday - '!add holiday 1/19/2011'", :method => "add_to_holidays"}]
|
9
9
|
end
|
10
|
-
|
10
|
+
|
11
11
|
def about(date=Date.today)
|
12
12
|
begin
|
13
13
|
if self.class.is_a_holiday?(date)
|
@@ -21,11 +21,11 @@ module CeilingCat
|
|
21
21
|
reply "Sorry, that's not a valid date."
|
22
22
|
end
|
23
23
|
end
|
24
|
-
|
24
|
+
|
25
25
|
def self.description
|
26
26
|
"Holidays and times you shouldn't expect to see us in chat."
|
27
27
|
end
|
28
|
-
|
28
|
+
|
29
29
|
def add_to_holidays
|
30
30
|
date = body_without_command("add holiday")
|
31
31
|
if date.empty?
|
@@ -39,7 +39,7 @@ module CeilingCat
|
|
39
39
|
end
|
40
40
|
end
|
41
41
|
end
|
42
|
-
|
42
|
+
|
43
43
|
def self.is_a_weekend?(date=Date.today)
|
44
44
|
if is_a_date?(date)
|
45
45
|
date = Date.parse(date.to_s)
|
@@ -48,11 +48,11 @@ module CeilingCat
|
|
48
48
|
raise NotADateError
|
49
49
|
end
|
50
50
|
end
|
51
|
-
|
51
|
+
|
52
52
|
def self.holidays
|
53
53
|
store["holidays"] ||= []
|
54
54
|
end
|
55
|
-
|
55
|
+
|
56
56
|
def self.add_to_holidays(days)
|
57
57
|
dates = Array(days).collect do |day|
|
58
58
|
if is_a_date?(day)
|
@@ -73,10 +73,10 @@ module CeilingCat
|
|
73
73
|
raise NotADateError
|
74
74
|
end
|
75
75
|
end
|
76
|
-
|
76
|
+
|
77
77
|
store["holidays"] = holidays - dates
|
78
78
|
end
|
79
|
-
|
79
|
+
|
80
80
|
def self.is_a_holiday?(date=Date.today)
|
81
81
|
if is_a_date?(date)
|
82
82
|
holidays.include? Date.parse(date.to_s)
|
@@ -84,7 +84,7 @@ module CeilingCat
|
|
84
84
|
raise NotADateError
|
85
85
|
end
|
86
86
|
end
|
87
|
-
|
87
|
+
|
88
88
|
def self.is_a_date?(date_string)
|
89
89
|
begin
|
90
90
|
return true if Date.parse(date_string.to_s)
|
@@ -0,0 +1,76 @@
|
|
1
|
+
module CeilingCat
|
2
|
+
module Plugin
|
3
|
+
class Messages < CeilingCat::Plugin::Base
|
4
|
+
# See lib/ceiling_cat/plugins/base.rb for the methods available by default.
|
5
|
+
# Plugins are run in the order they are listed in the Chatfile.
|
6
|
+
# When a plugin returns anything other than nil the plugin execution chain is halted.
|
7
|
+
# If you want your plugin to do something but let the remaining plugins execute, return nil at the end of your method.
|
8
|
+
|
9
|
+
# handle manages a plugin's entire interaction with an event.
|
10
|
+
# If you only want to execute commands - "![command]" - leave handle alone (or remove it and define commands below)
|
11
|
+
def handle
|
12
|
+
if event.type == :entrance
|
13
|
+
messages = []
|
14
|
+
messages_for_user = self.class.messages_for(user.name)
|
15
|
+
if messages_for_user.size > 0
|
16
|
+
messages << "Hey #{user.name}! I have a message to deliver to you:"
|
17
|
+
messages += messages_for_user.collect{|message| "From #{message[:from]}: #{message[:body]}"}
|
18
|
+
reply messages
|
19
|
+
end
|
20
|
+
self.class.remove(messages_for_user)
|
21
|
+
false
|
22
|
+
else
|
23
|
+
super
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
# If you want the plugin to run when certain text is sent use commands instead of handle.
|
28
|
+
# Ceiling Cat will watch for "![command]" or "[name]: [command" and execute the method for that command.
|
29
|
+
def self.commands
|
30
|
+
[{:command => "message for", :description => "Leave a message for someone. i.e. '!message for John Doe: You forgot to lock the door after work last night.'", :method => "save_message", :public => true}]
|
31
|
+
end
|
32
|
+
|
33
|
+
def self.description
|
34
|
+
"A plugin called Messages"
|
35
|
+
end
|
36
|
+
|
37
|
+
def self.name
|
38
|
+
"Messages"
|
39
|
+
end
|
40
|
+
|
41
|
+
def self.public?
|
42
|
+
false
|
43
|
+
end
|
44
|
+
|
45
|
+
def save_message
|
46
|
+
recipient,*body = body_without_nick_or_command("message for").split(":")
|
47
|
+
if room.users_in_room.any?{|user| user.name == recipient.strip}
|
48
|
+
reply "Why leave that messsage? #{recipient.strip} is here!"
|
49
|
+
else
|
50
|
+
self.class.add(:to => recipient.strip, :from => user.name, :body => body.join(":").strip)
|
51
|
+
reply "Message saved! I'll deliver it the next time #{recipient.strip} is around."
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
def self.add(opts={})
|
56
|
+
return false unless opts[:to] && opts[:from] && opts[:body]
|
57
|
+
store["messages"] ||= []
|
58
|
+
store["messages"] = (store["messages"] + [{:to => opts[:to], :from => opts[:from], :body => opts[:body]}]).uniq
|
59
|
+
end
|
60
|
+
|
61
|
+
def self.remove(*messages)
|
62
|
+
store["messages"] ||= []
|
63
|
+
store["messages"] = store["messages"].reject{ |message| messages.flatten.include?(message) }
|
64
|
+
end
|
65
|
+
|
66
|
+
def self.list
|
67
|
+
store["messages"] ||= []
|
68
|
+
end
|
69
|
+
|
70
|
+
def self.messages_for(name)
|
71
|
+
store["messages"] ||= []
|
72
|
+
store["messages"].find_all{ |message| message[:to].downcase == name.downcase }
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
@@ -1,34 +1,46 @@
|
|
1
1
|
require 'httparty'
|
2
2
|
|
3
3
|
module CeilingCat
|
4
|
+
class NotifoNotConfiguredError < CeilingCatError; end
|
5
|
+
|
4
6
|
module Plugin
|
5
7
|
class Notifo < CeilingCat::Plugin::Base
|
6
8
|
def self.commands
|
7
|
-
[{:command => "notifo", :description => "Send a message with Notifo - '!notifo Hey, get in here!'.", :method => "deliver"},
|
9
|
+
[{:command => "notifo", :description => "Send a message with Notifo - '!notifo user: Hey, get in here!'. 'user:' is optional, and will go to everyone if not passed.", :method => "deliver"},
|
8
10
|
{:command => "add notifo users", :description => "Add users to get Notifos - '!add notifo users username1 username2'.", :method => "add_users"},
|
9
11
|
{:command => "remove notifo users", :description => "Add users to get Notifos - '!remove notifo users username1 username2'.", :method => "remove_users"},
|
10
12
|
{:command => "list notifo users", :description => "List users who get Notifos - '!list notifo users'.", :method => "list_users"}]
|
11
13
|
end
|
12
14
|
|
13
|
-
def deliver(message=nil)
|
14
|
-
|
15
|
+
def deliver(message=nil,user=nil)
|
16
|
+
body_parts = body_without_nick_or_command("notifo").scan(/^((\w+):)?(.+)$/)[0]
|
17
|
+
message ||= body_parts[2].strip
|
18
|
+
user ||= body_parts[1]
|
19
|
+
|
20
|
+
users = user ? Array(user.strip) : Array(store["notifo_users"])
|
21
|
+
users.each do |user|
|
22
|
+
CeilingCat::Plugin::Notifo.deliver(user,message)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def self.deliver(user,message)
|
15
27
|
if active?
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
28
|
+
HTTParty.post("https://api.notifo.com/v1/send_notification",
|
29
|
+
:body => { :to => user, :msg => message },
|
30
|
+
:basic_auth => {:username => store["notifo_credentials"][:username], :password => store["notifo_credentials"][:api_secret]})
|
31
|
+
else
|
32
|
+
raise NotifoNotConfiguredError
|
21
33
|
end
|
22
34
|
end
|
23
35
|
|
24
36
|
def self.active?
|
25
|
-
if store["notifo_credentials"] && store["notifo_credentials"][:username].present? && store["notifo_credentials"][:api_secret].present?
|
37
|
+
if store["notifo_credentials"] && store["notifo_credentials"][:username].present? && store["notifo_credentials"][:api_secret].present?
|
26
38
|
true
|
27
39
|
else
|
28
40
|
false
|
29
41
|
end
|
30
42
|
end
|
31
|
-
|
43
|
+
|
32
44
|
def active?
|
33
45
|
self.class.active?
|
34
46
|
end
|
@@ -45,7 +57,7 @@ module CeilingCat
|
|
45
57
|
store["notifo_users"] ||= []
|
46
58
|
store["notifo_users"] = (Array(store["notifo_users"]) + Array(users)).uniq
|
47
59
|
end
|
48
|
-
|
60
|
+
|
49
61
|
def self.remove_users(users)
|
50
62
|
store["notifo_users"] ||= []
|
51
63
|
store["notifo_users"] = (Array(store["notifo_users"]) - Array(users)).uniq
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module CeilingCat
|
2
|
+
module Plugin
|
3
|
+
class TWSS < CeilingCat::Plugin::Base
|
4
|
+
RESPONSES = ["That's what she said!", "Uh, that's what she said!", "TWSS", "TWSS!"]
|
5
|
+
|
6
|
+
class << self; attr_accessor :threshold; end # add a class attr_accessor for the TWSS threshold
|
7
|
+
self.threshold = 0.5
|
8
|
+
|
9
|
+
def handle
|
10
|
+
TWSS.threshold = self.class.threshold
|
11
|
+
if event.type == :chat && TWSS(body)
|
12
|
+
reply RESPONSES[Kernel.rand(RESPONSES.size)]
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.description
|
17
|
+
"TWSS via Bayes classifier"
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.name
|
21
|
+
"TWSS"
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.public?
|
25
|
+
false
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -19,7 +19,7 @@ module CeilingCat
|
|
19
19
|
irc.nick config.nickname
|
20
20
|
irc.pass config.password if config.password.present?
|
21
21
|
irc.user config.nickname, "+B", "*", config.nickname
|
22
|
-
|
22
|
+
|
23
23
|
while line = irc.read
|
24
24
|
# Join a channel after MOTD
|
25
25
|
if line.split[1] == '376'
|
@@ -31,7 +31,7 @@ module CeilingCat
|
|
31
31
|
@ops_names << match[1] if match[2].include?("O")
|
32
32
|
@ops_names.uniq!
|
33
33
|
end
|
34
|
-
|
34
|
+
|
35
35
|
puts "Received: #{line}"
|
36
36
|
begin
|
37
37
|
if message = message_parts(line)
|
@@ -60,7 +60,7 @@ module CeilingCat
|
|
60
60
|
irc.privmsg config.room, line
|
61
61
|
end
|
62
62
|
end
|
63
|
-
|
63
|
+
|
64
64
|
def users_in_room(opts={})
|
65
65
|
@user_names.collect {|user_name|
|
66
66
|
user_name = user_name.sub(/^@/,"")
|
@@ -76,7 +76,7 @@ module CeilingCat
|
|
76
76
|
end
|
77
77
|
}.compact
|
78
78
|
end
|
79
|
-
|
79
|
+
|
80
80
|
def user_role(name)
|
81
81
|
if @ops_names.include?(name)
|
82
82
|
"member"
|
@@ -84,7 +84,7 @@ module CeilingCat
|
|
84
84
|
"guest"
|
85
85
|
end
|
86
86
|
end
|
87
|
-
|
87
|
+
|
88
88
|
def is_me?(user)
|
89
89
|
user.name == me.name
|
90
90
|
end
|
@@ -92,7 +92,7 @@ module CeilingCat
|
|
92
92
|
def me
|
93
93
|
@me ||= CeilingCat::User.new(config.nickname, :role => "member")
|
94
94
|
end
|
95
|
-
|
95
|
+
|
96
96
|
def message_parts(message)
|
97
97
|
if message =~ /\sPRIVMSG\s/
|
98
98
|
parts = message.match /^:(.+?)!(.+?)@(.+?)\sPRIVMSG\s(#.+):(.+)/i
|
data/lib/ceiling_cat/setup.rb
CHANGED
@@ -2,16 +2,16 @@ require 'ostruct'
|
|
2
2
|
|
3
3
|
module CeilingCat
|
4
4
|
class Setup
|
5
|
-
|
5
|
+
|
6
6
|
attr_accessor :config
|
7
|
-
|
7
|
+
|
8
8
|
class << self
|
9
9
|
# Class-level config. This is set by the +configure+ class method,
|
10
10
|
# and is used if no configuration is passed to the +initialize+
|
11
11
|
# method.
|
12
12
|
attr_accessor :config
|
13
13
|
end
|
14
|
-
|
14
|
+
|
15
15
|
# Configures the connection at the class level. When the +ceiling_cat+ bin
|
16
16
|
# file is loaded, it evals the file referenced by the first
|
17
17
|
# command-line parameter. This file can configure the connection
|
@@ -27,11 +27,11 @@ module CeilingCat
|
|
27
27
|
def config=(config)
|
28
28
|
@config = config.kind_of?(Hash) ? OpenStruct.new(config) : config
|
29
29
|
end
|
30
|
-
|
30
|
+
|
31
31
|
def initialize(_config = nil)
|
32
32
|
self.config = _config || self.class.config
|
33
33
|
end
|
34
|
-
|
34
|
+
|
35
35
|
def connect
|
36
36
|
case self.config.service.downcase
|
37
37
|
when 'campfire'
|
@@ -46,6 +46,6 @@ module CeilingCat
|
|
46
46
|
raise CeilingCat::UnsupportedChatServiceError.new("#{self.config.service} is not a supported chat service.")
|
47
47
|
end
|
48
48
|
end
|
49
|
-
|
49
|
+
|
50
50
|
end
|
51
51
|
end
|
data/lib/ceiling_cat/user.rb
CHANGED
data/lib/ceiling_cat/version.rb
CHANGED
data/setup/Chatfile
CHANGED
@@ -17,11 +17,11 @@ CeilingCat::Setup.configure do |config|
|
|
17
17
|
# config.nick = 'nickname'
|
18
18
|
# config.password = 'Q7Af6laDKza2SOM'
|
19
19
|
# config.room = '#my_room'
|
20
|
-
|
20
|
+
|
21
21
|
config.plugins = [CeilingCat::Plugin::About,
|
22
22
|
CeilingCat::Plugin::Greeter,
|
23
23
|
CeilingCat::Plugin::Calc]
|
24
|
-
|
24
|
+
|
25
25
|
# Some plugins require storage
|
26
26
|
CeilingCat::Storage::Yaml.file = "ceilingcat.yml"
|
27
27
|
config.storage = CeilingCat::Storage::Yaml
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ceiling_cat
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 19
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 1
|
9
|
-
-
|
10
|
-
version: 0.1.
|
9
|
+
- 4
|
10
|
+
version: 0.1.4
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Chris Warren
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-09-
|
18
|
+
date: 2011-09-23 00:00:00 Z
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
21
21
|
name: tinder
|
@@ -82,9 +82,25 @@ dependencies:
|
|
82
82
|
type: :runtime
|
83
83
|
version_requirements: *id004
|
84
84
|
- !ruby/object:Gem::Dependency
|
85
|
-
name:
|
85
|
+
name: twss
|
86
86
|
prerelease: false
|
87
87
|
requirement: &id005 !ruby/object:Gem::Requirement
|
88
|
+
none: false
|
89
|
+
requirements:
|
90
|
+
- - ~>
|
91
|
+
- !ruby/object:Gem::Version
|
92
|
+
hash: 21
|
93
|
+
segments:
|
94
|
+
- 0
|
95
|
+
- 0
|
96
|
+
- 5
|
97
|
+
version: 0.0.5
|
98
|
+
type: :runtime
|
99
|
+
version_requirements: *id005
|
100
|
+
- !ruby/object:Gem::Dependency
|
101
|
+
name: rspec
|
102
|
+
prerelease: false
|
103
|
+
requirement: &id006 !ruby/object:Gem::Requirement
|
88
104
|
none: false
|
89
105
|
requirements:
|
90
106
|
- - "="
|
@@ -96,11 +112,11 @@ dependencies:
|
|
96
112
|
- 0
|
97
113
|
version: 2.6.0
|
98
114
|
type: :development
|
99
|
-
version_requirements: *
|
115
|
+
version_requirements: *id006
|
100
116
|
- !ruby/object:Gem::Dependency
|
101
117
|
name: ruby-debug
|
102
118
|
prerelease: false
|
103
|
-
requirement: &
|
119
|
+
requirement: &id007 !ruby/object:Gem::Requirement
|
104
120
|
none: false
|
105
121
|
requirements:
|
106
122
|
- - ">="
|
@@ -110,11 +126,11 @@ dependencies:
|
|
110
126
|
- 0
|
111
127
|
version: "0"
|
112
128
|
type: :development
|
113
|
-
version_requirements: *
|
129
|
+
version_requirements: *id007
|
114
130
|
- !ruby/object:Gem::Dependency
|
115
131
|
name: fakeweb
|
116
132
|
prerelease: false
|
117
|
-
requirement: &
|
133
|
+
requirement: &id008 !ruby/object:Gem::Requirement
|
118
134
|
none: false
|
119
135
|
requirements:
|
120
136
|
- - ">="
|
@@ -124,8 +140,8 @@ dependencies:
|
|
124
140
|
- 0
|
125
141
|
version: "0"
|
126
142
|
type: :development
|
127
|
-
version_requirements: *
|
128
|
-
description: Ceiling Cat is watching you chat. A Campfire chat bot!
|
143
|
+
version_requirements: *id008
|
144
|
+
description: Ceiling Cat is watching you chat. A Campfire and IRC chat bot!
|
129
145
|
email:
|
130
146
|
- chris@zencoder.com
|
131
147
|
executables:
|
@@ -135,35 +151,37 @@ extensions: []
|
|
135
151
|
extra_rdoc_files: []
|
136
152
|
|
137
153
|
files:
|
138
|
-
- lib/ceiling_cat.rb
|
139
|
-
- lib/ceiling_cat/setup.rb
|
140
|
-
- lib/ceiling_cat/version.rb
|
141
154
|
- lib/ceiling_cat/connection.rb
|
142
155
|
- lib/ceiling_cat/errors.rb
|
143
156
|
- lib/ceiling_cat/event.rb
|
144
|
-
- lib/ceiling_cat/user.rb
|
145
|
-
- lib/ceiling_cat/room.rb
|
146
|
-
- lib/ceiling_cat/storage/base.rb
|
147
|
-
- setup/Chatfile
|
148
|
-
- setup/Rakefile
|
149
|
-
- lib/ceiling_cat/plugins/base.rb
|
150
157
|
- lib/ceiling_cat/plugins/about.rb
|
158
|
+
- lib/ceiling_cat/plugins/base.rb
|
151
159
|
- lib/ceiling_cat/plugins/calc.rb
|
152
160
|
- lib/ceiling_cat/plugins/call_and_response.rb
|
153
161
|
- lib/ceiling_cat/plugins/campfire_account_monitor.rb
|
154
162
|
- lib/ceiling_cat/plugins/days.rb
|
155
163
|
- lib/ceiling_cat/plugins/greeter.rb
|
164
|
+
- lib/ceiling_cat/plugins/messages.rb
|
156
165
|
- lib/ceiling_cat/plugins/notifo.rb
|
157
|
-
- lib/ceiling_cat/
|
158
|
-
- lib/ceiling_cat/
|
159
|
-
- lib/ceiling_cat/services/campfire.rb
|
166
|
+
- lib/ceiling_cat/plugins/twss.rb
|
167
|
+
- lib/ceiling_cat/room.rb
|
160
168
|
- lib/ceiling_cat/services/campfire/connection.rb
|
161
169
|
- lib/ceiling_cat/services/campfire/event.rb
|
162
170
|
- lib/ceiling_cat/services/campfire/room.rb
|
163
|
-
- lib/ceiling_cat/services/
|
171
|
+
- lib/ceiling_cat/services/campfire.rb
|
164
172
|
- lib/ceiling_cat/services/irc/connection.rb
|
165
173
|
- lib/ceiling_cat/services/irc/event.rb
|
166
174
|
- lib/ceiling_cat/services/irc/room.rb
|
175
|
+
- lib/ceiling_cat/services/irc.rb
|
176
|
+
- lib/ceiling_cat/setup.rb
|
177
|
+
- lib/ceiling_cat/storage/base.rb
|
178
|
+
- lib/ceiling_cat/storage/hash.rb
|
179
|
+
- lib/ceiling_cat/storage/yaml.rb
|
180
|
+
- lib/ceiling_cat/user.rb
|
181
|
+
- lib/ceiling_cat/version.rb
|
182
|
+
- lib/ceiling_cat.rb
|
183
|
+
- setup/Chatfile
|
184
|
+
- setup/Rakefile
|
167
185
|
- bin/ceiling_cat
|
168
186
|
homepage: http://zencoder.com
|
169
187
|
licenses: []
|
@@ -194,9 +212,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
194
212
|
requirements: []
|
195
213
|
|
196
214
|
rubyforge_project:
|
197
|
-
rubygems_version: 1.8.
|
215
|
+
rubygems_version: 1.8.8
|
198
216
|
signing_key:
|
199
217
|
specification_version: 3
|
200
|
-
summary: Ceiling Cat is watching you chat. A Campfire chat bot.
|
218
|
+
summary: Ceiling Cat is watching you chat. A Campfire and IRC chat bot.
|
201
219
|
test_files: []
|
202
220
|
|