module Network.Haskbot.Types
(
Token, getToken, setToken
, TeamID, getTeamID, setTeamID
, ChannelID, getChanID, setChanID
, ChannelName, getChanName, getPoundChan, setChanName
, UserID, getUserID, setUserID
, UserName, getUserName, getAtUserName, setUserName
, Command, getCommand, getSlashCom, setCommand
, Channel (..), getAddress
) where
import qualified Data.Text as T
prefixChan, prefixCom, prefixUser :: Char
prefixChan = '#'
prefixCom = '/'
prefixUser = '@'
newtype Token
= Token { getToken :: T.Text
} deriving (Eq, Show)
setToken :: T.Text -> Token
setToken = Token
newtype TeamID
= TeamID { getTeamID :: T.Text
} deriving (Eq, Show)
setTeamID :: T.Text -> TeamID
setTeamID = TeamID
newtype ChannelID
= ChannelID { getChanID :: T.Text
} deriving (Eq, Show)
setChanID :: T.Text -> ChannelID
setChanID = ChannelID
newtype ChannelName
= ChannelName { getChanName :: T.Text
} deriving (Eq, Show)
getPoundChan :: ChannelName -> T.Text
getPoundChan = T.append (T.singleton prefixChan) . getChanName
setChanName :: T.Text -> ChannelName
setChanName = prefixedBy prefixChan ChannelName
newtype UserID
= UserID { getUserID :: T.Text
} deriving (Eq, Show)
setUserID :: T.Text -> UserID
setUserID = UserID
newtype UserName
= UserName { getUserName :: T.Text
} deriving (Eq, Show)
getAtUserName :: UserName -> T.Text
getAtUserName = T.append (T.singleton prefixUser) . getUserName
setUserName :: T.Text -> UserName
setUserName = prefixedBy prefixUser UserName
newtype Command
= Command { getCommand :: T.Text
} deriving (Eq, Show)
getSlashCom :: Command -> T.Text
getSlashCom = T.append (T.singleton prefixCom) . getCommand
setCommand :: T.Text -> Command
setCommand = prefixedBy prefixCom Command
data Channel = DirectMsg !UserName
| Channel !ChannelName
deriving (Eq, Show)
getAddress :: Channel -> T.Text
getAddress (DirectMsg un) = getAtUserName un
getAddress (Channel ch) = getPoundChan ch
prefixedBy :: Char -> (T.Text -> a) -> T.Text -> a
prefixedBy pre f text
| T.head text == pre = f $ T.tail text
| otherwise = f text