ceiling_cat 0.1.3 → 0.1.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.
@@ -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
@@ -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 < StandardError; end
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
@@ -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)
@@ -17,11 +17,11 @@ module CeilingCat
17
17
  super
18
18
  end
19
19
  end
20
-
20
+
21
21
  def self.name
22
22
  "Greeter"
23
23
  end
24
-
24
+
25
25
  def self.description
26
26
  "Welcomes visitors and memebrs to chat."
27
27
  end
@@ -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
- message ||= body_without_nick_or_command("notifo")
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
- Array(store["notifo_users"]).each do |user|
17
- HTTParty.post("https://api.notifo.com/v1/send_notification",
18
- :body => { :to => user, :msg => message },
19
- :basic_auth => {:username => store["notifo_credentials"][:username], :password => store["notifo_credentials"][:api_secret]})
20
- end
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? && Array(store["notifo_users"]).size > 0
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
@@ -11,7 +11,7 @@ module CeilingCat
11
11
  def campfire
12
12
  @campfire = Tinder::Campfire.new(self.config.subdomain, :token => self.config.token, :ssl => self.config.ssl)
13
13
  end
14
-
14
+
15
15
  def total_user_count
16
16
  users = 0
17
17
  @campfire.rooms.each do |room|
@@ -1,7 +1,7 @@
1
1
  module CeilingCat
2
2
  module Campfire
3
3
  class Event < CeilingCat::Event
4
-
4
+
5
5
  def type
6
6
  case @type
7
7
  when "EnterMessage", :entrance
@@ -12,7 +12,7 @@ module CeilingCat
12
12
  :exit
13
13
  end
14
14
  end
15
-
15
+
16
16
  end
17
17
  end
18
18
  end
@@ -1,7 +1,7 @@
1
1
  module CeilingCat
2
2
  module IRC
3
3
  class Event < CeilingCat::Event
4
-
4
+
5
5
  def type
6
6
  case @type
7
7
  when "EnterMessage", :entrance
@@ -12,7 +12,7 @@ module CeilingCat
12
12
  :exit
13
13
  end
14
14
  end
15
-
15
+
16
16
  end
17
17
  end
18
18
  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
@@ -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
@@ -14,7 +14,7 @@ module CeilingCat
14
14
  @file
15
15
  end
16
16
 
17
- # Sets the key +k+ to the value +v+
17
+ # Sets the key +k+ to the value +v+
18
18
  def []=(k, v)
19
19
  internal[k] = v
20
20
  persist!
@@ -7,11 +7,11 @@ module CeilingCat
7
7
  @id = opts[:id] || rand(10000000)
8
8
  @role = opts[:role] || "guest"
9
9
  end
10
-
10
+
11
11
  def to_s
12
12
  short_name
13
13
  end
14
-
14
+
15
15
  def short_name
16
16
  @name.to_s.split.compact.first
17
17
  end
@@ -1,3 +1,3 @@
1
1
  module CeilingCat
2
- VERSION = "0.1.3"
2
+ VERSION = "0.1.4"
3
3
  end
@@ -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: 29
4
+ hash: 19
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 1
9
- - 3
10
- version: 0.1.3
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-07 00:00:00 Z
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: rspec
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: *id005
115
+ version_requirements: *id006
100
116
  - !ruby/object:Gem::Dependency
101
117
  name: ruby-debug
102
118
  prerelease: false
103
- requirement: &id006 !ruby/object:Gem::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: *id006
129
+ version_requirements: *id007
114
130
  - !ruby/object:Gem::Dependency
115
131
  name: fakeweb
116
132
  prerelease: false
117
- requirement: &id007 !ruby/object:Gem::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: *id007
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/storage/hash.rb
158
- - lib/ceiling_cat/storage/yaml.rb
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/irc.rb
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.7
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