module Network.Haskbot.Internal.Plugin
( Plugin (..)
, isAuthorized
, runPlugin
, selectFrom
) where

import Data.List (find)
import Data.Text (Text)
import Network.Haskbot.Internal.Environment (Haskbot)
import Network.Haskbot.Internal.Incoming (Incoming (Incoming), addToSendQueue)
import Network.Haskbot.Plugin (Plugin (..))
import Network.Haskbot.SlashCommand (SlashCom, token)
import Network.Haskbot.Types

runPlugin :: Plugin -> SlashCom -> Haskbot ()
runPlugin p slashCom = plHandler p slashCom >>= maybe (return ()) addToSendQueue

isAuthorized :: Plugin -> SlashCom -> Bool
isAuthorized plugin slashCom = plToken plugin == token slashCom

selectFrom :: [Plugin] -> Command -> Maybe Plugin
selectFrom list com = find (\p -> plCommand p == com) list