1 class KarmaPlugin < Plugin
5 # this plugin only wants to store ints!
14 @registry.set_default(0)
16 # import if old file format found
17 if(File.exist?("#{@bot.botclass}/karma.rbot"))
18 log "importing old karma data"
19 IO.foreach("#{@bot.botclass}/karma.rbot") do |line|
20 if(line =~ /^(\S+)<=>([\d-]+)$/)
23 @registry[item] = karma
26 File.delete("#{@bot.botclass}/karma.rbot")
33 max = @registry.values.max
34 min = @registry.values.min
35 best = @registry.to_hash.index(max)
36 worst = @registry.to_hash.index(min)
37 m.reply "#{@registry.length} items. Best: #{best} (#{max}); Worst: #{worst} (#{min})"
43 thing = m.sourcenick unless thing
45 karma = @registry[thing]
47 m.reply "karma for #{thing}: #{@registry[thing]}"
49 m.reply "#{thing} has neutral karma"
54 def help(plugin, topic="")
55 "karma module: Listens to everyone's chat. <thing>++/<thing>-- => increase/decrease karma for <thing>, karma for <thing>? => show karma for <thing>, karmastats => show stats. Karma is a community rating system - only in-channel messages can affect karma and you cannot adjust your own."
58 return unless m.kind_of?(PrivMessage) && m.public?
59 # in channel message, the kind we are interested in
60 if(m.message =~ /(\+\+|--)/)
61 string = m.message.sub(/\W(--|\+\+)(\(.*?\)|[^(++)(\-\-)\s]+)/, "\2\1")
63 while(string.sub!(/(\(.*?\)|[^(++)(\-\-)\s]+)(\+\+|--)/, ""))
69 key.sub!(/^\((.*)\)$/, "\1")
71 next unless(key.length > 0)
72 next if(key.downcase == m.sourcenick.downcase)
75 if key =~ /^#{@bot.nick}$/i
76 @bot.say m.replyto, @bot.lang.get("thanks")
86 plugin = KarmaPlugin.new
87 plugin.map 'karmastats', :action => 'stats'
88 plugin.map 'karma :key', :defaults => {:key => false}
89 plugin.map 'karma for :key'