47 lines
1.5 KiB
Ruby
47 lines
1.5 KiB
Ruby
class MetalAdventuresDiscord::DicePlugin
|
||
CUSTOM_PARSER = MetalAdventures::Dice.make_parser(prefix: "!roll ")
|
||
|
||
# https://unicode.org/emoji/charts/full-emoji-list.html
|
||
# EMOJI_ZERO = "\u0030".freeze
|
||
# EMOJI_ZERO = "\uFE0F".freeze
|
||
# EMOJI_ZERO = "\u20E3".freeze
|
||
EMOJI_ZERO = "0️⃣"
|
||
EMOJI_NUMS = Array.new(10) { |i| EMOJI_ZERO.unpack("UUU").tap { |unpacked| unpacked[0] += i }.pack("UUU") }
|
||
|
||
def initialize(bot)
|
||
@bot = bot
|
||
hook_roll!
|
||
end
|
||
|
||
def _error_syntax_embed
|
||
{
|
||
color: 0xFF0000,
|
||
title: "Mauvaise requête: !roll X</Y> <modifiers>",
|
||
description: "- X = nombre de dès,\n- /Y le nombre de succès à attendre,\n- <modifiers> = td, tf, sc, SC, e2f, pmf, plusieurs séparés par des espaces est autorisé",
|
||
}
|
||
end
|
||
|
||
def hook_roll!
|
||
@bot.message(with_text: /^!roll.+/) do |event|
|
||
if (dice = MetalAdventures::Dice.parse(event.message.content, parser: CUSTOM_PARSER))
|
||
dice.roll!
|
||
react_chars = dice.result.to_s.split("")
|
||
response_embed = {
|
||
title: "Rolled #{dice.result} success!",
|
||
description: dice.last_roll.join(' '),
|
||
}
|
||
if dice.description
|
||
response_embed[:footer] = { text: "Rolled for: #{dice.description}" }
|
||
end
|
||
|
||
event.message.reply! "", embed: response_embed
|
||
if react_chars.uniq.size == react_chars.size
|
||
react_chars.each { event.message.react EMOJI_NUMS[_1.to_i] }
|
||
end
|
||
else
|
||
event.message.reply! "", embed: _error_syntax_embed
|
||
end
|
||
end
|
||
end
|
||
end
|