{-# LANGUAGE TemplateHaskell #-}
module Calamity.Interactions.Eff (
InteractionEff (..),
getInteraction,
getInteractionID,
getApplicationID,
getInteractionToken,
getInteractionUser,
) where
import Calamity.Types.Model.Interaction
import Calamity.Types.Model.User (User)
import Calamity.Types.Snowflake
import Control.Applicative ((<|>))
import Optics ((^.), (^?), _Just, (%))
import Data.Maybe (fromJust)
import Polysemy
import qualified Polysemy as P
data InteractionEff m a where
GetInteraction :: InteractionEff m Interaction
makeSem ''InteractionEff
getInteractionID :: P.Member InteractionEff r => P.Sem r (Snowflake Interaction)
getInteractionID :: forall (r :: EffectRow).
Member InteractionEff r =>
Sem r (Snowflake Interaction)
getInteractionID = (forall k s (is :: IxList) a.
Is k A_Getter =>
s -> Optic' k is s a -> a
^. forall a. IsLabel "id" a => a
#id) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> forall (r :: EffectRow).
Member InteractionEff r =>
Sem r Interaction
getInteraction
getApplicationID :: P.Member InteractionEff r => P.Sem r (Snowflake Application)
getApplicationID :: forall (r :: EffectRow).
Member InteractionEff r =>
Sem r (Snowflake Application)
getApplicationID = (forall k s (is :: IxList) a.
Is k A_Getter =>
s -> Optic' k is s a -> a
^. forall a. IsLabel "applicationID" a => a
#applicationID) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> forall (r :: EffectRow).
Member InteractionEff r =>
Sem r Interaction
getInteraction
getInteractionToken :: P.Member InteractionEff r => P.Sem r InteractionToken
getInteractionToken :: forall (r :: EffectRow).
Member InteractionEff r =>
Sem r InteractionToken
getInteractionToken = (forall k s (is :: IxList) a.
Is k A_Getter =>
s -> Optic' k is s a -> a
^. forall a. IsLabel "token" a => a
#token) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> forall (r :: EffectRow).
Member InteractionEff r =>
Sem r Interaction
getInteraction
getInteractionUser :: P.Member InteractionEff r => P.Sem r (Snowflake User)
getInteractionUser :: forall (r :: EffectRow).
Member InteractionEff r =>
Sem r (Snowflake User)
getInteractionUser = do
Interaction
int <- forall (r :: EffectRow).
Member InteractionEff r =>
Sem r Interaction
getInteraction
let uid :: Maybe (Snowflake User)
uid = Interaction
int forall k s (is :: IxList) a.
Is k An_AffineFold =>
s -> Optic' k is s a -> Maybe a
^? forall a. IsLabel "user" a => a
#user forall k l m (is :: IxList) (js :: IxList) (ks :: IxList) s t u v a
b.
(JoinKinds k l m, AppendIndices is js ks) =>
Optic k is s t u v -> Optic l js u v a b -> Optic m ks s t a b
% forall a b. Prism (Maybe a) (Maybe b) a b
_Just forall k l m (is :: IxList) (js :: IxList) (ks :: IxList) s t u v a
b.
(JoinKinds k l m, AppendIndices is js ks) =>
Optic k is s t u v -> Optic l js u v a b -> Optic m ks s t a b
% forall a. IsLabel "id" a => a
#id
mid :: Maybe (Snowflake User)
mid = Interaction
int forall k s (is :: IxList) a.
Is k An_AffineFold =>
s -> Optic' k is s a -> Maybe a
^? forall a. IsLabel "member" a => a
#member forall k l m (is :: IxList) (js :: IxList) (ks :: IxList) s t u v a
b.
(JoinKinds k l m, AppendIndices is js ks) =>
Optic k is s t u v -> Optic l js u v a b -> Optic m ks s t a b
% forall a b. Prism (Maybe a) (Maybe b) a b
_Just forall k l m (is :: IxList) (js :: IxList) (ks :: IxList) s t u v a
b.
(JoinKinds k l m, AppendIndices is js ks) =>
Optic k is s t u v -> Optic l js u v a b -> Optic m ks s t a b
% forall a. IsLabel "id" a => a
#id
forall (f :: * -> *) a. Applicative f => a -> f a
pure forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. HasCallStack => Maybe a -> a
fromJust forall a b. (a -> b) -> a -> b
$ Maybe (Snowflake User)
uid forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Maybe (Snowflake User)
mid