calamity 0.1.22.0 → 0.1.22.1
raw patch · 7 files changed
+84/−56 lines, 7 filesdep ~bytestringdep ~megaparsecdep ~timePVP: major bump suggested
API removals or changes: PVP suggests a major version bump
Dependency ranges changed: bytestring, megaparsec, time, unboxing-vector
API changes (from Hackage documentation)
+ Calamity.HTTP.Internal.Request: modifyResponse :: Request a => a -> Value -> Value
- Calamity.Cache.Eff: delDM :: forall r_a9hxq. MemberWithError CacheEff r_a9hxq => Snowflake DMChannel -> Sem r_a9hxq ()
+ Calamity.Cache.Eff: delDM :: forall r_a9h1l. MemberWithError CacheEff r_a9h1l => Snowflake DMChannel -> Sem r_a9h1l ()
- Calamity.Cache.Eff: delGuild :: forall r_a9hxj. MemberWithError CacheEff r_a9hxj => Snowflake Guild -> Sem r_a9hxj ()
+ Calamity.Cache.Eff: delGuild :: forall r_a9h1e. MemberWithError CacheEff r_a9h1e => Snowflake Guild -> Sem r_a9h1e ()
- Calamity.Cache.Eff: delMessage :: forall r_a9hxL. MemberWithError CacheEff r_a9hxL => Snowflake Message -> Sem r_a9hxL ()
+ Calamity.Cache.Eff: delMessage :: forall r_a9h1G. MemberWithError CacheEff r_a9h1G => Snowflake Message -> Sem r_a9h1G ()
- Calamity.Cache.Eff: delUnavailableGuild :: forall r_a9hxE. MemberWithError CacheEff r_a9hxE => Snowflake Guild -> Sem r_a9hxE ()
+ Calamity.Cache.Eff: delUnavailableGuild :: forall r_a9h1z. MemberWithError CacheEff r_a9h1z => Snowflake Guild -> Sem r_a9h1z ()
- Calamity.Cache.Eff: delUser :: forall r_a9hxx. MemberWithError CacheEff r_a9hxx => Snowflake User -> Sem r_a9hxx ()
+ Calamity.Cache.Eff: delUser :: forall r_a9h1s. MemberWithError CacheEff r_a9h1s => Snowflake User -> Sem r_a9h1s ()
- Calamity.Cache.Eff: getBotUser :: forall r_a9hxb. MemberWithError CacheEff r_a9hxb => Sem r_a9hxb (Maybe User)
+ Calamity.Cache.Eff: getBotUser :: forall r_a9h16. MemberWithError CacheEff r_a9h16 => Sem r_a9h16 (Maybe User)
- Calamity.Cache.Eff: getDM :: forall r_a9hxn. MemberWithError CacheEff r_a9hxn => Snowflake DMChannel -> Sem r_a9hxn (Maybe DMChannel)
+ Calamity.Cache.Eff: getDM :: forall r_a9h1i. MemberWithError CacheEff r_a9h1i => Snowflake DMChannel -> Sem r_a9h1i (Maybe DMChannel)
- Calamity.Cache.Eff: getDMs :: forall r_a9hxp. MemberWithError CacheEff r_a9hxp => Sem r_a9hxp [DMChannel]
+ Calamity.Cache.Eff: getDMs :: forall r_a9h1k. MemberWithError CacheEff r_a9h1k => Sem r_a9h1k [DMChannel]
- Calamity.Cache.Eff: getGuild :: forall r_a9hxe. MemberWithError CacheEff r_a9hxe => Snowflake Guild -> Sem r_a9hxe (Maybe Guild)
+ Calamity.Cache.Eff: getGuild :: forall r_a9h19. MemberWithError CacheEff r_a9h19 => Snowflake Guild -> Sem r_a9h19 (Maybe Guild)
- Calamity.Cache.Eff: getGuildChannel :: forall r_a9hxg. MemberWithError CacheEff r_a9hxg => Snowflake GuildChannel -> Sem r_a9hxg (Maybe GuildChannel)
+ Calamity.Cache.Eff: getGuildChannel :: forall r_a9h1b. MemberWithError CacheEff r_a9h1b => Snowflake GuildChannel -> Sem r_a9h1b (Maybe GuildChannel)
- Calamity.Cache.Eff: getGuilds :: forall r_a9hxi. MemberWithError CacheEff r_a9hxi => Sem r_a9hxi [Guild]
+ Calamity.Cache.Eff: getGuilds :: forall r_a9h1d. MemberWithError CacheEff r_a9h1d => Sem r_a9h1d [Guild]
- Calamity.Cache.Eff: getMessage :: forall r_a9hxI. MemberWithError CacheEff r_a9hxI => Snowflake Message -> Sem r_a9hxI (Maybe Message)
+ Calamity.Cache.Eff: getMessage :: forall r_a9h1D. MemberWithError CacheEff r_a9h1D => Snowflake Message -> Sem r_a9h1D (Maybe Message)
- Calamity.Cache.Eff: getMessages :: forall r_a9hxK. MemberWithError CacheEff r_a9hxK => Sem r_a9hxK [Message]
+ Calamity.Cache.Eff: getMessages :: forall r_a9h1F. MemberWithError CacheEff r_a9h1F => Sem r_a9h1F [Message]
- Calamity.Cache.Eff: getUnavailableGuilds :: forall r_a9hxD. MemberWithError CacheEff r_a9hxD => Sem r_a9hxD [Snowflake Guild]
+ Calamity.Cache.Eff: getUnavailableGuilds :: forall r_a9h1y. MemberWithError CacheEff r_a9h1y => Sem r_a9h1y [Snowflake Guild]
- Calamity.Cache.Eff: getUser :: forall r_a9hxu. MemberWithError CacheEff r_a9hxu => Snowflake User -> Sem r_a9hxu (Maybe User)
+ Calamity.Cache.Eff: getUser :: forall r_a9h1p. MemberWithError CacheEff r_a9h1p => Snowflake User -> Sem r_a9h1p (Maybe User)
- Calamity.Cache.Eff: getUsers :: forall r_a9hxw. MemberWithError CacheEff r_a9hxw => Sem r_a9hxw [User]
+ Calamity.Cache.Eff: getUsers :: forall r_a9h1r. MemberWithError CacheEff r_a9h1r => Sem r_a9h1r [User]
- Calamity.Cache.Eff: isUnavailableGuild :: forall r_a9hxB. MemberWithError CacheEff r_a9hxB => Snowflake Guild -> Sem r_a9hxB Bool
+ Calamity.Cache.Eff: isUnavailableGuild :: forall r_a9h1w. MemberWithError CacheEff r_a9h1w => Snowflake Guild -> Sem r_a9h1w Bool
- Calamity.Cache.Eff: setBotUser :: forall r_a9hx9. MemberWithError CacheEff r_a9hx9 => User -> Sem r_a9hx9 ()
+ Calamity.Cache.Eff: setBotUser :: forall r_a9h14. MemberWithError CacheEff r_a9h14 => User -> Sem r_a9h14 ()
- Calamity.Cache.Eff: setDM :: forall r_a9hxl. MemberWithError CacheEff r_a9hxl => DMChannel -> Sem r_a9hxl ()
+ Calamity.Cache.Eff: setDM :: forall r_a9h1g. MemberWithError CacheEff r_a9h1g => DMChannel -> Sem r_a9h1g ()
- Calamity.Cache.Eff: setGuild :: forall r_a9hxc. MemberWithError CacheEff r_a9hxc => Guild -> Sem r_a9hxc ()
+ Calamity.Cache.Eff: setGuild :: forall r_a9h17. MemberWithError CacheEff r_a9h17 => Guild -> Sem r_a9h17 ()
- Calamity.Cache.Eff: setMessage :: forall r_a9hxG. MemberWithError CacheEff r_a9hxG => Message -> Sem r_a9hxG ()
+ Calamity.Cache.Eff: setMessage :: forall r_a9h1B. MemberWithError CacheEff r_a9h1B => Message -> Sem r_a9h1B ()
- Calamity.Cache.Eff: setUnavailableGuild :: forall r_a9hxz. MemberWithError CacheEff r_a9hxz => Snowflake Guild -> Sem r_a9hxz ()
+ Calamity.Cache.Eff: setUnavailableGuild :: forall r_a9h1u. MemberWithError CacheEff r_a9h1u => Snowflake Guild -> Sem r_a9h1u ()
- Calamity.Cache.Eff: setUser :: forall r_a9hxs. MemberWithError CacheEff r_a9hxs => User -> Sem r_a9hxs ()
+ Calamity.Cache.Eff: setUser :: forall r_a9h1n. MemberWithError CacheEff r_a9h1n => User -> Sem r_a9h1n ()
- Calamity.Commands.ParsePrefix: parsePrefix :: forall r_a6UjU. MemberWithError ParsePrefix r_a6UjU => Message -> Sem r_a6UjU (Maybe (Text, Text))
+ Calamity.Commands.ParsePrefix: parsePrefix :: forall r_a6Und. MemberWithError ParsePrefix r_a6Und => Message -> Sem r_a6Und (Maybe (Text, Text))
- Calamity.HTTP: invoke :: (Request a, BotC r, FromJSON (Result a)) => a -> Sem r (Either RestError (Result a))
+ Calamity.HTTP: invoke :: (BotC r, Request a, FromJSON (Result a)) => a -> Sem r (Either RestError (Result a))
- Calamity.HTTP.Internal.Request: invoke :: (Request a, BotC r, FromJSON (Result a)) => a -> Sem r (Either RestError (Result a))
+ Calamity.HTTP.Internal.Request: invoke :: (BotC r, Request a, FromJSON (Result a)) => a -> Sem r (Either RestError (Result a))
- Calamity.Internal.LocalWriter: llisten :: forall o_arjZ r_arrw a_XrjZ. MemberWithError (LocalWriter o_arjZ) r_arrw => Sem r_arrw a_XrjZ -> Sem r_arrw (o_arjZ, a_XrjZ)
+ Calamity.Internal.LocalWriter: llisten :: forall o_arkt r_ars0 a_Xrkt. MemberWithError (LocalWriter o_arkt) r_ars0 => Sem r_ars0 a_Xrkt -> Sem r_ars0 (o_arkt, a_Xrkt)
- Calamity.Internal.LocalWriter: ltell :: forall o_arjV r_arru. MemberWithError (LocalWriter o_arjV) r_arru => o_arjV -> Sem r_arru ()
+ Calamity.Internal.LocalWriter: ltell :: forall o_arkp r_arrY. MemberWithError (LocalWriter o_arkp) r_arrY => o_arkp -> Sem r_arrY ()
- Calamity.Metrics.Eff: addCounter :: forall r_auWH. MemberWithError MetricEff r_auWH => Int -> Counter -> Sem r_auWH Int
+ Calamity.Metrics.Eff: addCounter :: forall r_auXv. MemberWithError MetricEff r_auXv => Int -> Counter -> Sem r_auXv Int
- Calamity.Metrics.Eff: modifyGauge :: forall r_auWK. MemberWithError MetricEff r_auWK => (Double -> Double) -> Gauge -> Sem r_auWK Double
+ Calamity.Metrics.Eff: modifyGauge :: forall r_auXy. MemberWithError MetricEff r_auXy => (Double -> Double) -> Gauge -> Sem r_auXy Double
- Calamity.Metrics.Eff: observeHistogram :: forall r_auWN. MemberWithError MetricEff r_auWN => Double -> Histogram -> Sem r_auWN HistogramSample
+ Calamity.Metrics.Eff: observeHistogram :: forall r_auXB. MemberWithError MetricEff r_auXB => Double -> Histogram -> Sem r_auXB HistogramSample
- Calamity.Metrics.Eff: registerCounter :: forall r_auWx. MemberWithError MetricEff r_auWx => Text -> [(Text, Text)] -> Sem r_auWx Counter
+ Calamity.Metrics.Eff: registerCounter :: forall r_auXl. MemberWithError MetricEff r_auXl => Text -> [(Text, Text)] -> Sem r_auXl Counter
- Calamity.Metrics.Eff: registerGauge :: forall r_auWA. MemberWithError MetricEff r_auWA => Text -> [(Text, Text)] -> Sem r_auWA Gauge
+ Calamity.Metrics.Eff: registerGauge :: forall r_auXo. MemberWithError MetricEff r_auXo => Text -> [(Text, Text)] -> Sem r_auXo Gauge
- Calamity.Metrics.Eff: registerHistogram :: forall r_auWD. MemberWithError MetricEff r_auWD => Text -> [(Text, Text)] -> [Double] -> Sem r_auWD Histogram
+ Calamity.Metrics.Eff: registerHistogram :: forall r_auXr. MemberWithError MetricEff r_auXr => Text -> [(Text, Text)] -> [Double] -> Sem r_auXr Histogram
Files
- ChangeLog.md +7/−0
- calamity.cabal +6/−6
- src/Calamity/HTTP.hs +2/−2
- src/Calamity/HTTP/Guild.hs +7/−0
- src/Calamity/HTTP/Internal/Request.hs +20/−14
- src/Calamity/Types/Model/Guild/Emoji.hs +3/−1
- src/Calamity/Types/Model/Presence/Presence.hs +39/−33
ChangeLog.md view
@@ -1,5 +1,12 @@ # Changelog for Calamity +## 0.1.22.1+++ Bump some upper bounds++ Fix parsing of members from GetGuildMember++ Make game field in Presence correctly optional++ Make roles field in Presence updates correctly optional (internal)+ ## 0.1.22.0 * Update to gateway/http endpoint v8.
calamity.cabal view
@@ -4,10 +4,10 @@ -- -- see: https://github.com/sol/hpack ----- hash: b3783e8d7e7db062a2aa10f4642564dea368efe4f9130957aaa0259e2f96e54e+-- hash: a5846981d4aa83053956a4f860e1145f8c044323b2d869cf4a670bad5106addf name: calamity-version: 0.1.22.0+version: 0.1.22.1 synopsis: A library for writing discord bots in haskell description: Please see the README on GitHub at <https://github.com/nitros12/calamity#readme> category: Network, Web@@ -140,7 +140,7 @@ aeson >=1.4 && <2 , async >=2.2 && <3 , base >=4.12 && <5- , bytestring >=0.10 && <0.11+ , bytestring >=0.10 && <0.12 , colour >=2.3.5 && <2.4 , concurrent-extra >=0.7 && <0.8 , containers >=0.6 && <0.7@@ -162,7 +162,7 @@ , http-types >=0.12 && <0.13 , lens >=4.18 && <5 , lens-aeson >=1.1 && <2- , megaparsec >=8 && <9+ , megaparsec >=8 && <10 , mime-types >=0.1 && <0.2 , mtl >=2.2 && <3 , polysemy >=1.3 && <2@@ -175,10 +175,10 @@ , stm-containers >=1.1 && <2 , text >=1.2 && <2 , text-show >=3.8 && <4- , time >=1.8 && <1.11+ , time >=1.8 && <1.12 , typerep-map >=0.3 && <0.4 , unagi-chan >=0.4 && <0.5- , unboxing-vector >=0.1 && <0.2+ , unboxing-vector >=0.2 && <0.3 , unordered-containers >=0.2 && <0.3 , vector >=0.12 && <0.13 , websockets >=0.12 && <0.13
src/Calamity/HTTP.hs view
@@ -1,7 +1,7 @@ -- | Combined http request stuff module Calamity.HTTP- ( module Calamity.HTTP.AuditLog- , module Calamity.HTTP.Internal.Request+ ( invoke+ , module Calamity.HTTP.AuditLog , module Calamity.HTTP.Channel , module Calamity.HTTP.Emoji , module Calamity.HTTP.Guild
src/Calamity/HTTP/Guild.hs view
@@ -27,6 +27,7 @@ import Control.Lens hiding ( (.=) ) import Data.Aeson+import Data.Aeson.Lens import Data.Colour ( Colour ) import Data.Default.Class import Data.Maybe@@ -280,3 +281,9 @@ action (BeginGuildPrune _ d r) = postEmptyP (param "days" .~ [showt d] >>> param "compute_prune_count" .~ [showt r]) action (GetGuildVoiceRegions _) = getWith action (GetGuildInvites _) = getWith++ -- this is a bit of a hack+ -- TODO: add something to allow for contextual parsing+ modifyResponse (GetGuildMember (getID @Guild -> gid) _) = _Object . at "guild_id" ?~ _String # showt (fromSnowflake gid)+ modifyResponse (ListGuildMembers (getID @Guild -> gid) _) = values . _Object . at "guild_id" ?~ _String # showt (fromSnowflake gid)+ modifyResponse _ = Prelude.id
src/Calamity/HTTP/Internal/Request.hs view
@@ -1,6 +1,7 @@ -- | Generic Request type module Calamity.HTTP.Internal.Request ( Request(..)+ , invoke , postWith' , postWithP' , putWith'@@ -67,25 +68,30 @@ action :: a -> Options -> Session -> String -> IO (Response LB.ByteString) - invoke :: (BotC r, FromJSON (Calamity.HTTP.Internal.Request.Result a)) => a -> Sem r (Either RestError (Calamity.HTTP.Internal.Request.Result a))- invoke a = do- rlState' <- P.asks (^. #rlState)- session <- P.asks (^. #session)- token' <- P.asks (^. #token)+ modifyResponse :: a -> Value -> Value+ modifyResponse _ = id - let route' = route a - inFlightRequests <- registerGauge "inflight_requests" [("route", route' ^. #path)]- totalRequests <- registerCounter "total_requests" [("route", route' ^. #path)]- void $ modifyGauge (+ 1) inFlightRequests- void $ addCounter 1 totalRequests+invoke :: (BotC r, Request a, FromJSON (Calamity.HTTP.Internal.Request.Result a)) => a -> Sem r (Either RestError (Calamity.HTTP.Internal.Request.Result a))+invoke a = do+ rlState' <- P.asks (^. #rlState)+ session <- P.asks (^. #session)+ token' <- P.asks (^. #token) - resp <- attr "route" (route' ^. #path) $ doRequest rlState' route'- (action a (requestOptions token') session (route' ^. #path . unpacked))+ let route' = route a - void $ modifyGauge (subtract 1) inFlightRequests+ inFlightRequests <- registerGauge "inflight_requests" [("route", route' ^. #path)]+ totalRequests <- registerCounter "total_requests" [("route", route' ^. #path)]+ void $ modifyGauge (+ 1) inFlightRequests+ void $ addCounter 1 totalRequests - P.runError $ (fromResult . fromJSON) =<< (fromJSONDecode . readResp) =<< extractRight resp+ resp <- attr "route" (route' ^. #path) $ doRequest rlState' route'+ (action a (requestOptions token') session (route' ^. #path . unpacked))++ void $ modifyGauge (subtract 1) inFlightRequests++ P.runError $ (fromResult . fromJSON . modifyResponse a) =<< (fromJSONDecode . readResp) =<< extractRight resp+ defaultRequestOptions :: Options defaultRequestOptions = defaults
src/Calamity/Types/Model/Guild/Emoji.hs view
@@ -34,7 +34,9 @@ deriving ( Eq, Show, Generic ) deriving ( TextShow ) via TSG.FromGeneric Emoji deriving ( ToJSON ) via CalamityJSON Emoji- deriving ( FromJSON ) via WithSpecialCases '["user" `ExtractFieldFrom` "id"] Emoji+ deriving ( FromJSON ) via WithSpecialCases '["user" `ExtractFieldFrom` "id"+ ,"roles" `IfNoneThen` DefaultToEmptyArray+ ] Emoji deriving ( HasID Emoji ) via HasIDField "id" Emoji emojiAsRawEmoji :: Emoji -> RawEmoji
src/Calamity/Types/Model/Presence/Presence.hs view
@@ -1,43 +1,49 @@ -- | User presences module Calamity.Types.Model.Presence.Presence- ( Presence(..)- , ClientStatus(..) ) where+ ( Presence (..),+ ClientStatus (..),+ )+where -import Calamity.Internal.AesonThings+import Calamity.Internal.AesonThings import {-# SOURCE #-} Calamity.Types.Model.Guild.Guild-import Calamity.Types.Model.Presence.Activity-import Calamity.Types.Model.User-import Calamity.Types.Snowflake--import Data.Aeson-import qualified Data.Override as O-import Data.Override.Aeson ()-import Data.Text.Lazy ( Text )--import GHC.Generics--import TextShow-import qualified TextShow.Generic as TSG+import Calamity.Types.Model.Presence.Activity+import Calamity.Types.Model.User+import Calamity.Types.Snowflake+import Data.Aeson+import qualified Data.Override as O+import Data.Override.Aeson ()+import Data.Text.Lazy (Text)+import GHC.Generics+import TextShow+import qualified TextShow.Generic as TSG data Presence = Presence- { user :: Snowflake User- , game :: Maybe Activity- , guildID :: Snowflake Guild- , status :: StatusType- , clientStatus :: ClientStatus+ { user :: Snowflake User,+ game :: Maybe Activity,+ guildID :: Snowflake Guild,+ status :: StatusType,+ clientStatus :: ClientStatus }- deriving ( Eq, Show, Generic )- deriving ( TextShow ) via TSG.FromGeneric Presence- deriving ( ToJSON, FromJSON ) via CalamityJSON- (O.Override Presence '["user" `O.As` Partial User])- deriving ( HasID User ) via HasIDField "user" Presence- deriving ( HasID Guild ) via HasIDField "guildID" Presence+ deriving (Eq, Show, Generic)+ deriving (TextShow) via TSG.FromGeneric Presence+ deriving+ (ToJSON)+ via CalamityJSON+ (O.Override Presence '["user" `O.As` Partial User])+ deriving+ (FromJSON)+ via WithSpecialCases+ '["user" `ExtractFieldFrom` "user"]+ Presence+ deriving (HasID User) via HasIDField "user" Presence+ deriving (HasID Guild) via HasIDField "guildID" Presence data ClientStatus = ClientStatus- { desktop :: Maybe Text- , mobile :: Maybe Text- , web :: Maybe Text+ { desktop :: Maybe Text,+ mobile :: Maybe Text,+ web :: Maybe Text }- deriving ( Eq, Show, Generic )- deriving ( TextShow ) via TSG.FromGeneric ClientStatus- deriving ( ToJSON, FromJSON ) via CalamityJSON ClientStatus+ deriving (Eq, Show, Generic)+ deriving (TextShow) via TSG.FromGeneric ClientStatus+ deriving (ToJSON, FromJSON) via CalamityJSON ClientStatus