X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=lib%2Frbot%2Fmessagemapper.rb;h=b6125538b49b1ba24be54ead551c42b9511181f6;hb=81e0b9c7405c3731f6df1e50f6b32a35c224dfa7;hp=87bdd01f6e7150b2630848ce98cc6bca0eec111a;hpb=157c81d67d2252ab1650d7acf5c3daf067d4356a;p=user%2Fhenk%2Fcode%2Fruby%2Frbot.git diff --git a/lib/rbot/messagemapper.rb b/lib/rbot/messagemapper.rb index 87bdd01f..b6125538 100644 --- a/lib/rbot/messagemapper.rb +++ b/lib/rbot/messagemapper.rb @@ -13,7 +13,22 @@ class Regexp new = self.source.gsub(/(^|[^\\])((?:\\\\)*)\(([^?])/) { "%s%s(?:%s" % [$1, $2, $3] } - Regexp.new(new) + Regexp.new(new, self.options) + end + + # We may want to remove head and tail anchors + def remove_head_tail + new = self.source.sub(/^\^/,'').sub(/\$$/,'') + Regexp.new(new, self.options) + end + + # The MessageMapper cleanup method: does both remove_capture + # and remove_head_tail + def mm_cleanup + new = self.source.gsub(/(^|[^\\])((?:\\\\)*)\(([^?])/) { + "%s%s(?:%s" % [$1, $2, $3] + }.sub(/^\^/,'').sub(/\$$/,'') + Regexp.new(new, self.options) end end @@ -192,7 +207,7 @@ class Bot debug "checking auth for #{auth}" if m.bot.auth.allow?(auth, m.source, m.replyto) debug "template match found and auth'd: #{action.inspect} #{options.inspect}" - if tmpl.options[:thread] || tmpl.options[:threaded] + if !m.in_thread && (tmpl.options[:thread] || tmpl.options[:threaded]) Thread.new do begin @parent.send(action, m, options) @@ -484,13 +499,13 @@ class Bot sub = is_single ? "\\S+" : ".*?" when Regexp # Remove captures and the ^ and $ that are sometimes placed in requirement regexps - sub = has_req.remove_captures.source.sub(/^\^/,'').sub(/\$$/,'') + sub = has_req.mm_cleanup when String sub = Regexp.escape(has_req) when Array - sub = has_req[0].remove_captures.source.sub(/^\^/,'').sub(/\$$/,'') + sub = has_req[0].mm_cleanup when Hash - sub = has_req[:regexp].remove_captures.source.sub(/^\^/,'').sub(/\$$/,'') + sub = has_req[:regexp].mm_cleanup else warning "Odd requirement #{has_req.inspect} of class #{has_req.class} for parameter '#{name}'" sub = Regexp.escape(has_req.to_s) rescue "\\S+" @@ -504,7 +519,8 @@ class Bot # debug "Delimited optionals: #{rx.inspect}" rx.gsub!(/(?:\\ )+/, "\\s+") # debug "Corrected spaces: #{rx.inspect}" - @regexp = Regexp.new("^#{rx}$") + # Created message (such as by fake_message) can contain multiple lines + @regexp = /\A#{rx}\z/m end # Recognize the provided string components, returning a hash of