diff options
author | Matthias Hecker <mail@apoc.cc> | 2020-04-13 20:40:11 +0200 |
---|---|---|
committer | Matthias Hecker <mail@apoc.cc> | 2020-04-13 20:40:11 +0200 |
commit | 90656f4203a0a989b6fb110d4a07598dd186b84c (patch) | |
tree | 9aceacbcbfa1964376e3d1f4b59b1badcbcad971 /data/rbot/plugins | |
parent | f287bf1e73829434d92b46c333c3185373198518 (diff) |
plugin(points): new message parser, see #34
Diffstat (limited to 'data/rbot/plugins')
-rw-r--r-- | data/rbot/plugins/points.rb | 64 |
1 files changed, 25 insertions, 39 deletions
diff --git a/data/rbot/plugins/points.rb b/data/rbot/plugins/points.rb index 34af9b50..976594ee 100644 --- a/data/rbot/plugins/points.rb +++ b/data/rbot/plugins/points.rb @@ -73,49 +73,35 @@ class PointsPlugin < Plugin 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| - # ignore preceeding +/- - if op && arg.nil? - op = nil - end - tok.sub!(/[:,]$/, '') if i == 0 - catch :me_if_you_can do - if m.channel.users[tok].nil? - if tok =~ /^(.*[^-].*)(?:--)$/ - op, arg = '--', $1 - next - elsif tok =~ /^(.*[^+].*)(?:\+\+)$/ - op, arg = '++', $1 - next - end - end + return unless m.public? and m.message.match(/\+\+|--/) - if (tok =~ /^--+$/) || (tok =~ /^\+\++$/) - op = tok.slice(0, 2) - else - arg = tok - end - end # catch + votes = Hash.new { |h,k| h[k] = 0 } # defaulting to zero + m.message.split(' ').each do |token| + # remove any color codes from the token + token = token.gsub(FormattingRx, '') - if op && arg - ac[arg] ||= 0 - ac[arg] += (op == '--' ? -1 : 1) unless arg.downcase == m.sourcenick.downcase - op = arg = nil - end + # each token must end with ++ or -- + next unless token.match(/^(.*)(\+\+|--)$/) + token = $1 # strip ++/-- from token + flag = $2 # remember ++/-- + + # each token must include at least one alphanumerical character + next unless token.match /[[:alnum:]]/ + + # ignore assigning points to oneself + next if token.downcase == m.sourcenick.downcase + + votes[token] += flag == '++' ? 1 : -1 end - ac.each do |k, v| - next if v == 0 or /--|\+\+/.match(k) - # strip invisible formatting characters like bold or color codes - k = k.gsub(FormattingRx, '') - next if k.downcase == m.sourcenick.downcase - @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!" + votes.each do |token, points| + @registry[token] += points + + if token == @bot.nick and points > 0 + m.thanks + end + + m.reply "#{token} now has #{@registry[token]} points!" end end end |