packages feed

calamity 0.9.0.0 → 0.10.0.0

raw patch · 6 files changed

+82/−32 lines, 6 filesPVP ok

version bump matches the API change (PVP)

API changes (from Hackage documentation)

- Calamity.HTTP.Channel: instance (k GHC.Types.~ Optics.Internal.Optic.Types.A_Lens, a GHC.Types.~ Data.ByteString.Lazy.Internal.ByteString, b GHC.Types.~ Data.ByteString.Lazy.Internal.ByteString) => Optics.Label.LabelOptic "content" k Calamity.HTTP.Channel.CreateMessageAttachment Calamity.HTTP.Channel.CreateMessageAttachment a b
- Calamity.HTTP.Internal.Types: instance (k GHC.Types.~ Optics.Internal.Optic.Types.A_Lens, a GHC.Types.~ StmContainers.Map.Map Calamity.HTTP.Internal.Route.RouteKey Data.ByteString.Internal.ByteString, b GHC.Types.~ StmContainers.Map.Map Calamity.HTTP.Internal.Route.RouteKey Data.ByteString.Internal.ByteString) => Optics.Label.LabelOptic "bucketKeys" k Calamity.HTTP.Internal.Types.RateLimitState Calamity.HTTP.Internal.Types.RateLimitState a b
- Calamity.HTTP.Internal.Types: instance (k GHC.Types.~ Optics.Internal.Optic.Types.A_Lens, a GHC.Types.~ StmContainers.Map.Map Data.ByteString.Internal.ByteString Calamity.HTTP.Internal.Types.Bucket, b GHC.Types.~ StmContainers.Map.Map Data.ByteString.Internal.ByteString Calamity.HTTP.Internal.Types.Bucket) => Optics.Label.LabelOptic "buckets" k Calamity.HTTP.Internal.Types.RateLimitState Calamity.HTTP.Internal.Types.RateLimitState a b
+ Calamity.HTTP.Channel: instance (k GHC.Types.~ Optics.Internal.Optic.Types.A_Lens, a GHC.Types.~ Network.HTTP.Client.Types.RequestBody, b GHC.Types.~ Network.HTTP.Client.Types.RequestBody) => Optics.Label.LabelOptic "content" k Calamity.HTTP.Channel.CreateMessageAttachment Calamity.HTTP.Channel.CreateMessageAttachment a b
+ Calamity.HTTP.Internal.Types: instance (k GHC.Types.~ Optics.Internal.Optic.Types.A_Lens, a GHC.Types.~ StmContainers.Map.Map Calamity.HTTP.Internal.Route.RouteKey Data.ByteString.Internal.Type.ByteString, b GHC.Types.~ StmContainers.Map.Map Calamity.HTTP.Internal.Route.RouteKey Data.ByteString.Internal.Type.ByteString) => Optics.Label.LabelOptic "bucketKeys" k Calamity.HTTP.Internal.Types.RateLimitState Calamity.HTTP.Internal.Types.RateLimitState a b
+ Calamity.HTTP.Internal.Types: instance (k GHC.Types.~ Optics.Internal.Optic.Types.A_Lens, a GHC.Types.~ StmContainers.Map.Map Data.ByteString.Internal.Type.ByteString Calamity.HTTP.Internal.Types.Bucket, b GHC.Types.~ StmContainers.Map.Map Data.ByteString.Internal.Type.ByteString Calamity.HTTP.Internal.Types.Bucket) => Optics.Label.LabelOptic "buckets" k Calamity.HTTP.Internal.Types.RateLimitState Calamity.HTTP.Internal.Types.RateLimitState a b
- Calamity.Cache.Eff: delDM :: forall r_a5Pc6. Member CacheEff r_a5Pc6 => Snowflake DMChannel -> Sem r_a5Pc6 ()
+ Calamity.Cache.Eff: delDM :: forall r_a52uP. Member CacheEff r_a52uP => Snowflake DMChannel -> Sem r_a52uP ()
- Calamity.Cache.Eff: delGuild :: forall r_a5PbZ. Member CacheEff r_a5PbZ => Snowflake Guild -> Sem r_a5PbZ ()
+ Calamity.Cache.Eff: delGuild :: forall r_a52uI. Member CacheEff r_a52uI => Snowflake Guild -> Sem r_a52uI ()
- Calamity.Cache.Eff: delMessage :: forall r_a5Pcr. Member CacheEff r_a5Pcr => Snowflake Message -> Sem r_a5Pcr ()
+ Calamity.Cache.Eff: delMessage :: forall r_a52va. Member CacheEff r_a52va => Snowflake Message -> Sem r_a52va ()
- Calamity.Cache.Eff: delUnavailableGuild :: forall r_a5Pck. Member CacheEff r_a5Pck => Snowflake Guild -> Sem r_a5Pck ()
+ Calamity.Cache.Eff: delUnavailableGuild :: forall r_a52v3. Member CacheEff r_a52v3 => Snowflake Guild -> Sem r_a52v3 ()
- Calamity.Cache.Eff: delUser :: forall r_a5Pcd. Member CacheEff r_a5Pcd => Snowflake User -> Sem r_a5Pcd ()
+ Calamity.Cache.Eff: delUser :: forall r_a52uW. Member CacheEff r_a52uW => Snowflake User -> Sem r_a52uW ()
- Calamity.Cache.Eff: getBotUser :: forall r_a5PbR. Member CacheEff r_a5PbR => Sem r_a5PbR (Maybe User)
+ Calamity.Cache.Eff: getBotUser :: forall r_a52uA. Member CacheEff r_a52uA => Sem r_a52uA (Maybe User)
- Calamity.Cache.Eff: getDM :: forall r_a5Pc3. Member CacheEff r_a5Pc3 => Snowflake DMChannel -> Sem r_a5Pc3 (Maybe DMChannel)
+ Calamity.Cache.Eff: getDM :: forall r_a52uM. Member CacheEff r_a52uM => Snowflake DMChannel -> Sem r_a52uM (Maybe DMChannel)
- Calamity.Cache.Eff: getDMs :: forall r_a5Pc5. Member CacheEff r_a5Pc5 => Sem r_a5Pc5 [DMChannel]
+ Calamity.Cache.Eff: getDMs :: forall r_a52uO. Member CacheEff r_a52uO => Sem r_a52uO [DMChannel]
- Calamity.Cache.Eff: getGuild :: forall r_a5PbU. Member CacheEff r_a5PbU => Snowflake Guild -> Sem r_a5PbU (Maybe Guild)
+ Calamity.Cache.Eff: getGuild :: forall r_a52uD. Member CacheEff r_a52uD => Snowflake Guild -> Sem r_a52uD (Maybe Guild)
- Calamity.Cache.Eff: getGuildChannel :: forall r_a5PbW. Member CacheEff r_a5PbW => Snowflake GuildChannel -> Sem r_a5PbW (Maybe GuildChannel)
+ Calamity.Cache.Eff: getGuildChannel :: forall r_a52uF. Member CacheEff r_a52uF => Snowflake GuildChannel -> Sem r_a52uF (Maybe GuildChannel)
- Calamity.Cache.Eff: getGuilds :: forall r_a5PbY. Member CacheEff r_a5PbY => Sem r_a5PbY [Guild]
+ Calamity.Cache.Eff: getGuilds :: forall r_a52uH. Member CacheEff r_a52uH => Sem r_a52uH [Guild]
- Calamity.Cache.Eff: getMessage :: forall r_a5Pco. Member CacheEff r_a5Pco => Snowflake Message -> Sem r_a5Pco (Maybe Message)
+ Calamity.Cache.Eff: getMessage :: forall r_a52v7. Member CacheEff r_a52v7 => Snowflake Message -> Sem r_a52v7 (Maybe Message)
- Calamity.Cache.Eff: getMessages :: forall r_a5Pcq. Member CacheEff r_a5Pcq => Sem r_a5Pcq [Message]
+ Calamity.Cache.Eff: getMessages :: forall r_a52v9. Member CacheEff r_a52v9 => Sem r_a52v9 [Message]
- Calamity.Cache.Eff: getUnavailableGuilds :: forall r_a5Pcj. Member CacheEff r_a5Pcj => Sem r_a5Pcj [Snowflake Guild]
+ Calamity.Cache.Eff: getUnavailableGuilds :: forall r_a52v2. Member CacheEff r_a52v2 => Sem r_a52v2 [Snowflake Guild]
- Calamity.Cache.Eff: getUser :: forall r_a5Pca. Member CacheEff r_a5Pca => Snowflake User -> Sem r_a5Pca (Maybe User)
+ Calamity.Cache.Eff: getUser :: forall r_a52uT. Member CacheEff r_a52uT => Snowflake User -> Sem r_a52uT (Maybe User)
- Calamity.Cache.Eff: getUsers :: forall r_a5Pcc. Member CacheEff r_a5Pcc => Sem r_a5Pcc [User]
+ Calamity.Cache.Eff: getUsers :: forall r_a52uV. Member CacheEff r_a52uV => Sem r_a52uV [User]
- Calamity.Cache.Eff: isUnavailableGuild :: forall r_a5Pch. Member CacheEff r_a5Pch => Snowflake Guild -> Sem r_a5Pch Bool
+ Calamity.Cache.Eff: isUnavailableGuild :: forall r_a52v0. Member CacheEff r_a52v0 => Snowflake Guild -> Sem r_a52v0 Bool
- Calamity.Cache.Eff: setBotUser :: forall r_a5PbP. Member CacheEff r_a5PbP => User -> Sem r_a5PbP ()
+ Calamity.Cache.Eff: setBotUser :: forall r_a52uy. Member CacheEff r_a52uy => User -> Sem r_a52uy ()
- Calamity.Cache.Eff: setDM :: forall r_a5Pc1. Member CacheEff r_a5Pc1 => DMChannel -> Sem r_a5Pc1 ()
+ Calamity.Cache.Eff: setDM :: forall r_a52uK. Member CacheEff r_a52uK => DMChannel -> Sem r_a52uK ()
- Calamity.Cache.Eff: setGuild :: forall r_a5PbS. Member CacheEff r_a5PbS => Guild -> Sem r_a5PbS ()
+ Calamity.Cache.Eff: setGuild :: forall r_a52uB. Member CacheEff r_a52uB => Guild -> Sem r_a52uB ()
- Calamity.Cache.Eff: setMessage :: forall r_a5Pcm. Member CacheEff r_a5Pcm => Message -> Sem r_a5Pcm ()
+ Calamity.Cache.Eff: setMessage :: forall r_a52v5. Member CacheEff r_a52v5 => Message -> Sem r_a52v5 ()
- Calamity.Cache.Eff: setUnavailableGuild :: forall r_a5Pcf. Member CacheEff r_a5Pcf => Snowflake Guild -> Sem r_a5Pcf ()
+ Calamity.Cache.Eff: setUnavailableGuild :: forall r_a52uY. Member CacheEff r_a52uY => Snowflake Guild -> Sem r_a52uY ()
- Calamity.Cache.Eff: setUser :: forall r_a5Pc8. Member CacheEff r_a5Pc8 => User -> Sem r_a5Pc8 ()
+ Calamity.Cache.Eff: setUser :: forall r_a52uR. Member CacheEff r_a52uR => User -> Sem r_a52uR ()
- Calamity.HTTP.Channel: CreateMessageAttachment :: Text -> Maybe Text -> ByteString -> CreateMessageAttachment
+ Calamity.HTTP.Channel: CreateMessageAttachment :: Text -> Maybe Text -> RequestBody -> CreateMessageAttachment
- Calamity.HTTP.Channel: [$sel:content:CreateMessageAttachment] :: CreateMessageAttachment -> ByteString
+ Calamity.HTTP.Channel: [$sel:content:CreateMessageAttachment] :: CreateMessageAttachment -> RequestBody
- Calamity.HTTP.Internal.Ratelimit: getRatelimitState :: forall r_a4w6N. Member RatelimitEff r_a4w6N => Sem r_a4w6N RateLimitState
+ Calamity.HTTP.Internal.Ratelimit: getRatelimitState :: forall r_a3Vt8. Member RatelimitEff r_a3Vt8 => Sem r_a3Vt8 RateLimitState
- Calamity.Interactions.Eff: getInteraction :: forall r_a4o2f. Member InteractionEff r_a4o2f => Sem r_a4o2f Interaction
+ Calamity.Interactions.Eff: getInteraction :: forall r_a3Ovq. Member InteractionEff r_a3Ovq => Sem r_a3Ovq Interaction
- Calamity.Interactions.View: endView :: forall ret_a7Pwq inp_a7Pwr sendResp_a7Pws r_a7PM0. Member (ViewEff ret_a7Pwq inp_a7Pwr sendResp_a7Pws) r_a7PM0 => ret_a7Pwq -> Sem r_a7PM0 ()
+ Calamity.Interactions.View: endView :: forall ret_a6JAo inp_a6JAp sendResp_a6JAq r_a6JPY. Member (ViewEff ret_a6JAo inp_a6JAp sendResp_a6JAq) r_a6JPY => ret_a6JAo -> Sem r_a6JPY ()
- Calamity.Interactions.View: getSendResponse :: forall ret_a7Pwy inp_a7Pwz sendResp_a7PwA r_a7PM5. Member (ViewEff ret_a7Pwy inp_a7Pwz sendResp_a7PwA) r_a7PM5 => Sem r_a7PM5 sendResp_a7PwA
+ Calamity.Interactions.View: getSendResponse :: forall ret_a6JAw inp_a6JAx sendResp_a6JAy r_a6JQ3. Member (ViewEff ret_a6JAw inp_a6JAx sendResp_a6JAy) r_a6JQ3 => Sem r_a6JQ3 sendResp_a6JAy
- Calamity.Interactions.View: replaceView :: forall ret_a7Pww inp_a7Pwu sendResp_a7Pwx r_a7PM2. Member (ViewEff ret_a7Pww inp_a7Pwu sendResp_a7Pwx) r_a7PM2 => View inp_a7Pwu -> ([Component] -> Sem r_a7PM2 ()) -> Sem r_a7PM2 ()
+ Calamity.Interactions.View: replaceView :: forall ret_a6JAu inp_a6JAs sendResp_a6JAv r_a6JQ0. Member (ViewEff ret_a6JAu inp_a6JAs sendResp_a6JAv) r_a6JQ0 => View inp_a6JAs -> ([Component] -> Sem r_a6JQ0 ()) -> Sem r_a6JQ0 ()
- Calamity.Internal.LocalWriter: llisten :: forall o_auGc r_auHI a_X0. Member (LocalWriter o_auGc) r_auHI => Sem r_auHI a_X0 -> Sem r_auHI (o_auGc, a_X0)
+ Calamity.Internal.LocalWriter: llisten :: forall o_au7F r_au9b a_X0. Member (LocalWriter o_au7F) r_au9b => Sem r_au9b a_X0 -> Sem r_au9b (o_au7F, a_X0)
- Calamity.Internal.LocalWriter: ltell :: forall o_auG8 r_auHG. Member (LocalWriter o_auG8) r_auHG => o_auG8 -> Sem r_auHG ()
+ Calamity.Internal.LocalWriter: ltell :: forall o_au7B r_au99. Member (LocalWriter o_au7B) r_au99 => o_au7B -> Sem r_au99 ()
- Calamity.Metrics.Eff: addCounter :: forall r_awcn. Member MetricEff r_awcn => Int -> Counter -> Sem r_awcn Int
+ Calamity.Metrics.Eff: addCounter :: forall r_avxW. Member MetricEff r_avxW => Int -> Counter -> Sem r_avxW Int
- Calamity.Metrics.Eff: modifyGauge :: forall r_awcq. Member MetricEff r_awcq => (Double -> Double) -> Gauge -> Sem r_awcq Double
+ Calamity.Metrics.Eff: modifyGauge :: forall r_avxZ. Member MetricEff r_avxZ => (Double -> Double) -> Gauge -> Sem r_avxZ Double
- Calamity.Metrics.Eff: observeHistogram :: forall r_awct. Member MetricEff r_awct => Double -> Histogram -> Sem r_awct HistogramSample
+ Calamity.Metrics.Eff: observeHistogram :: forall r_avy2. Member MetricEff r_avy2 => Double -> Histogram -> Sem r_avy2 HistogramSample
- Calamity.Metrics.Eff: registerCounter :: forall r_awcd. Member MetricEff r_awcd => Text -> [(Text, Text)] -> Sem r_awcd Counter
+ Calamity.Metrics.Eff: registerCounter :: forall r_avxM. Member MetricEff r_avxM => Text -> [(Text, Text)] -> Sem r_avxM Counter
- Calamity.Metrics.Eff: registerGauge :: forall r_awcg. Member MetricEff r_awcg => Text -> [(Text, Text)] -> Sem r_awcg Gauge
+ Calamity.Metrics.Eff: registerGauge :: forall r_avxP. Member MetricEff r_avxP => Text -> [(Text, Text)] -> Sem r_avxP Gauge
- Calamity.Metrics.Eff: registerHistogram :: forall r_awcj. Member MetricEff r_awcj => Text -> [(Text, Text)] -> [Double] -> Sem r_awcj Histogram
+ Calamity.Metrics.Eff: registerHistogram :: forall r_avxS. Member MetricEff r_avxS => Text -> [(Text, Text)] -> [Double] -> Sem r_avxS Histogram
- Calamity.Types.TokenEff: getBotToken :: forall r_a1MGo. Member TokenEff r_a1MGo => Sem r_a1MGo Token
+ Calamity.Types.TokenEff: getBotToken :: forall r_a1Bhr. Member TokenEff r_a1Bhr => Sem r_a1Bhr Token

Files

Calamity/HTTP/Channel.hs view
@@ -34,12 +34,12 @@ import Calamity.Types.Snowflake import Data.Aeson qualified as Aeson import Data.Aeson.KeyMap qualified as K-import Data.ByteString.Lazy (ByteString) import Data.Default.Class import Data.Maybe (fromMaybe) import Data.Text (Text) import Data.Text qualified as T import Data.Word+import Network.HTTP.Client (RequestBody) import Network.HTTP.Client.MultipartFormData import Network.HTTP.Req import Network.Mime@@ -49,10 +49,19 @@ data CreateMessageAttachment = CreateMessageAttachment   { filename :: Text   , description :: Maybe Text-  , content :: ByteString+  , content :: RequestBody   }-  deriving (Show) +instance Show CreateMessageAttachment where+  show (CreateMessageAttachment filename description _) =+    mconcat+      [ "CreateMessageAttachment {filename = "+      , show filename+      , ", description = "+      , show description+      , ", content = <body>}"+      ]+ data CreateMessageOptions = CreateMessageOptions   { content :: Maybe Text   , nonce :: Maybe Text@@ -418,7 +427,7 @@       & buildRoute   action (CreateMessage _ cm) = \u o -> do     let filePart CreateMessageAttachment {filename, content} n =-          (partLBS @IO (T.pack $ "files[" <> show n <> "]") content)+          (partFileRequestBody @IO (T.pack $ "files[" <> show n <> "]") "" content)             { partFilename = Just (T.unpack filename)             , partContentType = Just (defaultMimeLookup filename)             }
Calamity/HTTP/Interaction.hs view
@@ -324,7 +324,7 @@      in postWith' (ReqBodyJson jsonBody)   action (CreateResponseMessage _ _ cm) = \u o -> do     let filePart CreateMessageAttachment {filename, content} n =-          (partLBS @IO (T.pack $ "files[" <> show n <> "]") content)+          (partFileRequestBody @IO (T.pack $ "files[" <> show n <> "]") "" content)             { partFilename = Just (T.unpack filename)             , partContentType = Just (defaultMimeLookup filename)             }@@ -354,7 +354,7 @@     postWith' body u o   action (CreateResponseUpdate _ _ cm) = \u o -> do     let filePart CreateMessageAttachment {filename, content} n =-          (partLBS @IO (T.pack $ "files[" <> show n <> "]") content)+          (partFileRequestBody @IO (T.pack $ "files[" <> show n <> "]") "" content)             { partFilename = Just (T.unpack filename)             , partContentType = Just (defaultMimeLookup filename)             }@@ -399,7 +399,7 @@   action (GetOriginalInteractionResponse _ _) = getWith   action (EditOriginalInteractionResponse _ _ cm) = \u o -> do     let filePart CreateMessageAttachment {filename, content} n =-          (partLBS @IO (T.pack $ "files[" <> show n <> "]") content)+          (partFileRequestBody @IO (T.pack $ "files[" <> show n <> "]") "" content)             { partFilename = Just (T.unpack filename)             , partContentType = Just (defaultMimeLookup filename)             }@@ -430,7 +430,7 @@   action (DeleteOriginalInteractionResponse _ _) = deleteWith   action (CreateFollowupMessage _ _ cm) = \u o -> do     let filePart CreateMessageAttachment {filename, content} n =-          (partLBS @IO (T.pack $ "files[" <> show n <> "]") content)+          (partFileRequestBody @IO (T.pack $ "files[" <> show n <> "]") "" content)             { partFilename = Just (T.unpack filename)             , partContentType = Just (defaultMimeLookup filename)             }@@ -456,7 +456,7 @@   action GetFollowupMessage {} = getWith   action (EditFollowupMessage _ _ _ cm) = \u o -> do     let filePart CreateMessageAttachment {filename, content} n =-          (partLBS @IO (T.pack $ "files[" <> show n <> "]") content)+          (partFileRequestBody @IO (T.pack $ "files[" <> show n <> "]") "" content)             { partFilename = Just (T.unpack filename)             , partContentType = Just (defaultMimeLookup filename)             }
Calamity/HTTP/Webhook.hs view
@@ -183,7 +183,7 @@   action (DeleteWebhookToken _ _) = deleteWith   action (ExecuteWebhook _ _ wh) = \u o -> do     let filePart CreateMessageAttachment {filename, content} n =-          (partLBS @IO (T.pack $ "files[" <> show n <> "]") content)+          (partFileRequestBody @IO (T.pack $ "files[" <> show n <> "]") "" content)             { partFilename = Just (T.unpack filename)             , partContentType = Just (defaultMimeLookup filename)             }
ChangeLog.md view
@@ -1,5 +1,10 @@ # Changelog for Calamity +## 0.10.0.0+++ Updated `CreateMessageAttachment.content` to be a `Network.HTTP.Client.RequestBody`+  to allow for easy streaming of uploads+ ## 0.9.0.0  + Require tls >= 1.7
README.md view
@@ -57,9 +57,8 @@ {- cabal:   build-depends:      base >= 4.13 && < 5-     , calamity >= 0.3.0.0+     , calamity >= 0.10.0.0      , optics >= 0.4.1 && < 0.5-     , lens >= 5.1 && < 6      , di-polysemy ^>= 0.2      , di >= 1.3 && < 2      , df1 >= 0.3 && < 0.5@@ -68,44 +67,51 @@      , polysemy-plugin >= 0.3 && <0.5      , stm >= 2.5 && <3      , text-show >= 3.8 && <4+     , http-client ^>= 0.7 -}  {-# OPTIONS_GHC -fplugin=Polysemy.Plugin #-} +{-# LANGUAGE ApplicativeDo #-}+{-# LANGUAGE BlockArguments #-} {-# LANGUAGE DataKinds #-} {-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE GADTs #-}+{-# LANGUAGE ImportQualifiedPost #-}+{-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE OverloadedLabels #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE PolyKinds #-} {-# LANGUAGE ScopedTypeVariables #-}-{-# LANGUAGE TypeApplications #-} {-# LANGUAGE TemplateHaskell #-}-{-# LANGUAGE BlockArguments #-}-{-# LANGUAGE ApplicativeDo #-}-{-# LANGUAGE FlexibleInstances #-}-{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE TypeApplications #-}+{-# LANGUAGE TypeOperators #-} {-# LANGUAGE UndecidableInstances #-}+{-# OPTIONS_GHC -fplugin=Polysemy.Plugin #-}  module Main (main) where  import Calamity import Calamity.Cache.InMemory import Calamity.Commands-import Calamity.Commands.Context (useFullContext)-import qualified Calamity.Interactions as I+import Calamity.Commands.Context (FullContext, useFullContext)+import Calamity.Interactions qualified as I import Calamity.Metrics.Noop+import Calamity.Utils.CDNUrl (assetHashFile) import Control.Concurrent-import Optics import Control.Monad-import qualified Data.Text as T-import qualified Di-import qualified DiPolysemy as DiP-import qualified Polysemy as P-import qualified Polysemy.Async as P-import qualified Polysemy.State as P+import Data.Foldable (for_)+import Data.Text qualified as T+import Di qualified+import DiPolysemy qualified as DiP+import Optics+import Polysemy qualified as P+import Polysemy.Async qualified as P+import Polysemy.State qualified as P import System.Environment (getEnv) import TextShow+import Network.HTTP.Client (RequestBody(RequestBodyLBS))  data MyViewState = MyViewState   { numOptions :: Int@@ -118,15 +124,25 @@ main = do   token <- T.pack <$> getEnv "BOT_TOKEN"   Di.new $ \di ->-    void . P.runFinal . P.embedToFinal . DiP.runDiToIO di+    void+      . P.runFinal+      . P.embedToFinal+      . DiP.runDiToIO di       . runCacheInMemory       . runMetricsNoop       . useConstantPrefix "!"       . useFullContext-      $ runBotIO (BotToken token) defaultIntents $ do-        addCommands $ do+      $ runBotIO (BotToken token) defaultIntents+      $ do+        void . addCommands $ do+          helpCommand           -- just some examples +          command @'[User] "pfp" \ctx u -> do+            Right pfp <- fetchAsset (u ^. #avatar)+            let name = maybe "default.png" assetHashFile (u ^. #avatar % #hash)+                file = CreateMessageAttachment name (Just "Your avatar") (Network.HTTP.Client.RequestBodyLBS pfp)+            void $ tell ctx file           command @'[User] "utest" \ctx u -> do             void . tell @T.Text ctx $ "got user: " <> showt u           command @'[Named "u" User, Named "u1" User] "utest2" \ctx u u1 -> do@@ -219,7 +235,27 @@                     void $ I.respond ("Thanks: " <> a <> " " <> b)                     I.endView () -              pure ()+        react @('CustomEvt (CtxCommandError FullContext)) \(CtxCommandError ctx e) -> do+          DiP.info $ "Command failed with reason: " <> showt e+          case e of+            ParseError n r ->+              void . tell ctx $+                "Failed to parse parameter: "+                  <> codeline n+                  <> ", with reason: "+                  <> codeblock' Nothing r+            CheckError n r ->+              void . tell ctx $+                "The following check failed: "+                  <> codeline n+                  <> ", with reason: "+                  <> codeblock' Nothing r+            InvokeError n r ->+              void . tell ctx $+                "The command: "+                  <> codeline n+                  <> ", failed with reason: "+                  <> codeblock' Nothing r ```  ## Disabling library logging
calamity.cabal view
@@ -1,6 +1,6 @@ cabal-version:      2.0 name:               calamity-version:            0.9.0.0+version:            0.10.0.0 synopsis:           A library for writing discord bots in haskell description:   Please see the README on GitHub at <https://github.com/simmsb/calamity#readme>@@ -195,9 +195,9 @@     , calamity-commands     >=0.4     && <0.5     , colour                >=2.3.5   && <2.4     , concurrent-extra      >=0.7     && <0.8+    , containers            >=0.6     && <0.7     , crypton-connection    >=0.2.6   && <0.4     , crypton-x509-system   >=1.6.6   && <1.7-    , containers            >=0.6     && <0.7     , data-default-class    >=0.1     && <0.2     , data-flags            >=0.0.3   && <0.1     , deepseq               >=1.4.4.0 && <2