{-# LANGUAGE OverloadedStrings #-} module IrcBot.MessageParser where import Data.List import Data.Maybe import IrcBot.RandomFileFinder import IrcBot.RemoteUploader getNthElementFromString :: String -> Int -> Char getNthElementFromString stringData step = stringData !! step slice :: Int -> Int -> String -> String slice start end = take (end-start-1) . drop (start+1) parseMessageMeta :: String -> String parseMessageMeta messageMeta = do let startEndIndexes = elemIndices ':' messageMeta if length startEndIndexes >= 2 then do let startIndex = startEndIndexes !! 0 let endIndex = startEndIndexes !! 1 slice (startIndex) (endIndex) messageMeta else "" parseMessageTargetFromMeta :: [String] -> String parseMessageTargetFromMeta messageMetaArray = do if (length messageMetaArray) >= 3 then messageMetaArray !! 2 else "" -- :YOUR_NICK!~YOUR_NICK@YOUR_IP PRIVMSG #91623_my_test_channel :TEXT MESSAGE parseMessageType :: [String] -> String parseMessageType messageMetaArray = do if(length messageMetaArray) >= 3 then messageMetaArray !! 1 else "" targetDeterminer :: String -> String -> String targetDeterminer nickName channelName = do if (length channelName) > 1 then channelName else nickName parseNick :: String -> String parseNick dataString = do let startIndex = elemIndex ':' dataString let endIndex = elemIndex '!' dataString if startIndex /= Nothing && endIndex /= Nothing then slice (fromJust startIndex) (fromJust endIndex) dataString else "" parseChannelName :: String -> String parseChannelName dataString = do let startIndex = elemIndex '#' dataString let dropppedString = drop (fromJust startIndex) dataString let endIndex = elemIndex ' ' dropppedString if startIndex /= Nothing && endIndex /= Nothing then take (fromJust endIndex) dropppedString else "" parseMessageText :: String -> String parseMessageText dataString = do (drop 1 (unwords (drop 3 (words dataString)))) basicRandomImplementation :: String -> IO String basicRandomImplementation basicInput = do let parameters = (words basicInput) print ".random parameters: " print parameters if length parameters > 1 then do let directoryName = parameters !! 1 getRandomFile directoryName >>= \randomFileName -> uploadLocalFile randomFileName else getRandomFile "maidos" >>= \randomFileName -> uploadLocalFile randomFileName