From 2700d5d2817671329261b22f8edc3a27b1f52595 Mon Sep 17 00:00:00 2001 From: Eric Sorenson Date: Tue, 15 Dec 2015 14:44:51 -0800 Subject: Renames the 'karma' plugin to a 'points' system Prior to this commit, rbot used a "karma" system for keeping track of user points. This phrasing, while widespread, is unnecessarily appropriationist. This commit renames the plugin to a more neutral "points" system, accomplishing exactly the same goal without using culturally problematic language. For more background please read: http://bit.ly/1MfLmce --- data/rbot/plugins/excuse.rb | 2 +- data/rbot/plugins/karma.rb | 110 -------------------------------------------- data/rbot/plugins/points.rb | 110 ++++++++++++++++++++++++++++++++++++++++++++ lib/rbot/messagemapper.rb | 12 ++--- lib/rbot/plugins.rb | 22 ++++----- po/en/rbot-karma.po | 0 po/en/rbot-points.po | 0 po/fi/rbot-karma.po | 0 po/fi/rbot-points.po | 0 po/fr/rbot-karma.po | 0 po/fr/rbot-points.po | 0 po/it/rbot-karma.po | 0 po/it/rbot-points.po | 0 po/ja/rbot-karma.po | 0 po/ja/rbot-points.po | 0 po/rbot-karma.pot | 0 po/rbot-points.pot | 0 po/zh_CN/rbot-karma.po | 0 po/zh_CN/rbot-points.po | 0 po/zh_TW/rbot-karma.po | 0 po/zh_TW/rbot-points.po | 0 21 files changed, 128 insertions(+), 128 deletions(-) delete mode 100644 data/rbot/plugins/karma.rb create mode 100644 data/rbot/plugins/points.rb delete mode 100644 po/en/rbot-karma.po create mode 100644 po/en/rbot-points.po delete mode 100644 po/fi/rbot-karma.po create mode 100644 po/fi/rbot-points.po delete mode 100644 po/fr/rbot-karma.po create mode 100644 po/fr/rbot-points.po delete mode 100644 po/it/rbot-karma.po create mode 100644 po/it/rbot-points.po delete mode 100644 po/ja/rbot-karma.po create mode 100644 po/ja/rbot-points.po delete mode 100644 po/rbot-karma.pot create mode 100644 po/rbot-points.pot delete mode 100644 po/zh_CN/rbot-karma.po create mode 100644 po/zh_CN/rbot-points.po delete mode 100644 po/zh_TW/rbot-karma.po create mode 100644 po/zh_TW/rbot-points.po diff --git a/data/rbot/plugins/excuse.rb b/data/rbot/plugins/excuse.rb index ad0e8334..61f38bd6 100644 --- a/data/rbot/plugins/excuse.rb +++ b/data/rbot/plugins/excuse.rb @@ -387,7 +387,7 @@ class ExcusePlugin < Plugin "Dyslexics retyping hosts file on servers", "The Internet is being scanned for viruses.", "Your computer's union contract is set to expire at midnight.", -"Bad user karma.", +"Bad reputation.", "/dev/clue was linked to /dev/null", "Increased sunspot activity.", "We already sent around a notice about that.", diff --git a/data/rbot/plugins/karma.rb b/data/rbot/plugins/karma.rb deleted file mode 100644 index 93d21189..00000000 --- a/data/rbot/plugins/karma.rb +++ /dev/null @@ -1,110 +0,0 @@ -class KarmaPlugin < Plugin - def initialize - super - - # this plugin only wants to store ints! - class << @registry - def store(val) - val.to_i - end - def restore(val) - val.to_i - end - end - @registry.set_default(0) - - # import if old file format found - oldkarma = @bot.path 'karma.rbot' - if File.exist? oldkarma - log "importing old karma data" - IO.foreach(oldkarma) do |line| - if(line =~ /^(\S+)<=>([\d-]+)$/) - item = $1 - karma = $2.to_i - @registry[item] = karma - end - end - File.delete oldkarma - end - end - - def stats(m, params) - if (@registry.length) - max = @registry.values.max - min = @registry.values.min - best = @registry.to_hash.index(max) - worst = @registry.to_hash.index(min) - m.reply "#{@registry.length} items. Best: #{best} (#{max}); Worst: #{worst} (#{min})" - end - end - - def karma(m, params) - thing = params[:key] - thing = m.sourcenick unless thing - thing = thing.to_s - karma = @registry[thing] - if(karma != 0) - m.reply "karma for #{thing}: #{@registry[thing]}" - else - m.reply "#{thing} has neutral karma" - end - end - - def setkarma(m, params) - thing = (params[:key] || m.sourcenick).to_s - @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 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 - 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) unless arg.downcase == m.sourcenick.downcase - 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 - -plugin = KarmaPlugin.new - -plugin.default_auth( 'edit', false ) - -plugin.map 'karmastats', :action => 'stats' -plugin.map 'karma :key', :defaults => {:key => false} -plugin.map 'setkarma :key :val', :defaults => {:key => false}, :requirements => {:val => /^-?\d+$/}, :auth_path => 'edit::set!' -plugin.map 'karma for :key' diff --git a/data/rbot/plugins/points.rb b/data/rbot/plugins/points.rb new file mode 100644 index 00000000..1a1464e5 --- /dev/null +++ b/data/rbot/plugins/points.rb @@ -0,0 +1,110 @@ +class PointsPlugin < Plugin + def initialize + super + + # this plugin only wants to store ints! + class << @registry + def store(val) + val.to_i + end + def restore(val) + val.to_i + end + end + @registry.set_default(0) + + # import if old file format found + oldpoints = @bot.path 'points.rbot' + if File.exist? oldpoints + log "importing old points data" + IO.foreach(oldpoints) do |line| + if(line =~ /^(\S+)<=>([\d-]+)$/) + item = $1 + points = $2.to_i + @registry[item] = points + end + end + File.delete oldpoints + end + end + + def stats(m, params) + if (@registry.length) + max = @registry.values.max + min = @registry.values.min + best = @registry.to_hash.index(max) + worst = @registry.to_hash.index(min) + m.reply "#{@registry.length} items. Best: #{best} (#{max}); Worst: #{worst} (#{min})" + end + end + + def points(m, params) + thing = params[:key] + thing = m.sourcenick unless thing + thing = thing.to_s + points = @registry[thing] + if(points != 0) + m.reply "points for #{thing}: #{@registry[thing]}" + else + m.reply "#{thing} has zero points" + end + end + + def setpoints(m, params) + thing = (params[:key] || m.sourcenick).to_s + @registry[thing] = params[:val].to_i + points(m, params) + end + + def help(plugin, topic="") + "points module: Keeps track of internet points, infusing your pointless life with meaning. Listens to everyone's chat. ++/-- => increase/decrease points for , points for ? => show points for , pointstats => show stats. Points are a community rating system - only in-channel messages can affect points and you cannot adjust your own." + end + + 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 + 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) unless arg.downcase == m.sourcenick.downcase + 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 + +plugin = PointsPlugin.new + +plugin.default_auth( 'edit', false ) + +plugin.map 'pointstats', :action => 'stats' +plugin.map 'points :key', :defaults => {:key => false} +plugin.map 'setpoints :key :val', :defaults => {:key => false}, :requirements => {:val => /^-?\d+$/}, :auth_path => 'edit::set!' +plugin.map 'points for :key' diff --git a/lib/rbot/messagemapper.rb b/lib/rbot/messagemapper.rb index 3e877626..3966bc17 100644 --- a/lib/rbot/messagemapper.rb +++ b/lib/rbot/messagemapper.rb @@ -199,12 +199,12 @@ class Bot # # Further examples: # - # # match 'karmastats' and call my stats() method - # plugin.map 'karmastats', :action => 'stats' - # # match 'karma' with an optional 'key' and call my karma() method - # plugin.map 'karma :key', :defaults => {:key => false} - # # match 'karma for something' and call my karma() method - # plugin.map 'karma for :key' + # # match 'pointstats' and call my stats() method + # plugin.map 'pointstats', :action => 'stats' + # # match 'points' with an optional 'key' and call my points() method + # plugin.map 'points :key', :defaults => {:key => false} + # # match 'points for something' and call my points() method + # plugin.map 'points for :key' # # # two matches, one for public messages in a channel, one for # # private messages which therefore require a channel argument diff --git a/lib/rbot/plugins.rb b/lib/rbot/plugins.rb index e40cfcc4..0e7e9d6f 100644 --- a/lib/rbot/plugins.rb +++ b/lib/rbot/plugins.rb @@ -38,36 +38,36 @@ module Plugins Examples: - plugin.map 'karmastats', :action => 'karma_stats' + plugin.map 'pointstats', :action => 'point_stats' # while in the plugin... - def karma_stats(m, params) + def point_stats(m, params) m.reply "..." end # the default action is the first component - plugin.map 'karma' + plugin.map 'points' # attributes can be pulled out of the match string - plugin.map 'karma for :key' - plugin.map 'karma :key' + plugin.map 'points for :key' + plugin.map 'points :key' # while in the plugin... - def karma(m, params) + def points(m, params) item = params[:key] - m.reply 'karma for #{item}' + m.reply 'points for #{item}' end # you can setup defaults, to make parameters optional - plugin.map 'karma :key', :defaults => {:key => 'defaultvalue'} + plugin.map 'points :key', :defaults => {:key => 'defaultvalue'} # the default auth check is also against the first component # but that can be changed - plugin.map 'karmastats', :auth => 'karma' + plugin.map 'pointstats', :auth => 'points' # maps can be restricted to public or private message: - plugin.map 'karmastats', :private => false - plugin.map 'karmastats', :public => false + plugin.map 'pointstats', :private => false + plugin.map 'pointstats', :public => false See MessageMapper#map for more information on the template format and the allowed options. diff --git a/po/en/rbot-karma.po b/po/en/rbot-karma.po deleted file mode 100644 index e69de29b..00000000 diff --git a/po/en/rbot-points.po b/po/en/rbot-points.po new file mode 100644 index 00000000..e69de29b diff --git a/po/fi/rbot-karma.po b/po/fi/rbot-karma.po deleted file mode 100644 index e69de29b..00000000 diff --git a/po/fi/rbot-points.po b/po/fi/rbot-points.po new file mode 100644 index 00000000..e69de29b diff --git a/po/fr/rbot-karma.po b/po/fr/rbot-karma.po deleted file mode 100644 index e69de29b..00000000 diff --git a/po/fr/rbot-points.po b/po/fr/rbot-points.po new file mode 100644 index 00000000..e69de29b diff --git a/po/it/rbot-karma.po b/po/it/rbot-karma.po deleted file mode 100644 index e69de29b..00000000 diff --git a/po/it/rbot-points.po b/po/it/rbot-points.po new file mode 100644 index 00000000..e69de29b diff --git a/po/ja/rbot-karma.po b/po/ja/rbot-karma.po deleted file mode 100644 index e69de29b..00000000 diff --git a/po/ja/rbot-points.po b/po/ja/rbot-points.po new file mode 100644 index 00000000..e69de29b diff --git a/po/rbot-karma.pot b/po/rbot-karma.pot deleted file mode 100644 index e69de29b..00000000 diff --git a/po/rbot-points.pot b/po/rbot-points.pot new file mode 100644 index 00000000..e69de29b diff --git a/po/zh_CN/rbot-karma.po b/po/zh_CN/rbot-karma.po deleted file mode 100644 index e69de29b..00000000 diff --git a/po/zh_CN/rbot-points.po b/po/zh_CN/rbot-points.po new file mode 100644 index 00000000..e69de29b diff --git a/po/zh_TW/rbot-karma.po b/po/zh_TW/rbot-karma.po deleted file mode 100644 index e69de29b..00000000 diff --git a/po/zh_TW/rbot-points.po b/po/zh_TW/rbot-points.po new file mode 100644 index 00000000..e69de29b -- cgit v1.2.3 From bc7efe2d4b360da0276287e6cc7f6a401609c162 Mon Sep 17 00:00:00 2001 From: Eric Sorenson Date: Tue, 15 Dec 2015 16:32:45 -0800 Subject: Improvements to the points plugin This commit makes a couple of improvements the points plugin: - added a 'pointsdump' command to show everything in the registry, not just the best and worst - fixed Hash#index deprecation warnings under ruby >1.9 - made nicer messages when displaying stats on an empty registry --- data/rbot/plugins/points.rb | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/data/rbot/plugins/points.rb b/data/rbot/plugins/points.rb index 1a1464e5..21157f3d 100644 --- a/data/rbot/plugins/points.rb +++ b/data/rbot/plugins/points.rb @@ -30,14 +30,26 @@ class PointsPlugin < Plugin def stats(m, params) if (@registry.length) - max = @registry.values.max - min = @registry.values.min - best = @registry.to_hash.index(max) - worst = @registry.to_hash.index(min) + max = @registry.values.max || "zero" + min = @registry.values.min || "zero" + best = @registry.to_hash.key(max) || "nobody" + worst = @registry.to_hash.key(min) || "nobody" m.reply "#{@registry.length} items. Best: #{best} (#{max}); Worst: #{worst} (#{min})" end end + def dump(m, params) + if (@registry.length) + msg = "Points dump: " + msg << @registry.to_hash.sort_by { |k, v| v }.reverse. + map { |k,v| "#{k}: #{v}" }. + join(", ") + m.reply msg + else + m.reply "nobody has any points yet!" + end + end + def points(m, params) thing = params[:key] thing = m.sourcenick unless thing @@ -57,7 +69,7 @@ class PointsPlugin < Plugin end def help(plugin, topic="") - "points module: Keeps track of internet points, infusing your pointless life with meaning. Listens to everyone's chat. ++/-- => increase/decrease points for , points for ? => show points for , pointstats => show stats. Points are a community rating system - only in-channel messages can affect points and you cannot adjust your own." + "points module: Keeps track of internet points, infusing your pointless life with meaning. Listens to everyone's chat. ++/-- => increase/decrease points for , points for ? => show points for , pointstats => show best/worst, pointsdump => show everyone's points. Points are a community rating system - only in-channel messages can affect points and you cannot adjust your own." end def message(m) @@ -96,6 +108,7 @@ class PointsPlugin < Plugin next if v == 0 @registry[k] += (v > 0 ? 1 : -1) m.reply @bot.lang.get("thanks") if k == @bot.nick && v > 0 + m.reply "#{k} now has #{@registry[k]} points!" end end end @@ -108,3 +121,4 @@ plugin.map 'pointstats', :action => 'stats' plugin.map 'points :key', :defaults => {:key => false} plugin.map 'setpoints :key :val', :defaults => {:key => false}, :requirements => {:val => /^-?\d+$/}, :auth_path => 'edit::set!' plugin.map 'points for :key' +plugin.map 'pointsdump', :action => 'dump' -- cgit v1.2.3