module Network.Haskbot.Plugin.Help (register) where
import Control.Applicative ((<$>))
import Data.List (find)
import qualified Data.Text as T
import Network.Haskbot.Plugin
import Network.Haskbot.SlashCommand
import Network.Haskbot.Types
name :: Command
name = setCommand "haskbot"
helpText :: T.Text
helpText =
"List all installed Plugins via `/haskbot`. To see the help text of a\
\ particular Plugin, use `/haskbot [Plugin name]`."
register :: [Plugin] -> T.Text -> Plugin
register plugins = Plugin name helpText (handler plugins) . setToken
getHelp :: [Plugin] -> Maybe [T.Text] -> T.Text
getHelp plugins (Just [comName]) =
maybe (listAllText plugins) plHelpText
(selectFrom plugins $ setCommand comName)
getHelp plugins _ = listAllText plugins
handler :: [Plugin] -> HandlerFn
handler plugins slashCom = return $ replyAsDM slashCom reply
where reply = getHelp plugins $ T.words <$> optText slashCom
listAllText :: [Plugin] -> T.Text
listAllText plugins =
T.concat [ "Available commands: "
, T.intercalate ", " (map name plugins)
, ". To get help for a specific command, use `/haskbot [command]`."
]
where name p = T.concat ["`/", getCommand (plCommand p), "`"]