content: -- | This module is for throwing dice for e.g. RPGs. (\@dice 3d6+2)
  
  -- Original version copyright Einar Karttunen <ekarttun@cs.helsinki.fi> 2005-04-06.
  -- Massive rewrite circa 2008-10-20 copyright James Cook <mokus@deepbondi.net>
  module Lambdabot.Plugin.Novelty.Dice (dicePlugin) where
  
  import Lambdabot.Plugin
  import Lambdabot.Util
  
  import Data.List
  import Data.Random.Dice (rollEm)
  
  type Dice = ModuleT () LB
  
  dicePlugin :: Module ()
  dicePlugin = newModule
      { moduleCmds = return
          [ (command "dice")
              { aliases = ["roll"]
              , help = say "@dice <expr>. Throw random dice. <expr> is of the form 3d6+2."
              , process = doDice True
              }
          ]
      , contextual = doDice False
      }
  
  doDice :: Bool -> String -> Cmd Dice ()
  doDice printErrs text = do
      user <- showNick =<< getSender
      result <- io (rollEm text)
      case result of
          Left err    -> if printErrs
              then say (trimError err)
              else return ()
          Right str   ->
              say (limitStr 75 (user ++ ": " ++ str))
  
      where
          trimError = concat . intersperse ": " . tail . lines . show
  