packages feed

werewolf-slack-0.1.0.0: app/Werewolf/Slack/Werewolf.hs

{-|
Module      : Werewolf.Slack.Werewolf

Copyright   : (c) Henry J. Wylde, 2016
License     : BSD3
Maintainer  : public@hjwylde.com
-}

module Werewolf.Slack.Werewolf (
    -- * Werewolf
    executeUserCommand,
) where

import Control.Monad.Extra

import           Data.Aeson
import qualified Data.ByteString.Lazy.Char8 as BSLC
import           Data.Maybe
import qualified Data.Text                  as T

import Game.Werewolf

import System.Process

import Werewolf.Slack.Slack

executeUserCommand :: String -> String -> String -> IO ()
executeUserCommand accessToken user userCommand = do
    stdout          <- readCreateProcess (proc command arguments) ""
    let mResponse   = decode (BSLC.pack stdout) :: Maybe Response

    whenJust mResponse $ \response ->
        forM_ (messages response) $ \(Message mTo message) ->
            notify accessToken (fromMaybe channelName (T.unpack <$> mTo)) (T.unpack message)
    where
        atUser      = if take 1 user == "@" then user else '@':user
        command     = "werewolf"
        arguments   = ["--caller", atUser, "interpret", "--"] ++ words userCommand

channelName :: String
channelName = "#werewolf"