X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=data%2Frbot%2Fplugins%2Fkarma.rb;h=060e743ec9687bd02406f9b6220f8fec97eeb189;hb=16336b4a240a4265d1f2df1e30d7b68d3a924287;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..060e743e 100644 --- a/data/rbot/plugins/karma.rb +++ b/data/rbot/plugins/karma.rb @@ -14,16 +14,17 @@ class KarmaPlugin < Plugin @registry.set_default(0) # import if old file format found - if(File.exist?("#{@bot.botclass}/karma.rbot")) + oldkarma = @bot.path 'karma.rbot' + if File.exist? oldkarma log "importing old karma data" - IO.foreach("#{@bot.botclass}/karma.rbot") do |line| + IO.foreach(oldkarma) do |line| if(line =~ /^(\S+)<=>([\d-]+)$/) item = $1 karma = $2.to_i @registry[item] = karma end end - File.delete("#{@bot.botclass}/karma.rbot") + File.delete oldkarma end end @@ -54,37 +55,48 @@ class KarmaPlugin < Plugin @registry[thing] = params[:val].to_i karma(m, params) end - + def help(plugin, topic="") "karma module: Listens to everyone's chat. ++/-- => increase/decrease karma for , karma for ? => show karma for , karmastats => show stats. Karma is a community rating system - only in-channel messages can affect karma and you cannot adjust your own." 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") + def message(m) + return unless 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