-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/


-- | Bindings for the Slack web API
--   
--   Haskell bindings for the Slack web API.
@package slack-web
@version 0.2.0.4


-- | See <a>https://api.slack.com/docs/message-formatting</a>
module Web.Slack.MessageParser

-- | Convert the slack format for messages (markdown like, see
--   <a>https://api.slack.com/docs/message-formatting</a> ) to HTML.
messageToHtml :: HtmlRenderers -> (UserId -> Text) -> SlackMessageText -> Text
data HtmlRenderers
HtmlRenderers :: (Text -> Text) -> HtmlRenderers
[emoticonRenderer] :: HtmlRenderers -> Text -> Text
defaultHtmlRenderers :: HtmlRenderers
instance GHC.Classes.Eq Web.Slack.MessageParser.SlackMsgItem
instance GHC.Show.Show Web.Slack.MessageParser.SlackMsgItem
instance GHC.Classes.Eq Web.Slack.MessageParser.SlackUrl
instance GHC.Show.Show Web.Slack.MessageParser.SlackUrl


module Web.Slack.Common
data Color
data UserId
data SlackTimestamp
SlackTimestamp :: Text -> UTCTime -> SlackTimestamp
[slackTimestampTs] :: SlackTimestamp -> Text
[slackTimestampTime] :: SlackTimestamp -> UTCTime
mkSlackTimestamp :: UTCTime -> SlackTimestamp
data HistoryReq
HistoryReq :: Text -> Int -> Maybe SlackTimestamp -> Maybe SlackTimestamp -> Bool -> HistoryReq
[historyReqChannel] :: HistoryReq -> Text
[historyReqCount] :: HistoryReq -> Int
[historyReqLatest] :: HistoryReq -> Maybe SlackTimestamp
[historyReqOldest] :: HistoryReq -> Maybe SlackTimestamp
[historyReqInclusive] :: HistoryReq -> Bool
mkHistoryReq :: Text -> HistoryReq
data HistoryRsp
HistoryRsp :: [Message] -> Bool -> HistoryRsp
[historyRspMessages] :: HistoryRsp -> [Message]
[historyRspHasMore] :: HistoryRsp -> Bool
data Message
Message :: MessageType -> Maybe UserId -> SlackMessageText -> SlackTimestamp -> Message
[messageType] :: Message -> MessageType

-- | not present for bot messages at least
[messageUser] :: Message -> Maybe UserId

-- | the message text is in a markdown-like slack-specific format. Use
--   <a>messageToHtml</a> to convert it to HTML.
[messageText] :: Message -> SlackMessageText
[messageTs] :: Message -> SlackTimestamp
data MessageType
MessageTypeMessage :: MessageType

-- | Errors that can be triggered by a slack request.
data SlackClientError

-- | errors from the network connection
ServantError :: ServantError -> SlackClientError

-- | errors returned by the slack API
SlackError :: Text -> SlackClientError

-- | Message text in the format returned by Slack, see
--   <a>https://api.slack.com/docs/message-formatting</a> Consider using
--   <tt>messageToHtml</tt> for displaying.
newtype SlackMessageText
SlackMessageText :: Text -> SlackMessageText
[unSlackMessageText] :: SlackMessageText -> Text
instance GHC.Show.Show Web.Slack.Common.SlackClientError
instance GHC.Generics.Generic Web.Slack.Common.SlackClientError
instance GHC.Classes.Eq Web.Slack.Common.SlackClientError
instance GHC.Exception.Exception Web.Slack.Common.SlackClientError
instance Data.Aeson.Types.FromJSON.FromJSON Web.Slack.Common.HistoryRsp
instance GHC.Show.Show Web.Slack.Common.HistoryRsp
instance GHC.Generics.Generic Web.Slack.Common.HistoryRsp
instance GHC.Classes.Eq Web.Slack.Common.HistoryRsp
instance Data.Aeson.Types.FromJSON.FromJSON Web.Slack.Common.Message
instance GHC.Show.Show Web.Slack.Common.Message
instance GHC.Generics.Generic Web.Slack.Common.Message
instance GHC.Classes.Eq Web.Slack.Common.Message
instance GHC.Show.Show Web.Slack.Common.MessageType
instance GHC.Classes.Eq Web.Slack.Common.MessageType
instance Data.Aeson.Types.FromJSON.FromJSON Web.Slack.Common.MessageType
instance Data.Aeson.Types.FromJSON.FromJSON Web.Slack.Common.HistoryReq
instance Web.Internal.FormUrlEncoded.ToForm Web.Slack.Common.HistoryReq
instance GHC.Show.Show Web.Slack.Common.HistoryReq
instance GHC.Generics.Generic Web.Slack.Common.HistoryReq
instance GHC.Classes.Eq Web.Slack.Common.HistoryReq


module Web.Slack.User
data User
User :: UserId -> Text -> Bool -> Maybe Color -> Maybe Bool -> Maybe Bool -> Maybe Bool -> Maybe Bool -> Maybe Bool -> POSIXTime -> User
[userId] :: User -> UserId
[userName] :: User -> Text
[userDeleted] :: User -> Bool
[userColor] :: User -> Maybe Color
[userIsAdmin] :: User -> Maybe Bool
[userIsOwner] :: User -> Maybe Bool
[userIsPrimaryOwner] :: User -> Maybe Bool
[userIsRestricted] :: User -> Maybe Bool
[userIsUltraRestricted] :: User -> Maybe Bool
[userUpdated] :: User -> POSIXTime
data ListRsp
ListRsp :: [User] -> ListRsp
[listRspMembers] :: ListRsp -> [User]
instance Data.Aeson.Types.FromJSON.FromJSON Web.Slack.User.ListRsp
instance GHC.Show.Show Web.Slack.User.ListRsp
instance GHC.Generics.Generic Web.Slack.User.ListRsp
instance GHC.Classes.Eq Web.Slack.User.ListRsp
instance Data.Aeson.Types.FromJSON.FromJSON Web.Slack.User.User
instance GHC.Show.Show Web.Slack.User.User
instance GHC.Generics.Generic Web.Slack.User.User
instance GHC.Classes.Eq Web.Slack.User.User


module Web.Slack.Im
data Im
Im :: Text -> Bool -> UserId -> POSIXTime -> Bool -> Im
[imId] :: Im -> Text
[imIsIm] :: Im -> Bool
[imUser] :: Im -> UserId
[imCreated] :: Im -> POSIXTime
[imIsUserDeleted] :: Im -> Bool
data ListRsp
ListRsp :: [Im] -> ListRsp
[listRspIms] :: ListRsp -> [Im]
instance Data.Aeson.Types.FromJSON.FromJSON Web.Slack.Im.ListRsp
instance GHC.Show.Show Web.Slack.Im.ListRsp
instance GHC.Generics.Generic Web.Slack.Im.ListRsp
instance GHC.Classes.Eq Web.Slack.Im.ListRsp
instance Data.Aeson.Types.FromJSON.FromJSON Web.Slack.Im.Im
instance GHC.Show.Show Web.Slack.Im.Im
instance GHC.Generics.Generic Web.Slack.Im.Im
instance GHC.Classes.Eq Web.Slack.Im.Im


module Web.Slack.Group
data Group
Group :: Text -> Text -> Bool -> POSIXTime -> UserId -> Bool -> [UserId] -> Group
[groupId] :: Group -> Text
[groupName] :: Group -> Text
[groupIsMpim] :: Group -> Bool
[groupCreated] :: Group -> POSIXTime
[groupCreator] :: Group -> UserId
[groupIsArchived] :: Group -> Bool
[groupMembers] :: Group -> [UserId]
data ListRsp
ListRsp :: [Group] -> ListRsp
[listRspGroups] :: ListRsp -> [Group]
instance Data.Aeson.Types.FromJSON.FromJSON Web.Slack.Group.ListRsp
instance GHC.Show.Show Web.Slack.Group.ListRsp
instance GHC.Generics.Generic Web.Slack.Group.ListRsp
instance GHC.Classes.Eq Web.Slack.Group.ListRsp
instance Data.Aeson.Types.FromJSON.FromJSON Web.Slack.Group.Group
instance GHC.Show.Show Web.Slack.Group.Group
instance GHC.Generics.Generic Web.Slack.Group.Group
instance GHC.Classes.Eq Web.Slack.Group.Group


module Web.Slack.Chat
data PostMsg
PostMsg :: Text -> Maybe Text -> Maybe Bool -> Maybe Text -> Maybe Bool -> Maybe Bool -> Maybe Text -> Maybe Bool -> Maybe Text -> Maybe Text -> Maybe Text -> Maybe Bool -> PostMsg
[postMsgText] :: PostMsg -> Text
[postMsgParse] :: PostMsg -> Maybe Text
[postMsgLinkNames] :: PostMsg -> Maybe Bool
[postMsgAttachments] :: PostMsg -> Maybe Text
[postMsgUnfurlLinks] :: PostMsg -> Maybe Bool
[postMsgUnfurlMedia] :: PostMsg -> Maybe Bool
[postMsgUsername] :: PostMsg -> Maybe Text
[postMsgAsUser] :: PostMsg -> Maybe Bool
[postMsgIconUrl] :: PostMsg -> Maybe Text
[postMsgIconEmoji] :: PostMsg -> Maybe Text
[postMsgThreadTs] :: PostMsg -> Maybe Text
[postMsgReplyBroadcast] :: PostMsg -> Maybe Bool
data PostMsgReq
PostMsgReq :: Text -> Text -> Maybe Text -> Maybe Bool -> Maybe Text -> Maybe Bool -> Maybe Bool -> Maybe Text -> Maybe Bool -> Maybe Text -> Maybe Text -> Maybe Text -> Maybe Bool -> PostMsgReq
[postMsgReqChannel] :: PostMsgReq -> Text
[postMsgReqText] :: PostMsgReq -> Text
[postMsgReqParse] :: PostMsgReq -> Maybe Text
[postMsgReqLinkNames] :: PostMsgReq -> Maybe Bool
[postMsgReqAttachments] :: PostMsgReq -> Maybe Text
[postMsgReqUnfurlLinks] :: PostMsgReq -> Maybe Bool
[postMsgReqUnfurlMedia] :: PostMsgReq -> Maybe Bool
[postMsgReqUsername] :: PostMsgReq -> Maybe Text
[postMsgReqAsUser] :: PostMsgReq -> Maybe Bool
[postMsgReqIconUrl] :: PostMsgReq -> Maybe Text
[postMsgReqIconEmoji] :: PostMsgReq -> Maybe Text
[postMsgReqThreadTs] :: PostMsgReq -> Maybe Text
[postMsgReqReplyBroadcast] :: PostMsgReq -> Maybe Bool
mkPostMsgReq :: Text -> Text -> PostMsgReq
data PostMsgRsp
PostMsgRsp :: String -> PostMsg -> PostMsgRsp
[postMsgRspTs] :: PostMsgRsp -> String
[postMsgRspMessage] :: PostMsgRsp -> PostMsg
instance Data.Aeson.Types.FromJSON.FromJSON Web.Slack.Chat.PostMsgRsp
instance GHC.Show.Show Web.Slack.Chat.PostMsgRsp
instance GHC.Generics.Generic Web.Slack.Chat.PostMsgRsp
instance GHC.Classes.Eq Web.Slack.Chat.PostMsgRsp
instance Data.Aeson.Types.ToJSON.ToJSON Web.Slack.Chat.PostMsgReq
instance Data.Aeson.Types.FromJSON.FromJSON Web.Slack.Chat.PostMsgReq
instance Web.Internal.FormUrlEncoded.ToForm Web.Slack.Chat.PostMsgReq
instance GHC.Show.Show Web.Slack.Chat.PostMsgReq
instance GHC.Generics.Generic Web.Slack.Chat.PostMsgReq
instance GHC.Classes.Eq Web.Slack.Chat.PostMsgReq
instance Data.Aeson.Types.ToJSON.ToJSON Web.Slack.Chat.PostMsg
instance Data.Aeson.Types.FromJSON.FromJSON Web.Slack.Chat.PostMsg
instance GHC.Show.Show Web.Slack.Chat.PostMsg
instance GHC.Generics.Generic Web.Slack.Chat.PostMsg
instance GHC.Classes.Eq Web.Slack.Chat.PostMsg


module Web.Slack.Channel
data Channel
Channel :: Text -> Text -> Integer -> UserId -> Bool -> Bool -> Bool -> Maybe Text -> Maybe Text -> Maybe Integer -> Maybe Integer -> [UserId] -> Topic -> Purpose -> Channel
[channelId] :: Channel -> Text
[channelName] :: Channel -> Text
[channelCreated] :: Channel -> Integer
[channelCreator] :: Channel -> UserId
[channelIsArchived] :: Channel -> Bool
[channelIsMember] :: Channel -> Bool
[channelIsGeneral] :: Channel -> Bool
[channelLastRead] :: Channel -> Maybe Text
[channelLatest] :: Channel -> Maybe Text
[channelUnreadCount] :: Channel -> Maybe Integer
[channelUnreadCountDisplay] :: Channel -> Maybe Integer
[channelMembers] :: Channel -> [UserId]
[channelTopic] :: Channel -> Topic
[channelPurpose] :: Channel -> Purpose
data Purpose
Purpose :: Text -> Text -> Integer -> Purpose
[purposeValue] :: Purpose -> Text
[purposeCreator] :: Purpose -> Text
[purposeLastSet] :: Purpose -> Integer
data Topic
Topic :: Text -> Text -> Integer -> Topic
[topicValue] :: Topic -> Text
[topicCreator] :: Topic -> Text
[topicLastSet] :: Topic -> Integer
data CreateReq
CreateReq :: Text -> Maybe Bool -> CreateReq
[createReqName] :: CreateReq -> Text
[createReqValidate] :: CreateReq -> Maybe Bool
mkCreateReq :: Text -> CreateReq
data CreateRsp
CreateRsp :: Channel -> CreateRsp
[createRspChannel] :: CreateRsp -> Channel
data ListReq
ListReq :: Maybe Bool -> Maybe Bool -> ListReq
[listReqExcludeArchived] :: ListReq -> Maybe Bool
[listReqExcludeMembers] :: ListReq -> Maybe Bool
mkListReq :: ListReq
data ListRsp
ListRsp :: [Channel] -> ListRsp
[listRspChannels] :: ListRsp -> [Channel]
instance Data.Aeson.Types.FromJSON.FromJSON Web.Slack.Channel.ListRsp
instance GHC.Show.Show Web.Slack.Channel.ListRsp
instance GHC.Generics.Generic Web.Slack.Channel.ListRsp
instance GHC.Classes.Eq Web.Slack.Channel.ListRsp
instance Data.Aeson.Types.ToJSON.ToJSON Web.Slack.Channel.ListReq
instance Data.Aeson.Types.FromJSON.FromJSON Web.Slack.Channel.ListReq
instance Web.Internal.FormUrlEncoded.ToForm Web.Slack.Channel.ListReq
instance GHC.Show.Show Web.Slack.Channel.ListReq
instance GHC.Generics.Generic Web.Slack.Channel.ListReq
instance GHC.Classes.Eq Web.Slack.Channel.ListReq
instance Data.Aeson.Types.FromJSON.FromJSON Web.Slack.Channel.CreateRsp
instance GHC.Show.Show Web.Slack.Channel.CreateRsp
instance GHC.Generics.Generic Web.Slack.Channel.CreateRsp
instance GHC.Classes.Eq Web.Slack.Channel.CreateRsp
instance Data.Aeson.Types.ToJSON.ToJSON Web.Slack.Channel.CreateReq
instance Data.Aeson.Types.FromJSON.FromJSON Web.Slack.Channel.CreateReq
instance Web.Internal.FormUrlEncoded.ToForm Web.Slack.Channel.CreateReq
instance GHC.Show.Show Web.Slack.Channel.CreateReq
instance GHC.Generics.Generic Web.Slack.Channel.CreateReq
instance GHC.Classes.Eq Web.Slack.Channel.CreateReq
instance Data.Aeson.Types.ToJSON.ToJSON Web.Slack.Channel.Topic
instance Data.Aeson.Types.FromJSON.FromJSON Web.Slack.Channel.Topic
instance Data.Aeson.Types.ToJSON.ToJSON Web.Slack.Channel.Purpose
instance Data.Aeson.Types.FromJSON.FromJSON Web.Slack.Channel.Purpose
instance Data.Aeson.Types.FromJSON.FromJSON Web.Slack.Channel.Channel
instance GHC.Show.Show Web.Slack.Channel.Channel
instance GHC.Generics.Generic Web.Slack.Channel.Channel
instance GHC.Classes.Eq Web.Slack.Channel.Channel
instance GHC.Show.Show Web.Slack.Channel.Topic
instance GHC.Generics.Generic Web.Slack.Channel.Topic
instance GHC.Classes.Eq Web.Slack.Channel.Topic
instance GHC.Show.Show Web.Slack.Channel.Purpose
instance GHC.Generics.Generic Web.Slack.Channel.Purpose
instance GHC.Classes.Eq Web.Slack.Channel.Purpose


module Web.Slack.Auth
data TestRsp
TestRsp :: Text -> Text -> Text -> Text -> Text -> Maybe Text -> TestRsp
[testRspUrl] :: TestRsp -> Text
[testRspTeam] :: TestRsp -> Text
[testRspUser] :: TestRsp -> Text
[testRspTeamId] :: TestRsp -> Text
[testRspUserId] :: TestRsp -> Text
[testRspEnterpriseId] :: TestRsp -> Maybe Text
instance Data.Aeson.Types.ToJSON.ToJSON Web.Slack.Auth.TestRsp
instance Data.Aeson.Types.FromJSON.FromJSON Web.Slack.Auth.TestRsp
instance GHC.Show.Show Web.Slack.Auth.TestRsp
instance GHC.Generics.Generic Web.Slack.Auth.TestRsp
instance GHC.Classes.Eq Web.Slack.Auth.TestRsp


module Web.Slack.Api
data TestReq
TestReq :: Maybe Text -> Maybe Text -> TestReq
[testReqError] :: TestReq -> Maybe Text
[testReqFoo] :: TestReq -> Maybe Text
mkTestReq :: TestReq
data TestRsp
TestRsp :: Maybe TestReq -> TestRsp
[testRspArgs] :: TestRsp -> Maybe TestReq
instance Data.Aeson.Types.FromJSON.FromJSON Web.Slack.Api.TestRsp
instance GHC.Show.Show Web.Slack.Api.TestRsp
instance GHC.Generics.Generic Web.Slack.Api.TestRsp
instance GHC.Classes.Eq Web.Slack.Api.TestRsp
instance Data.Aeson.Types.ToJSON.ToJSON Web.Slack.Api.TestReq
instance Data.Aeson.Types.FromJSON.FromJSON Web.Slack.Api.TestReq
instance Web.Internal.FormUrlEncoded.ToForm Web.Slack.Api.TestReq
instance GHC.Show.Show Web.Slack.Api.TestReq
instance GHC.Generics.Generic Web.Slack.Api.TestReq
instance GHC.Classes.Eq Web.Slack.Api.TestReq


module Web.Slack

-- | Implements the <a>HasManager</a> and <a>HasToken</a> typeclasses.
data SlackConfig
SlackConfig :: Manager -> Text -> SlackConfig
[slackConfigManager] :: SlackConfig -> Manager
[slackConfigToken] :: SlackConfig -> Text

-- | Prepare a SlackConfig from a slack token. You can then call the other
--   functions providing this in a reader context.
mkSlackConfig :: Text -> IO SlackConfig

-- | Check API calling code.
--   
--   <a>https://api.slack.com/methods/api.test</a>
apiTest :: (MonadReader env m, HasManager env, MonadIO m) => TestReq -> m (Response TestRsp)

-- | Check authentication and identity.
--   
--   <a>https://api.slack.com/methods/auth.test</a>
authTest :: (MonadReader env m, HasManager env, HasToken env, MonadIO m) => m (Response TestRsp)

-- | Send a message to a channel.
--   
--   <a>https://api.slack.com/methods/chat.postMessage</a>
chatPostMessage :: (MonadReader env m, HasManager env, HasToken env, MonadIO m) => PostMsgReq -> m (Response PostMsgRsp)

-- | Create a channel.
--   
--   <a>https://api.slack.com/methods/channels.create</a>
channelsCreate :: (MonadReader env m, HasManager env, HasToken env, MonadIO m) => CreateReq -> m (Response CreateRsp)

-- | Retrieve channel list.
--   
--   <a>https://api.slack.com/methods/channels.list</a>
channelsList :: (MonadReader env m, HasManager env, HasToken env, MonadIO m) => ListReq -> m (Response ListRsp)

-- | Retrieve channel history. Consider using <a>historyFetchAll</a> in
--   combination with this function
--   
--   <a>https://api.slack.com/methods/channels.history</a>
channelsHistory :: (MonadReader env m, HasManager env, HasToken env, MonadIO m) => HistoryReq -> m (Response HistoryRsp)

-- | This method returns a portion of messages/events from the specified
--   private channel. To read the entire history for a private channel,
--   call the method with no latest or oldest arguments, and then continue
--   paging. Consider using <a>historyFetchAll</a> in combination with this
--   function
--   
--   <a>https://api.slack.com/methods/groups.history</a>
groupsHistory :: (MonadReader env m, HasManager env, HasToken env, MonadIO m) => HistoryReq -> m (Response HistoryRsp)

-- | This method returns a list of private channels in the team that the
--   caller is in and archived groups that the caller was in. The list of
--   (non-deactivated) members in each private channel is also returned.
--   
--   <a>https://api.slack.com/methods/groups.list</a>
groupsList :: (MonadReader env m, HasManager env, HasToken env, MonadIO m) => m (Response ListRsp)

-- | Fetch all history items between two dates. The basic calls
--   <a>channelsHistory</a>, <a>groupsHistory</a>, <a>imHistory</a> and so
--   on may not return exhaustive results if there were too many records.
--   You need to use <a>historyRspHasMore</a> to find out whether you got
--   all the data.
--   
--   This function will repeatedly call the underlying history function
--   until all the data is fetched or until a call fails, merging the
--   messages obtained from each call.
historyFetchAll :: (MonadReader env m, HasManager env, HasToken env, MonadIO m) => (HistoryReq -> m (Response HistoryRsp)) -> Text -> Int -> SlackTimestamp -> SlackTimestamp -> m (Response HistoryRsp)

-- | Retrieve direct message channel history. Consider using
--   <a>historyFetchAll</a> in combination with this function
--   
--   <a>https://api.slack.com/methods/im.history</a>
imHistory :: (MonadReader env m, HasManager env, HasToken env, MonadIO m) => HistoryReq -> m (Response HistoryRsp)

-- | Returns a list of all direct message channels that the user has
--   
--   <a>https://api.slack.com/methods/im.list</a>
imList :: (MonadReader env m, HasManager env, HasToken env, MonadIO m) => m (Response ListRsp)

-- | Returns a list of all multiparty direct message channels that the user
--   has
--   
--   <a>https://api.slack.com/methods/mpim.list</a>
mpimList :: (MonadReader env m, HasManager env, HasToken env, MonadIO m) => m (Response ListRsp)

-- | Retrieve multiparty direct message channel history. Consider using
--   <a>historyFetchAll</a> in combination with this function
--   
--   <a>https://api.slack.com/methods/mpim.history</a>
mpimHistory :: (MonadReader env m, HasManager env, HasToken env, MonadIO m) => HistoryReq -> m (Response HistoryRsp)

-- | Returns a function to get a username from a <a>UserId</a>. Comes in
--   handy to use <a>messageToHtml</a>
getUserDesc :: (UserId -> Text) -> ListRsp -> (UserId -> Text)

-- | This method returns a list of all users in the team. This includes
--   deleted/deactivated users.
--   
--   <a>https://api.slack.com/methods/users.list</a>
usersList :: (MonadReader env m, HasManager env, HasToken env, MonadIO m) => m (Response ListRsp)
authenticateReq :: Text -> Request -> Request
type Response a = Either SlackClientError a
class HasManager a
getManager :: HasManager a => a -> Manager
class HasToken a
getToken :: HasToken a => a -> Text
instance GHC.Show.Show Web.Slack.ResponseSlackError
instance GHC.Classes.Eq Web.Slack.ResponseSlackError
instance Data.Aeson.Types.FromJSON.FromJSON a => Data.Aeson.Types.FromJSON.FromJSON (Web.Slack.ResponseJSON a)
instance Web.Slack.HasManager Web.Slack.SlackConfig
instance Web.Slack.HasToken Web.Slack.SlackConfig
