#!/bin/bash
# -*- coding: utf-8 -*-
###########################################################################
# #
# envbot - an IRC bot in bash #
# Copyright (C) 2007-2008 Arvid Norlander #
# Copyright (C) 2007-2008 Vsevolod Kozlov #
# #
# This program is free software: you can redistribute it and/or modify #
# it under the terms of the GNU General Public License as published by #
# the Free Software Foundation, either version 3 of the License, or #
# (at your option) any later version. #
# #
# This program is distributed in the hope that it will be useful, #
# but WITHOUT ANY WARRANTY; without even the implied warranty of #
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
# GNU General Public License for more details. #
# #
# You should have received a copy of the GNU General Public License #
# along with this program. If not, see . #
# #
###########################################################################
#---------------------------------------------------------------------
## Rolls dies.
#---------------------------------------------------------------------
module_dice_INIT() {
modinit_API='2'
modinit_HOOKS=''
commands_register "$1" 'roll' || return 1
helpentry_module_dice_description="Rolls dies for you."
helpentry_dice_roll_syntax="d"
helpentry_dice_roll_description="Rolls dies, each sides."
}
module_dice_UNLOAD() {
return 0
}
module_dice_REHASH() {
return 0
}
module_dice_handler_roll() {
local sender="$1"
local parameters="$3"
if [[ $parameters =~ ^([0-9]+)d([0-9]+)$ ]]; then
local how_much_times="${BASH_REMATCH[1]}"
local how_many_sides="${BASH_REMATCH[2]}"
local target=
if [[ $2 =~ ^# ]]; then
target="$2"
else
parse_hostmask_nick "$sender" 'target'
fi
local insane=0
# Chech if number of dies and sides are sane.
if (( ($how_many_sides < 2 || $how_many_sides > 100)
|| ($how_much_times < 1 || $how_much_times > 100) )); then
log_warning "Tried to roll $how_much_times dies $how_many_sides sides each!"
log_warning "This is above the allowed maximum or below the allowed minimum, and was aborted."
send_msg "$target" "You can't roll that."
return 0
fi
# Roll $how_much_times dies, each with $how_many_sides sides.
local result=""
local total=0
for (( i=0; $i < $how_much_times; i+=1 )); do
local rolled=$(( ($RANDOM % $how_many_sides) + 1 ))
result+="$rolled, "
((total += $rolled))
done
result=${result%, }
if [[ $how_much_times != 1 ]]; then
result+=" with the grand total of $total"
fi
send_msg "$target" "You rolled ${result}."
else
local sendernick
parse_hostmask_nick "$sender" 'sendernick'
feedback_bad_syntax "$sendernick" "roll" "d"
fi
}