X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=data%2Frbot%2Fplugins%2Fkarma.rb;h=2bd5f9f71584cf1026cacab01b330ff0e55e3493;hb=25dce328a87fcf2af9fa0e1c2da7ed30b7def441;hp=eac8d8738845b401d6847647c0e852d3e62359f0;hpb=42dc28f5e07332076ab373981c92847f4e376265;p=user%2Fhenk%2Fcode%2Fruby%2Frbot.git diff --git a/data/rbot/plugins/karma.rb b/data/rbot/plugins/karma.rb index eac8d873..2bd5f9f7 100644 --- a/data/rbot/plugins/karma.rb +++ b/data/rbot/plugins/karma.rb @@ -60,31 +60,42 @@ class KarmaPlugin < Plugin end def listen(m) - return unless m.kind_of?(PrivMessage) && m.public? - # in channel message, the kind we are interested in - if(m.message =~ /(\+\+|--)/) - string = m.message.sub(/\W(--|\+\+)(\(.*?\)|[^(++)(\-\-)\s]+)/, "\2\1") - seen = Hash.new - while(string.sub!(/(\(.*?\)|[^(++)(\-\-)\s]+)(\+\+|--)/, "")) - key = $1 - change = $2 - next if seen[key] - seen[key] = true - - key.sub!(/^\((.*)\)$/, "\1") - key.gsub!(/\s+/, " ") - next unless(key.length > 0) - next if(key.downcase == m.sourcenick.downcase) - if(change == "++") - @registry[key] += 1 - if key =~ /^#{@bot.nick}$/i - @bot.say m.replyto, @bot.lang.get("thanks") + return unless m.kind_of?(PrivMessage) && m.public? && m.message.match(/\+\+|--/) + arg = nil + op = nil + ac = Hash.new + m.message.split.each_with_index do |tok, i| + tok.sub!(/[:,]$/, '') if i == 0 + catch :me_if_you_can do + if m.channel.users[tok].nil? + if (tok =~ /^(?:--)(.*[^-].*)$/) || (tok =~ /^(.*[^-].*)(?:--)$/) + op, arg = '--', $1 + next + elsif (tok =~ /^(?:\+\+)(.*[^+].*)$/)||(tok =~ /^(.*[^+].*)(?:\+\+)$/) + op, arg = '++', $1 + next end - elsif(change == "--") - @registry[key] -= 1 end + + if (tok =~ /^--+$/) || (tok =~ /^\+\++$/) + op = tok.slice(0, 2) + else + arg = tok + end + end # catch + + if op && arg + ac[arg] ||= 0 + ac[arg] += (op == '--' ? -1 : 1) + op = arg = nil end end + + ac.each do |k, v| + next if v == 0 + @registry[k] += (v > 0 ? 1 : -1) + m.reply @bot.lang.get("thanks") if k == @bot.nick && v > 0 + end end end