module Web.Slack.Message (sendMessage) where
import Control.Lens
import Control.Monad.State
import Data.Aeson (encode)
import Data.Aeson.TH
import Data.Char
import qualified Data.Text as T
import qualified Network.WebSockets as WS
import Web.Slack.State
import Web.Slack.Types
data MessagePayload = MessagePayload
{ messageId :: Int
, messageType :: T.Text
, messageChannel :: ChannelId
, messageText :: T.Text } deriving Show
$(deriveToJSON defaultOptions {fieldLabelModifier = map toLower . drop 7} ''MessagePayload)
sendMessage :: ChannelId -> T.Text -> Slack s ()
sendMessage cid message = do
conn <- use connection
uid <- counter
let payload = MessagePayload uid "message" cid message
slackLog payload
liftIO $ WS.sendTextData conn (encode payload)