{-# LANGUAGE TemplateHaskell #-}
module Calamity.Cache.Eff
( CacheEff(..)
, setBotUser
, updateBotUser
, getBotUser
, setGuild
, updateGuild
, getGuild
, getGuildChannel
, getGuilds
, delGuild
, setDM
, updateDM
, getDM
, getDMs
, delDM
, setUser
, updateUser
, getUser
, getUsers
, delUser
, setUnavailableGuild
, isUnavailableGuild
, getUnavailableGuilds
, delUnavailableGuild
, setMessage
, updateMessage
, getMessage
, getMessages
, delMessage ) where
import Calamity.Internal.Utils
import Calamity.Types.Model.Channel
import Calamity.Types.Model.Guild
import Calamity.Types.Model.User
import Calamity.Types.Snowflake
import Polysemy
import qualified Polysemy as P
data CacheEff m a where
SetBotUser :: User -> CacheEff m ()
GetBotUser :: CacheEff m (Maybe User)
SetGuild :: Guild -> CacheEff m ()
GetGuild :: Snowflake Guild -> CacheEff m (Maybe Guild)
GetGuildChannel :: Snowflake GuildChannel -> CacheEff m (Maybe GuildChannel)
GetGuilds :: CacheEff m [Guild]
DelGuild :: Snowflake Guild -> CacheEff m ()
SetDM :: DMChannel -> CacheEff m ()
GetDM :: Snowflake DMChannel -> CacheEff m (Maybe DMChannel)
GetDMs :: CacheEff m [DMChannel]
DelDM :: Snowflake DMChannel -> CacheEff m ()
SetUser :: User -> CacheEff m ()
GetUser :: Snowflake User -> CacheEff m (Maybe User)
GetUsers :: CacheEff m [User]
DelUser :: Snowflake User -> CacheEff m ()
SetUnavailableGuild :: Snowflake Guild -> CacheEff m ()
IsUnavailableGuild :: Snowflake Guild -> CacheEff m Bool
GetUnavailableGuilds :: CacheEff m [Snowflake Guild]
DelUnavailableGuild :: Snowflake Guild -> CacheEff m ()
SetMessage :: Message -> CacheEff m ()
GetMessage :: Snowflake Message -> CacheEff m (Maybe Message)
GetMessages :: CacheEff m [Message]
DelMessage :: Snowflake Message -> CacheEff m ()
makeSem ''CacheEff
updateBotUser :: P.Member CacheEff r => (User -> User) -> Sem r ()
updateBotUser :: forall (r :: EffectRow).
Member CacheEff r =>
(User -> User) -> Sem r ()
updateBotUser User -> User
f = forall (r :: EffectRow). Member CacheEff r => Sem r (Maybe User)
getBotUser forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= forall a b c. (a -> b -> c) -> b -> a -> c
flip forall (m :: * -> *) a.
Applicative m =>
Maybe a -> (a -> m ()) -> m ()
whenJust (forall (r :: EffectRow). Member CacheEff r => User -> Sem r ()
setBotUser forall b c a. (b -> c) -> (a -> b) -> a -> c
. User -> User
f)
updateGuild :: P.Member CacheEff r => Snowflake Guild -> (Guild -> Guild) -> Sem r ()
updateGuild :: forall (r :: EffectRow).
Member CacheEff r =>
Snowflake Guild -> (Guild -> Guild) -> Sem r ()
updateGuild Snowflake Guild
id Guild -> Guild
f = forall (r :: EffectRow).
Member CacheEff r =>
Snowflake Guild -> Sem r (Maybe Guild)
getGuild Snowflake Guild
id forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= forall a b c. (a -> b -> c) -> b -> a -> c
flip forall (m :: * -> *) a.
Applicative m =>
Maybe a -> (a -> m ()) -> m ()
whenJust (forall (r :: EffectRow). Member CacheEff r => Guild -> Sem r ()
setGuild forall b c a. (b -> c) -> (a -> b) -> a -> c
. Guild -> Guild
f)
updateDM :: P.Member CacheEff r => Snowflake DMChannel -> (DMChannel -> DMChannel) -> Sem r ()
updateDM :: forall (r :: EffectRow).
Member CacheEff r =>
Snowflake DMChannel -> (DMChannel -> DMChannel) -> Sem r ()
updateDM Snowflake DMChannel
id DMChannel -> DMChannel
f = forall (r :: EffectRow).
Member CacheEff r =>
Snowflake DMChannel -> Sem r (Maybe DMChannel)
getDM Snowflake DMChannel
id forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= forall a b c. (a -> b -> c) -> b -> a -> c
flip forall (m :: * -> *) a.
Applicative m =>
Maybe a -> (a -> m ()) -> m ()
whenJust (forall (r :: EffectRow). Member CacheEff r => DMChannel -> Sem r ()
setDM forall b c a. (b -> c) -> (a -> b) -> a -> c
. DMChannel -> DMChannel
f)
updateUser :: P.Member CacheEff r => Snowflake User -> (User -> User) -> Sem r ()
updateUser :: forall (r :: EffectRow).
Member CacheEff r =>
Snowflake User -> (User -> User) -> Sem r ()
updateUser Snowflake User
id User -> User
f = forall (r :: EffectRow).
Member CacheEff r =>
Snowflake User -> Sem r (Maybe User)
getUser Snowflake User
id forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= forall a b c. (a -> b -> c) -> b -> a -> c
flip forall (m :: * -> *) a.
Applicative m =>
Maybe a -> (a -> m ()) -> m ()
whenJust (forall (r :: EffectRow). Member CacheEff r => User -> Sem r ()
setUser forall b c a. (b -> c) -> (a -> b) -> a -> c
. User -> User
f)
updateMessage :: P.Member CacheEff r => Snowflake Message -> (Message -> Message) -> Sem r ()
updateMessage :: forall (r :: EffectRow).
Member CacheEff r =>
Snowflake Message -> (Message -> Message) -> Sem r ()
updateMessage Snowflake Message
id Message -> Message
f = forall (r :: EffectRow).
Member CacheEff r =>
Snowflake Message -> Sem r (Maybe Message)
getMessage Snowflake Message
id forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= forall a b c. (a -> b -> c) -> b -> a -> c
flip forall (m :: * -> *) a.
Applicative m =>
Maybe a -> (a -> m ()) -> m ()
whenJust (forall (r :: EffectRow). Member CacheEff r => Message -> Sem r ()
setMessage forall b c a. (b -> c) -> (a -> b) -> a -> c
. Message -> Message
f)