packages feed

calamity-0.1.9.0: src/Calamity/Commands/ParsePrefix.hs

{-# LANGUAGE TemplateHaskell #-}

-- | Command prefix parsing effect
module Calamity.Commands.ParsePrefix
    ( ParsePrefix(..)
    , parsePrefix
    , useConstantPrefix ) where

import           Calamity.Types.Model.Channel.Message

import           Control.Lens

import qualified Data.Text.Lazy                       as L

import qualified Polysemy                             as P

data ParsePrefix m a where
  ParsePrefix :: Message -> ParsePrefix m (Maybe (L.Text, L.Text))

P.makeSem ''ParsePrefix

useConstantPrefix :: L.Text -> P.Sem (ParsePrefix ': r) a -> P.Sem r a
useConstantPrefix pre = P.interpret (\case
                                       ParsePrefix m -> pure ((pre, ) <$> L.stripPrefix pre (m ^. #content)))