beerbot 0.1.1 → 0.1.2

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b63fcda572d39a2ff6d91a9c9d8f44cc188e5e01
4
- data.tar.gz: 2b9a1a096feac44e1f8866273c067e860b0786be
3
+ metadata.gz: b0520c21dd31300f06b2ebf9968b47b637b0053a
4
+ data.tar.gz: 2bf90aba38d40d9de6c8f23148bac96f7b5358b5
5
5
  SHA512:
6
- metadata.gz: ade4864380a1c71ba8309e104dd5d54b1a2acfca192819ee0b9e92ddc992fc88cd477786111f8e9f254c84a1994d8a43ff889afd510e004bd257286a35ceef22
7
- data.tar.gz: 5d3c3c99e58ce189b476d4d308688884427af2889d98cb5f1f4fac1427c09dd2f42fff7fdd79ba3432fa82639397c8ad3962dd5349822dfe4ff492fa709a2d77
6
+ metadata.gz: 541a57a15d442bd567a71ce3fa000bd4f215fa1bd0ae5596620dc700860ad2db2702906fbbf3f88d877a1f12b62a0524563c211213ca9bfdcc91f0f296e8c3de
7
+ data.tar.gz: 0272651fdee9bb932ff00c3a3247cdec27f18353a603a0999f0b6b978ca4d6d601263b585672d5f8c19e612f06e0089f56804bfb2da68c35dfc29a72faa54160
@@ -1,16 +1,18 @@
1
1
  require 'CronR' # For scheduler
2
2
 
3
3
  require_relative 'BeerBot/00.utils/utils'
4
- require_relative 'BeerBot/00.utils/paramExpand'
4
+ require_relative 'BeerBot/00.utils/param_expand'
5
+ require_relative 'BeerBot/00.utils/sentence_expand'
5
6
  require_relative 'BeerBot/00.utils/DataFile'
6
7
  require_relative 'BeerBot/00.utils/InOut'
7
8
  require_relative 'BeerBot/00.utils/world/IRCWorld'
8
9
  require_relative 'BeerBot/01.connect/IRCConnection'
9
- require_relative 'BeerBot/01.protocols/botmsg'
10
- require_relative 'BeerBot/01.protocols/irc'
11
- require_relative 'BeerBot/02.bot/bot'
12
- require_relative 'BeerBot/03.more/BotMsgMore'
13
- require_relative 'BeerBot/06.dispatchers/irc'
10
+ require_relative 'BeerBot/01.bot/botmsg'
11
+ require_relative 'BeerBot/01.bot/BotModule'
12
+ require_relative 'BeerBot/01.bot/Bot'
13
+ require_relative 'BeerBot/01.bot/BotMsgMore'
14
+ require_relative 'BeerBot/02.protocols/irc'
15
+ require_relative 'BeerBot/06.dispatchers/dispatcher'
14
16
  require_relative 'BeerBot/70.scheduler/scheduler'
15
17
  require_relative 'BeerBot/Config'
16
18
 
@@ -0,0 +1,105 @@
1
+ # The files in this directory are part of BeerBot, a a ruby irc bot library.
2
+ # Copyright (C) 2014 Daniel Bush
3
+ # This program is distributed under the terms of the GNU
4
+ # General Public License. A copy of the license should be
5
+ # enclosed with this project in the file LICENSE. If not
6
+ # see <http://www.gnu.org/licenses/>.
7
+
8
+
9
+ module BeerBot
10
+
11
+ module Utils
12
+
13
+ module ParamExpand
14
+
15
+ # Look for parameters in a string.
16
+ #
17
+ # Numeric parameters => "... ::1 ... ::2 "
18
+ # Key parameters => "... ::foo ... ::bar "
19
+ # Multi => "... ::foo|::1 ... ::bar|::foo|::1 "
20
+ #
21
+ # (?: ) is a non-capturing group.
22
+
23
+ def self.scan_param msg
24
+ matches = msg.scan(/(?:::[^\W\s:|]*(?:\|::[^\W\s:|]*)*)/)
25
+ matches.map{|m|
26
+ a = m.split('|').map{|m2|
27
+ m2 = m2.sub('::','')
28
+ case m2
29
+ when /^\d+$/
30
+ m2.to_i
31
+ else
32
+ m2
33
+ end
34
+ }
35
+ [m,a]
36
+ }
37
+ end
38
+
39
+ # Expand a string with numeric and key parameters using data
40
+ # provided.
41
+ #
42
+ # Parameters should be preceded with a double-colon in the msg.
43
+ # Numeric parameters are matched to 'args'.
44
+ # So ::1 => args[0] etc
45
+ #
46
+ # 'expand' will return the expanded string as best it can and an
47
+ # error object.
48
+ # The error object will tell you if there weren't enough
49
+ # parameters in args to satisfy the numeric parameters in the
50
+ # string.
51
+ #
52
+ # Example:
53
+ #
54
+ # "::1 ::foo ::bar|::1" using ('a',foo:'b')
55
+ # => "a b a"
56
+
57
+ def self.expand msg,*args,**kargs
58
+ errargs = []
59
+ params = self.scan_param(msg)
60
+ # Do the big ones first.
61
+ params = params.sort{|a,b|b[1].size<=>a[1].size}
62
+ params.each {|i|
63
+ # pattern: "::1|::foo"
64
+ # parts: [1,'foo']
65
+ pattern,parts = i
66
+ found = false
67
+ _errargs = []
68
+ _errkargs = []
69
+ parts.each {|part|
70
+ v = nil
71
+ case part
72
+ when Fixnum
73
+ v = args[part-1]
74
+ _errargs.push(part) unless v
75
+ else
76
+ if part == '' then # pattern is or contains '::' which has part ''.
77
+ v = ''
78
+ else
79
+ v = kargs[part.to_sym]
80
+ _errkargs.push(part) unless v
81
+ end
82
+ end
83
+ if v then
84
+ if v == '' then
85
+ #byebug
86
+ # Squeeze spaces. Not perfect, but it'll do.
87
+ msg = msg.gsub(/ ?#{pattern.gsub('|','\|')} ?/,' ')
88
+ else
89
+ msg = msg.gsub(pattern,v.to_s)
90
+ end
91
+ found = true
92
+ end
93
+ }
94
+ unless found then
95
+ errargs += _errargs
96
+ end
97
+ }
98
+ [msg,errargs]
99
+ end
100
+
101
+ end
102
+
103
+ end
104
+
105
+ end
@@ -29,7 +29,7 @@ module BeerBot
29
29
  # The entry from <value> will also undergo the
30
30
  # same ':' substitution.
31
31
 
32
- module ParamExpand
32
+ module SentenceExpand
33
33
 
34
34
  # Recursively expand a sentence with parameters starting with
35
35
  # ':' using values sampled from params.
@@ -10,30 +10,6 @@ module BeerBot
10
10
 
11
11
  module Utils
12
12
 
13
- # Look for parameters in a string.
14
- #
15
- # Numeric parameters => "... ::1 ... ::2 "
16
- # Key parameters => "... ::foo ... ::bar "
17
- # Multi => "... ::foo|::1 ... ::bar|::foo|::1 "
18
- #
19
- # (?: ) is a non-capturing group.
20
-
21
- def self.scan_param msg
22
- matches = msg.scan(/(?:::[^\W\s:|]*(?:\|::[^\W\s:|]*)*)/)
23
- matches.map{|m|
24
- a = m.split('|').map{|m2|
25
- m2 = m2.sub('::','')
26
- case m2
27
- when /\d+/
28
- m2.to_i
29
- else
30
- m2
31
- end
32
- }
33
- [m,a]
34
- }
35
- end
36
-
37
13
  # Return a parser that takes string msg and extracts a specified
38
14
  # prefix at beginning.
39
15
  #
@@ -53,65 +29,6 @@ module BeerBot
53
29
  }
54
30
  end
55
31
 
56
- # Expand a string with numeric and key parameters using data
57
- # provided.
58
- #
59
- # Parameters should be preceded with a double-colon in the msg.
60
- # Numeric parameters are matched to 'args'.
61
- # So ::1 => args[0] etc
62
- #
63
- # 'expand' will return the expanded string as best it can and an
64
- # error object.
65
- # The error object will tell you if there weren't enough
66
- # parameters in args to satisfy the numeric parameters in the
67
- # string.
68
- #
69
- # ("::1 ::foo ::bar|::1",'a',foo:'b') => "a b a"
70
-
71
- def self.expand msg,*args,**kargs
72
- errargs = []
73
- params = self.scan_param(msg)
74
- # Do the big ones first.
75
- params = params.sort{|a,b|b[1].size<=>a[1].size}
76
- params.each {|i|
77
- # pattern: "::1|::foo"
78
- # parts: [1,'foo']
79
- pattern,parts = i
80
- found = false
81
- _errargs = []
82
- _errkargs = []
83
- parts.each {|part|
84
- v = nil
85
- case part
86
- when Fixnum
87
- v = args[part-1]
88
- _errargs.push(part) unless v
89
- else
90
- if part == '' then # pattern is or contains '::' which has part ''.
91
- v = ''
92
- else
93
- v = kargs[part.to_sym]
94
- _errkargs.push(part) unless v
95
- end
96
- end
97
- if v then
98
- if v == '' then
99
- #byebug
100
- # Squeeze spaces. Not perfect, but it'll do.
101
- msg = msg.gsub(/ ?#{pattern.gsub('|','\|')} ?/,' ')
102
- else
103
- msg = msg.gsub(pattern,v.to_s)
104
- end
105
- found = true
106
- end
107
- }
108
- unless found then
109
- errargs += _errargs
110
- end
111
- }
112
- [msg,errargs]
113
- end
114
-
115
32
  # Regex that looks for a sed command eg
116
33
  # "s/pattern/replacement/flags" in a string.
117
34
  #
@@ -5,25 +5,11 @@
5
5
  # enclosed with this project in the file LICENSE. If not
6
6
  # see <http://www.gnu.org/licenses/>.
7
7
 
8
- require_relative '../01.protocols/botmsg.rb'
8
+ require_relative 'botmsg.rb'
9
+ require_relative 'BotModule.rb'
9
10
 
10
11
  module BeerBot
11
12
 
12
- BotMsg = BeerBot::Protocol::BotMsg
13
-
14
- # Represents a bot module and may contain a reference to the loaded
15
- # ruby module or any errors associated with loading it.
16
-
17
- class BotModule < Hash
18
- def initialize name,status:false,mod:nil,modname:nil,errors:[]
19
- self[:status] = status
20
- self[:name] = name # The module name.
21
- self[:mod] = mod # The loaded ruby module.
22
- self[:modname] = modname
23
- self[:errors] = errors
24
- end
25
- end
26
-
27
13
  # Represents a sequence of BotModule instances.
28
14
 
29
15
  class Bot < Array
@@ -114,24 +100,37 @@ module BeerBot
114
100
  }
115
101
  end
116
102
 
103
+ # Process messages addressed directly to the bot.
104
+
117
105
  def cmd msg,from:nil,to:nil,me:false,world:nil
118
106
  if @cmd then
119
- botmsg = @cmd.call(msg,from:from,to:to,world:world,me:me)
120
- return botmsg
107
+ @cmd.call(msg,from:from,to:to,world:world,me:me)
121
108
  else
122
109
  self.run(:cmd,msg,from:from,to:to,world:world,me:me)
123
110
  end
124
111
  end
125
112
 
113
+ # Process messages the bot overhears.
114
+
126
115
  def hear msg,from:nil,to:nil,me:false,world:nil
127
116
  if @hear then
128
- botmsg = @hear.call(msg,from:from,to:to,me:me,world:world)
129
- return botmsg
117
+ @hear.call(msg,from:from,to:to,me:me,world:world)
130
118
  else
131
119
  self.run(:hear,msg,from:from,to:to,me:me,world:world)
132
120
  end
133
121
  end
134
122
 
123
+ # Handle events other than being messaged.
124
+ #
125
+ # IRC events like joining channels, changing nicks etc.
126
+ #
127
+ # Both event and kargs is dependent on the dispatcher which in
128
+ # turn is dependent on how the protocol (eg irc) is parsed.
129
+
130
+ def event event,**kargs
131
+ self.run(:event,event,**kargs)
132
+ end
133
+
135
134
  def help arr,from:nil,to:nil,world:nil,me:false
136
135
  m = []
137
136
  modname,*topics = arr
@@ -0,0 +1,16 @@
1
+
2
+ module BeerBot
3
+ # Represents a bot module and may contain a reference to the loaded
4
+ # ruby module or any errors associated with loading it.
5
+
6
+ class BotModule < Hash
7
+ def initialize name,status:false,mod:nil,modname:nil,errors:[]
8
+ self[:status] = status
9
+ self[:name] = name # The module name.
10
+ self[:mod] = mod # The loaded ruby module.
11
+ self[:modname] = modname
12
+ self[:errors] = errors
13
+ end
14
+ end
15
+
16
+ end
@@ -9,16 +9,17 @@ require_relative '../00.utils/More'
9
9
 
10
10
  module BeerBot
11
11
 
12
- # More-based system (see More).
12
+ # More-based filter that can be applied to botmsg's.
13
13
  #
14
- # #filter expects a botmsg and returns an array botmsg.
14
+ # #filter expects a botmsg and returns an array, either of botmsg's
15
+ # or emtpy.
15
16
 
16
17
  class BotMsgMore < ::BeerBot::Utils::More
17
18
  def filter botmsg
18
- return nil unless botmsg
19
+ arr = BeerBot::BotMsg.to_a(botmsg)
20
+ # At this point if arr isn't a valid bot msg we'll get [].
19
21
  replies = []
20
22
  by_to = Hash.new{|h,k| h[k]=[]}
21
- arr = BeerBot::Protocol::BotMsg.to_a(botmsg)
22
23
 
23
24
  arr.inject(by_to){|h,v| h[v[:to]].push(v); h}
24
25
  by_to.each_pair{|to,a|
@@ -0,0 +1,105 @@
1
+ # The files in this directory are part of BeerBot, a a ruby irc bot library.
2
+ # Copyright (C) 2013,2014 Daniel Bush
3
+ # This program is distributed under the terms of the GNU
4
+ # General Public License. A copy of the license should be
5
+ # enclosed with this project in the file LICENSE. If not
6
+ # see <http://www.gnu.org/licenses/>.
7
+
8
+ module BeerBot
9
+
10
+ # BotMsg's are hashes or arrays of hashes and represent a bot
11
+ # response (usually to some input eg from an irc server).
12
+ #
13
+ # The hash is generally expected to have the following keys:
14
+ #
15
+ # :msg
16
+ # :to
17
+ #
18
+ # but may carry additional ones like
19
+ #
20
+ # :action (will be used instead of :msg)
21
+ #
22
+ # The array-form of the botmsg might look like this:
23
+ #
24
+ # [msg:'ho!',to:'#chan1']
25
+ #
26
+ # and it is easy to add extra messages this way:
27
+ #
28
+ # [msg:'ho!',to:'#chan1'] + [msg:'ho again!',to:'#chan1']
29
+ #
30
+ # etc
31
+
32
+ module BotMsg
33
+
34
+ # Determine if botmsg is a valid botmsg.
35
+
36
+ def self.valid? botmsg
37
+ case botmsg
38
+ when Hash
39
+ a = botmsg.has_key?(:to)
40
+ b = (botmsg.has_key?(:msg) || botmsg.has_key?(:action))
41
+ a && b
42
+ when Array
43
+ botmsg.inject(true){|s,v|
44
+ # Members must be hash...
45
+ break false unless v.kind_of?(Hash)
46
+ s = s && self.valid?(v);
47
+ break false unless s;
48
+ s
49
+ }
50
+ when Proc
51
+ false
52
+ else
53
+ false
54
+ end
55
+ end
56
+
57
+ # Convert botmsg to an array of one or more botmsg hashes.
58
+ #
59
+ # Returns array of botmsg hashes or empty array if not given
60
+ # something that is valid.
61
+ #
62
+ # Proc's are executed to retrieve an array or hash.
63
+ #
64
+ # Array => Array
65
+ # Hash => [Hash]
66
+ # Proc => [Hash]
67
+
68
+ def self.to_a botmsg
69
+ case botmsg
70
+ when Hash
71
+ return [] unless self.valid?(botmsg)
72
+ return [botmsg]
73
+ when Array
74
+ return [] unless self.valid?(botmsg)
75
+ return botmsg
76
+ when Proc
77
+ return self.to_a(botmsg.call)
78
+ else
79
+ return []
80
+ end
81
+ end
82
+
83
+ # Convert botmsg to an action if it starts with '*'.
84
+
85
+ def self.actionify botmsg
86
+ case botmsg
87
+ when Hash
88
+ case botmsg[:msg]
89
+ when /^\*\s*/
90
+ botmsg[:action] = botmsg[:msg].sub(/^\*\s*/,'')
91
+ botmsg[:msg] = nil
92
+ end
93
+ botmsg
94
+ when Array
95
+ botmsg.map {|b|
96
+ self.actionify(b)
97
+ }
98
+ else
99
+ botmsg
100
+ end
101
+ end
102
+
103
+ end
104
+
105
+ end
@@ -11,8 +11,11 @@ module BeerBot
11
11
 
12
12
  module IRC
13
13
 
14
- # In coming IRC messages are parsed into hashes with several
15
- # additional methods.
14
+ # This class represents an irc message broken down into its
15
+ # major constituent parts.
16
+ #
17
+ # These include the prefix, command, parameters and trailing
18
+ # components of an irc message.
16
19
 
17
20
  class IRCMessage < Hash
18
21
 
@@ -110,18 +113,24 @@ module BeerBot
110
113
 
111
114
  end
112
115
 
113
- # Parse raw irc string and then yield for various events.
116
+ # Parse raw irc string and then yield or return a generic
117
+ # representation of the event.
118
+ #
119
+ # Returns [event,*args]
120
+ #
121
+ # Parse's job is to take the constituents parts of an irc
122
+ # message, identify the type of event and return a generic
123
+ # representation of it.
124
+ #
125
+ # So for instance, an irc privmsg (message) is represented as
126
+ # [:msg,from,to,msg]
114
127
  #
115
- # The lambda receives an incoming irc string, tries to parse
116
- # it and act on it.
117
- # The lambda should return nil or a botmsg hash.
118
128
  # Note that connection readiness and PONG protocol are handled by
119
129
  # the irc connection, not here.
120
130
 
121
- def self.parse str,&block
131
+ def self.parse str
122
132
 
123
133
  m = IRCMessage.new(str)
124
- #puts "[parse] #{m}"
125
134
  result = []
126
135
 
127
136
  case m[:command]
@@ -180,17 +189,13 @@ module BeerBot
180
189
  msg = m[:trailing].strip
181
190
  from = m[:prefix][:nick].strip
182
191
  to = m[:params][0].strip unless m[:params].empty?
183
- result = [:privmsg,from,to,msg]
192
+ result = [:msg,from,to,msg]
184
193
 
185
194
  else # command we don't handle
186
195
  result = [:default,m]
187
196
  end
188
197
 
189
- if block_given? then
190
- yield result
191
- else
192
- result
193
- end
198
+ result
194
199
  end
195
200
 
196
201
  # Return irc-conformat string from a botmsg hash.
@@ -6,8 +6,7 @@
6
6
  # see <http://www.gnu.org/licenses/>.
7
7
 
8
8
  require_relative '../00.utils/utils'
9
- require_relative '../01.protocols/irc'
10
- require_relative '../03.more/BotMsgMore'
9
+ require_relative '../01.bot/BotMsgMore'
11
10
 
12
11
  module BeerBot
13
12
 
@@ -16,20 +15,24 @@ module BeerBot
16
15
 
17
16
  module Dispatchers
18
17
 
19
- # This dispatcher calls BeerBot::Protocol::IRC.parse on what it
20
- # receives and then processes the response.
18
+ # This dispatcher receives generic events (provided by a parser
19
+ # for a given protocol eg irc) and does something with them.
21
20
  #
22
- # There are several ways to specify how the result of parse is
23
- # processed. You can:
21
+ # Dispatcher#receive receives the messages.
22
+ #
23
+ # There are several ways to specify what the dispatcher should do:
24
+ # 1) just get the result of #receive
25
+ #
26
+ # Or, override #receive's behaviour:
24
27
  # 1) pass in a block at instantiation time
25
- # 2) set a block using #set_receive
28
+ # 2) pass in a block using #set_receive
26
29
  # 3) subclass this class and write your own #receive
27
30
 
28
- class IRCDispatcher
31
+ class Dispatcher
29
32
 
30
- IRC = BeerBot::Protocol::IRC
31
- Utils = BeerBot::Utils
32
- BotMsgMore = BeerBot::BotMsgMore
33
+ Utils = BeerBot::Utils
34
+ BotMsg = BeerBot::BotMsg
35
+ BotMsgMore = BeerBot::BotMsgMore
33
36
 
34
37
  attr_accessor :bot,:nick,:prefix,:world,:more
35
38
 
@@ -63,44 +66,44 @@ module BeerBot
63
66
  end
64
67
  end
65
68
 
66
- def parse irc_str
67
- IRC.parse(irc_str)
68
- end
69
-
70
- def receive irc_str
71
-
72
- event,*args = self.parse(irc_str)
69
+ def receive event,args
73
70
 
74
71
  if @block then
75
72
  return self.instance_exec(event,*args,&@block)
76
73
  end
77
74
 
75
+ replies = nil
76
+
78
77
  # Otherwise, here is the default behaviour...
79
78
 
80
79
  case event
81
80
  when :unknown
82
- #puts "protocol/irc :unknown"
81
+ replies = @bot.event(event,args:args)
83
82
  when :default
84
- #puts "protocol/irc :default"
83
+ replies = @bot.event(event,args:args)
85
84
  when :nick
86
85
  old,nick = args
87
86
  @world.nick(old,nick) if @world
87
+ replies = @bot.event(event,old:old,nick:nick)
88
88
  when :part
89
89
  nick,channel = args
90
90
  @world.part(nick,channel) if @world
91
+ replies = @bot.event(event,nick:nick,channel:channel)
91
92
  when :join
92
93
  nick,channel = args
94
+ me = (@nickrx === nick)
93
95
  @world.join(nick,channel) if @world
96
+ replies = @bot.event(event,me:me,nick:nick,channel:channel)
94
97
  when :chanlist
95
- #p "[dispatcher] :chanlist"
96
98
  channel,users = args
97
99
  if @world then
98
100
  users.each {|user|
99
101
  @world.join(user,channel)
100
102
  }
101
103
  end
104
+ replies = @bot.event(event,channel:channel,users:users)
102
105
 
103
- when :privmsg
106
+ when :msg
104
107
 
105
108
  from,to,msg = args
106
109
 
@@ -137,18 +140,17 @@ module BeerBot
137
140
  end
138
141
 
139
142
  else
140
- puts "protocol/irc unrecognised event: '#{event}'"
143
+ puts "[dispatcher] unrecognised event: '#{event}'"
141
144
  end
142
145
 
143
146
  case replies
144
- when String # assume irc string
147
+ when String # assume protocol string eg irc
145
148
  replies
146
149
  when Hash,Array,Proc
147
150
  # more-filter the reply...
148
151
  replies = @more.filter(replies)
149
- IRC.to_irc(replies)
150
152
  else
151
- nil
153
+ []
152
154
  end
153
155
 
154
156
  end
@@ -28,7 +28,7 @@ class BeerBot::RunIRC
28
28
  IRCConnection = BeerBot::IRCConnection
29
29
  IRC = BeerBot::Protocol::IRC
30
30
  Bot = BeerBot::Bot
31
- IRCDispatcher = BeerBot::Dispatchers::IRCDispatcher
31
+ Dispatcher = BeerBot::Dispatchers::Dispatcher
32
32
  Scheduler = BeerBot::Scheduler
33
33
 
34
34
  attr_accessor :config,:bot,:scheduler,:dispatcher,:world,:conn,:postq,:parse,:more
@@ -53,7 +53,7 @@ class BeerBot::RunIRC
53
53
  @world = IRCWorld.new(config['nick'])
54
54
 
55
55
  # Dispatcher which receives messages and interacts with the bot.
56
- @dispatcher = IRCDispatcher.new(
56
+ @dispatcher = Dispatcher.new(
57
57
  @bot,
58
58
  config['nick'],
59
59
  prefix:config['cmd_prefix'],
@@ -68,12 +68,14 @@ class BeerBot::RunIRC
68
68
  nick:config['nick'],
69
69
  server:config['server'])
70
70
 
71
- # Dispatcher thread takes stuff from @conn queue and processes
72
- # it...
71
+ # Dispatcher thread takes stuff coming from the irc connection and does
72
+ # something with it...
73
73
 
74
74
  @dispatcher_thread = InOut.new(inq:@conn.queue,outq:@conn.writeq) {|input|
75
75
  str,raw = input
76
- replies = @dispatcher.receive(str)
76
+ event,*args = IRC.parse(str)
77
+ replies = @dispatcher.receive(event,args)
78
+ IRC.to_irc(replies)
77
79
  }
78
80
  @dispatcher_thread.start!
79
81
 
@@ -85,7 +87,7 @@ class BeerBot::RunIRC
85
87
  @scheduler_thread = InOut.new(inq:@scheduler.queue,outq:@conn.writeq) {|cron_job|
86
88
  puts "<< scheduler #{cron_job.inspect}"
87
89
  puts "<< scheduler #{@scheduler.time}"
88
- IRC.to_irc(cron_job.job)
90
+ IRC.to_irc(cron_job.run)
89
91
  }
90
92
  @scheduler_thread.start!
91
93
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: beerbot
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Daniel Bush
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-04-20 00:00:00.000000000 Z
11
+ date: 2014-04-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: pry
@@ -88,20 +88,22 @@ executables:
88
88
  extensions: []
89
89
  extra_rdoc_files: []
90
90
  files:
91
+ - lib/BeerBot/00.utils/utils.rb
92
+ - lib/BeerBot/00.utils/param_expand.rb
93
+ - lib/BeerBot/00.utils/sentence_expand.rb
91
94
  - lib/BeerBot/00.utils/DataFile.rb
92
95
  - lib/BeerBot/00.utils/InOut.rb
93
96
  - lib/BeerBot/00.utils/More.rb
94
- - lib/BeerBot/00.utils/paramExpand.rb
95
- - lib/BeerBot/00.utils/utils.rb
96
- - lib/BeerBot/00.utils/world/IRCWorld.rb
97
97
  - lib/BeerBot/00.utils/world/World.rb
98
+ - lib/BeerBot/00.utils/world/IRCWorld.rb
98
99
  - lib/BeerBot/01.connect/Connection.rb
99
100
  - lib/BeerBot/01.connect/IRCConnection.rb
100
- - lib/BeerBot/01.protocols/botmsg.rb
101
- - lib/BeerBot/01.protocols/irc.rb
102
- - lib/BeerBot/02.bot/bot.rb
103
- - lib/BeerBot/03.more/BotMsgMore.rb
104
- - lib/BeerBot/06.dispatchers/irc.rb
101
+ - lib/BeerBot/01.bot/botmsg.rb
102
+ - lib/BeerBot/01.bot/BotModule.rb
103
+ - lib/BeerBot/01.bot/Bot.rb
104
+ - lib/BeerBot/01.bot/BotMsgMore.rb
105
+ - lib/BeerBot/02.protocols/irc.rb
106
+ - lib/BeerBot/06.dispatchers/dispatcher.rb
105
107
  - lib/BeerBot/70.scheduler/scheduler.rb
106
108
  - lib/BeerBot/Config.rb
107
109
  - lib/BeerBot.rb
@@ -1,59 +0,0 @@
1
- # The files in this directory are part of BeerBot, a a ruby irc bot library.
2
- # Copyright (C) 2013,2014 Daniel Bush
3
- # This program is distributed under the terms of the GNU
4
- # General Public License. A copy of the license should be
5
- # enclosed with this project in the file LICENSE. If not
6
- # see <http://www.gnu.org/licenses/>.
7
-
8
- module BeerBot
9
-
10
- module Protocol
11
-
12
- module BotMsg
13
-
14
- # Convert botmsg to an array of one or more botmsg hashes.
15
- #
16
- # Proc's are executed to retrieve an array or hash.
17
- #
18
- # Array => Array
19
- # Hash => [Hash]
20
- # Proc => [Hash]
21
-
22
- def self.to_a botmsg
23
- case botmsg
24
- when Hash
25
- return [botmsg]
26
- when Array
27
- return botmsg
28
- when Proc
29
- return self.to_a(botmsg.call)
30
- else
31
- return []
32
- end
33
- end
34
-
35
- # Convert botmsg to an action if it starts with '*'.
36
-
37
- def self.actionify botmsg
38
- case botmsg
39
- when Hash
40
- case botmsg[:msg]
41
- when /^\*\s*/
42
- botmsg[:action] = botmsg[:msg].sub(/^\*\s*/,'')
43
- botmsg[:msg] = nil
44
- end
45
- botmsg
46
- when Array
47
- botmsg.map {|b|
48
- self.actionify(b)
49
- }
50
- else
51
- botmsg
52
- end
53
- end
54
-
55
- end
56
-
57
-
58
- end
59
- end