calamity-0.3.0.0: Calamity/Interactions.hs
-- | Calamity Interaction views
module Calamity.Interactions (
module Calamity.Interactions.View,
module Calamity.Interactions.Utils,
module Calamity.Interactions.Eff,
-- * Interactions and Views
-- $viewDocs
) where
import Calamity.Interactions.Eff
import Calamity.Interactions.Utils
import Calamity.Interactions.View
{- $viewDocs
This module contains functions and types related to handling discord interactions.
The data models for components can be found in "Calamity.Types.Model.Channel.Component"
==== Examples
Displaying a 'View'
@
{-# LANGUAGE ApplicativeDo #-}
let view = 'row' $ do
a <- 'button' 'Calamity.Types.Model.Channel.Component.ButtonPrimary' "defer"
b <- 'button' 'Calamity.Types.Model.Channel.Component.ButtonPrimary' "deferEph"
c <- 'button' 'Calamity.Types.Model.Channel.Component.ButtonPrimary' "deferComp"
d <- 'button' 'Calamity.Types.Model.Channel.Component.ButtonPrimary' "modal"
pure (a, b, c, d)
modalView = do
a <- 'textInput' 'Calamity.Types.Model.Channel.Component.TextInputShort' "a"
b <- 'textInput' 'Calamity.Types.Model.Channel.Component.TextInputParagraph' "b"
pure (a, b)
in 'runView' view ('Calamity.tell' ctx) $ \\(a, b, c, d) -> do
'Control.Monad.when' a $ do
'Control.Monad.void' 'defer'
'Polysemy.embed' $ threadDelay 1000000
'Control.Monad.void' $ 'followUp' \@'Data.Text.Text' "lol"
'Control.Monad.when' b $ do
'Control.Monad.void' 'deferEphemeral'
'Polysemy.embed' $ threadDelay 1000000
'Control.Monad.void' $ 'followUpEphemeral' \@'Data.Text.Text' "lol"
'Control.Monad.when' c $ do
'Control.Monad.void' 'deferComponent'
'Polysemy.embed' $ threadDelay 1000000
'Control.Monad.void' $ 'followUp' \@'Data.Text.Text' "lol"
'Control.Monad.when' d $ do
'Control.Monad.void' . 'Polysemy.Async.async' $ do
'runView' modalView ('Control.Monad.void' . 'pushModal' "lol") $ \(a, b) -> do
'Polysemy.embed' $ print (a, b)
'Control.Monad.void' $ 'respond' ("Thanks: " <> a <> " " <> b)
'endView' ()
pure ()
@
-}