Added the cli parser and a config file handler for hsbot-irc.
This commit is contained in:
parent
5cb9f9ccfc
commit
6888950b60
4 changed files with 216 additions and 4 deletions
83
HsbotIrcBot/Main.hs
Normal file
83
HsbotIrcBot/Main.hs
Normal file
|
@ -0,0 +1,83 @@
|
|||
module Main (main) where
|
||||
|
||||
import Control.Monad (when)
|
||||
import Prelude hiding (catch)
|
||||
import System.Console.GetOpt
|
||||
import System.Environment
|
||||
import System.Exit
|
||||
import System.IO
|
||||
|
||||
import Hsbot.Irc.Config
|
||||
|
||||
-- | Main function
|
||||
main :: IO ()
|
||||
main = do
|
||||
args <- getArgs
|
||||
-- Parse options, getting a list of option actions
|
||||
let (actions, nonOptions, errors) = getOpt RequireOrder options args
|
||||
-- Here we thread startOptions through all supplied option actions
|
||||
opts <- case (nonOptions, errors) of
|
||||
([], []) -> foldl (>>=) (return defaultOptions) actions
|
||||
(_, _) -> do
|
||||
hPutStrLn stderr $ concat errors ++ usageInfo header options
|
||||
exitWith $ ExitFailure 1
|
||||
-- From there the initialization code truly begins
|
||||
when (optDebug opts) . putStrLn $ "Got options : " ++ (show opts)
|
||||
-- We find and parse the config file
|
||||
ircConfig <- getIrcConfig $ optConfigFile opts
|
||||
print $ ircConfigChannels ircConfig
|
||||
print $ ircConfigPlugins ircConfig
|
||||
|
||||
-- CLI argument parting stuff {{{
|
||||
-- | CLI options
|
||||
data Options = Options
|
||||
{ optDebug :: Bool
|
||||
, optConfigFile :: Maybe String
|
||||
, optGroup :: Maybe String
|
||||
, optUser :: Maybe String
|
||||
, optVerbose :: Bool
|
||||
} deriving (Show)
|
||||
|
||||
-- | CLI default options
|
||||
defaultOptions :: Options
|
||||
defaultOptions = Options { optDebug = False
|
||||
, optConfigFile = Nothing
|
||||
, optGroup = Nothing
|
||||
, optUser = Nothing
|
||||
, optVerbose = False }
|
||||
|
||||
-- | CLI options logic
|
||||
options :: [ OptDescr (Options -> IO Options) ]
|
||||
options =
|
||||
[ Option "d" ["debug"]
|
||||
(NoArg (\opt -> return opt { optDebug = True, optVerbose = True }))
|
||||
"Enter verbose debug mode and prevents Hsbot from forking in background"
|
||||
, Option "f" ["file"]
|
||||
(ReqArg (\arg opt -> return opt { optConfigFile = return arg }) "<config_file>")
|
||||
"The config file to use"
|
||||
, Option "g" ["group"]
|
||||
(ReqArg (\arg opt -> return opt { optGroup = return arg }) "<group>")
|
||||
"The group hsbot will run as"
|
||||
, Option "h" ["help"]
|
||||
(NoArg (\_ -> do
|
||||
putStrLn $ usageInfo header options
|
||||
exitWith ExitSuccess))
|
||||
"Print this help message"
|
||||
, Option "u" ["user"]
|
||||
(ReqArg (\arg opt -> return opt { optUser = return arg }) "<user>")
|
||||
"The user hsbot will run as"
|
||||
, Option "v" ["verbose"]
|
||||
(NoArg (\opt -> return opt { optVerbose = True }))
|
||||
"Enable verbose messages"
|
||||
, Option "V" ["version"]
|
||||
(NoArg (\_ -> do
|
||||
putStrLn "hsbot-irc version 0.3"
|
||||
exitWith ExitSuccess))
|
||||
"Show version"
|
||||
]
|
||||
|
||||
-- | Usage header
|
||||
header :: String
|
||||
header = "Usage: hsbot-irc [-dhvV] [-f config_file] [-u user] [-g group]"
|
||||
-- }}}
|
||||
|
Reference in a new issue