\r
def create_match\r
@match = Hash.new\r
+ ar_dest = Array.new\r
ar_in = Array.new\r
ar_out = Array.new\r
ar_both = Array.new\r
@salutations.each { |lang, hash|\r
hash.each { |situation, array|\r
case situation.to_s\r
+ when /^generic-dest$/\r
+ ar_dest += array\r
when /in$/\r
ar_in += array\r
when /out$/\r
Regexp.escape(txt)\r
}.join('|') + ")\\b", Regexp::IGNORECASE) unless ar_both.empty?\r
debug "Matches: #{@match.inspect}"\r
+ @match[:dest] = Regexp.new("\\b(?:" + ar_dest.uniq.map { |txt|\r
+ Regexp.escape(txt)\r
+ }.join('|') + ")\\b", Regexp::IGNORECASE) unless ar_dest.empty?\r
+ @punct = /\s*[.,:!;?]?\s*/ # Punctuation\r
end\r
\r
def listen(m)\r
return unless m.kind_of?(PrivMessage)\r
+ to_me = m.address? || m.message =~ /#{Regexp.escape(@bot.nick)}/i\r
if @bot.config['salut.address_only']\r
- return unless m.address? or m.message =~ /#{Regexp.escape(@bot.nick)}/\r
+ return unless to_me\r
end\r
salut = nil\r
[:both, :in, :out].each { |k|\r
next unless @match[k]\r
debug "Checking salutations #{k} (#{@match[k].inspect})"\r
- if m.message =~ /^#{@match[k]}/\r
+ if m.message =~ @match[k]\r
salut = k\r
break\r
end\r
}\r
return unless salut\r
+ # If the bot wasn't addressed, we continue only the match was exact\r
+ # (apart from space and punctuation) or if @match[:dest] matches too\r
+ return unless to_me or m.message =~ @match[:dest] or m.message =~ /^#{@punct}#{@match[salut]}#{@punct}$/\r
h = Time.new.hour\r
case h\r
when 4...12\r
rep_ar += @salutations[@main_lang].fetch("generic".to_sym, []) unless sfx.empty?\r
debug "Choosing reply in #{rep_ar.inspect} ..."\r
if rep_ar.empty?\r
- if m.public? and (m.address? or m =~ /#{Regexp.escape(@bot.nick)}/)\r
+ if m.public? # and (m.address? or m =~ /#{Regexp.escape(@bot.nick)}/)\r
choice = @bot.lang.get("hello_X") % m.sourcenick\r
else\r
choice = @bot.lang.get("hello") % m.sourcenick\r