class Roll
Constants
- DEFAULT_COUNT
- DEFAULT_SIDES
- MAX_COUNT
- MAX_SIDES
- MIN_SIDES
Public Class Methods
Source
# File plugins/roll.rb, line 12 def self.command_pattern /roll(?: (\d+)(?: (\d+))?)?$/i end
Source
# File plugins/roll.rb, line 46 def self.format_roll(results) return results.first.to_s if results.length == 1 "#{results.join(', ')} (#{results.sum})" end
Source
# File plugins/roll.rb, line 28 def self.parse_args(count_str, sides_str) count = count_str.nil? ? DEFAULT_COUNT : count_str.to_i sides = sides_str.nil? ? DEFAULT_SIDES : sides_str.to_i return { error: usage_message } if count < 1 || count > MAX_COUNT return { error: usage_message } if sides < MIN_SIDES || sides > MAX_SIDES { count: count, sides: sides } end
Source
# File plugins/roll.rb, line 52 def self.roll(count_str = nil, sides_str = nil, rand: ->(max) { Random.rand(1..max) }) parsed = parse_args(count_str, sides_str) return parsed[:error] if parsed[:error] results = roll_dice(parsed[:count], parsed[:sides], rand: rand) format_roll(results) end
Source
# File plugins/roll.rb, line 42 def self.roll_dice(count, sides, rand: ->(max) { Random.rand(1..max) }) Array.new(count) { roll_value(sides, rand: rand) } end
Source
# File plugins/roll.rb, line 38 def self.roll_value(sides, rand: ->(max) { Random.rand(1..max) }) rand.call(sides) end
Source
# File plugins/roll.rb, line 24 def self.usage_message "Usage: !roll [count] [sides] — e.g. !roll, !roll 3, !roll 3 12" end
Public Instance Methods
Source
# File plugins/roll.rb, line 64 def execute(m, count_str = nil, sides_str = nil) flood_safe_reply(m, roll(count_str, sides_str)) end
Source
# File plugins/roll.rb, line 60 def roll(count_str = nil, sides_str = nil, **options) self.class.roll(count_str, sides_str, **options) end