class SlackSmartBot
def dont_understand(rules_file = nil, command = nil, user = nil, dest = nil, answer = ["what?", "huh?", "sorry?", "what do you mean?", "I don't understand"], channel_rules: config.channel, typem: nil)
save_stats(:dont_understand)
command = Thread.current[:command] if command.nil?
user = Thread.current[:user] if user.nil?
dest = Thread.current[:dest] if dest.nil?
rules_file = Thread.current[:rules_file] if rules_file.nil?
typem = Thread.current[:typem] if typem.nil?
if typem==:on_extended
get_bots_created()
end
text = get_help(rules_file, dest, user, typem==:on_extended, true)
ff = text.scan(/^\s*`\s*([^`]+)\s*`\s*$/i).flatten
ff.delete("!THE_COMMAND")
ff.delete("@NAME_OF_BOT THE_COMMAND")
ff.delete("NAME_OF_BOT THE_COMMAND")
ff.delete("@BOT_NAME on #CHANNEL_NAME COMMAND")
ff2 = {}
acommand = command.split(/\s+/)
ff.each do |f|
ff2[f] = ""
af = f.split(/\s+/)
af.each_with_index do |word, i|
if acommand.size >= (i - 1) and word.match?(/[A-Z_\-#@]+/)
ff2[f] += "#{acommand[i]} "
else
ff2[f] += "#{word} "
end
end
ff2[f].rstrip!
end
spell_checker = DidYouMean::SpellChecker.new(dictionary: ff2.values)
res = spell_checker.correct(command).uniq
res_final = []
res.each do |r|
res_final << (ff2.select { |k, v| v == r }).keys
end
res_final.flatten!
if typem==:on_extended
if @extended_from[@channels_name[dest]].size == 1
respond "#{user.profile.display_name}, I don't understand.", dest
end
unless res_final.empty?
respond "Similar rules on : *#{channel_rules}*\n`#{res_final[0..4].join("`\n`")}`", dest
end
else
message = ''
message = "\nTake in consideration when on external calls, not all the commands are available." if typem==:on_call
if res_final.empty?
resp = answer.sample
respond "#{user.profile.display_name}, #{resp}#{message}", dest
else
respond "#{user.profile.display_name}, I don't understand. Maybe you are trying to say:\n`#{res_final[0..4].join("`\n`")}`#{message}", dest
end
end
end
end