From ff07633fb8f81577ffec409cbf0a3c7361990f6c Mon Sep 17 00:00:00 2001 From: Julien Dessaux Date: Wed, 13 Apr 2011 20:15:55 +0200 Subject: Began a big refactoring/rewriting (again) --- HsbotIrcBot/Hsbot/Irc/Config.hs | 134 ---------------------------------------- 1 file changed, 134 deletions(-) delete mode 100644 HsbotIrcBot/Hsbot/Irc/Config.hs (limited to 'HsbotIrcBot/Hsbot/Irc/Config.hs') diff --git a/HsbotIrcBot/Hsbot/Irc/Config.hs b/HsbotIrcBot/Hsbot/Irc/Config.hs deleted file mode 100644 index 186f139..0000000 --- a/HsbotIrcBot/Hsbot/Irc/Config.hs +++ /dev/null @@ -1,134 +0,0 @@ -module Hsbot.Irc.Config - ( IrcConfig(..) - , ircDefaultConfig - , getIrcConfig - ) where - -import Control.Monad.Error -import Data.Char (isDigit) -import qualified Data.ConfigFile as C -import Data.Either.Utils -import Network -import System.Exit -import System.Posix.Files - --- | Configuration data type -data IrcConfig = IrcConfig - { ircConfigAddress :: String -- the server's address - , ircConfigPort :: PortID -- the server's port - , ircConfigChannels :: [String] -- the Channels to join on start - , ircConfigNickname :: String -- the hsbot's nickname - , ircConfigPassword :: String -- the hsbot's password, optional - , ircConfigRealname :: String -- the hsbot's real name, optional - , ircConfigCommandPrefix :: Char -- the prefix the ircbot will recognize as commands - , ircConfigPlugins :: [String] -- the ircPlugins to load - } - -instance Show IrcConfig where - show (IrcConfig address port channels nickname password realname commandPrefix plugins) = unlines $ - concat [ "Address: ", address ] : - concat [ "Port: ", case port of - PortNumber num -> show num - Service s -> show s - UnixSocket u -> show u ] : - concat [ "Channels: ", show channels ] : - concat [ "Nickname: ", nickname ] : - concat [ "Password: ", password ] : - concat [ "Realname: ", realname ] : - concat [ "CommandPrefix: ", show commandPrefix ] : - [ "Plugins: ", show plugins ] - --- | User configuration -ircDefaultConfig :: IrcConfig -ircDefaultConfig = IrcConfig - { ircConfigAddress = "localhost" - , ircConfigPort = PortNumber 6667 - , ircConfigChannels = ["#hsbot"] - , ircConfigNickname = "hsbot" - , ircConfigPassword = "" - , ircConfigRealname = "The One True bot, with it's haskell soul." - , ircConfigCommandPrefix = '@' - , ircConfigPlugins = ["Ping", "Core"] - } - --- | config file retrieving -getIrcConfig :: Maybe String -> IO (IrcConfig) -getIrcConfig maybePath = - case maybePath of - Just path -> do - doesFileExists <- fileExist path - case doesFileExists of - True -> do - fileStatus <- getFileStatus path - case isRegularFile $ fileStatus of - True -> getConfigFromFile path - False -> do - putStrLn "Invalid configuration file path." - exitWith $ ExitFailure 1 - False -> do - putStrLn "The specified configuration file does not exists." - exitWith $ ExitFailure 1 - Nothing -> return ircDefaultConfig -- TODO : try defaults like $HOME/.hsbotrc, /etc/hsbotrc or /usr/local/etc/hsbotrc - --- | Get configuration from config file -getConfigFromFile :: FilePath -> IO IrcConfig -getConfigFromFile fname = readfile C.emptyCP fname >>= extractConfig . forceEither - --- | A version of readfile that treats the file as UTF-8 -readfile :: MonadError C.CPError m => C.ConfigParser -> FilePath -> IO (m C.ConfigParser) -readfile cp path' = do - contents <- readFile path' - return $ C.readstring cp contents - --- | config file processing -extractConfig :: C.ConfigParser -> IO IrcConfig -extractConfig cp = do - config' <- runErrorT $ do - cfAddress <- getit "address" - cfPort <- getit "port" - cfChannels <- getit "channels" - cfNickname <- getit "nickname" - cfPassword <- getit "password" - cfRealname <- getit "realname" - cfCommandPrefix <- getit "commandprefix" - cfPlugins <- getit "plugins" - return $! IrcConfig { - ircConfigAddress = cfAddress - , ircConfigPort = PortNumber . fromIntegral $ readInteger "port" cfPort - , ircConfigChannels = splitCommaList cfChannels - , ircConfigNickname = cfNickname - , ircConfigPassword = cfPassword - , ircConfigRealname = cfRealname - , ircConfigCommandPrefix = readChar "commandprefix" cfCommandPrefix - , ircConfigPlugins = splitCommaList cfPlugins } - case config' of - Left (C.ParseError e, e') -> error $ "Parse error: " ++ e ++ "\n" ++ e' - Left e -> error (show e) - Right c -> return c - where - getit = C.get cp "IRC" - -readChar :: String -> String -> Char -readChar _ x | length x == 1 = head x -readChar opt _ = error $ opt ++ " must be one character long." - -readInteger :: String -> String -> Int -readInteger _ x | all isDigit x = read x ::Int -readInteger opt _ = error $ opt ++ " must be an integer." - --- readNumber :: (Num a, Read a) => String -> String -> a --- readNumber _ x | all isDigit x = read x --- readNumber opt _ = error $ opt ++ " must be a number." - -splitCommaList :: String -> [String] -splitCommaList l = - let (first, rest) = break (== ',') l - first' = lrStrip first - in case rest of - [] -> if null first' then [] else [first'] - (_:rs) -> first' : splitCommaList rs - -lrStrip :: String -> String -lrStrip = reverse . dropWhile isWhitespace . reverse . dropWhile isWhitespace - where isWhitespace = (`elem` " \t\n") - -- cgit v1.2.3