beerbot 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
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