calamity 0.1.14.2 → 0.1.14.3
raw patch · 5 files changed
+38/−13 lines, 5 filesPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
API changes (from Hackage documentation)
+ Calamity.Gateway.Types: instance GHC.Generics.Generic Calamity.Gateway.Types.ControlMessage
+ Calamity.Gateway.Types: instance GHC.Generics.Generic Calamity.Gateway.Types.ShardFlowControl
+ Calamity.Gateway.Types: instance TextShow.Classes.TextShow Calamity.Gateway.Types.ShardFlowControl
+ Calamity.Internal.AesonThings: CalamityJSONKeepNothing :: a -> CalamityJSONKeepNothing a
+ Calamity.Internal.AesonThings: [$sel:unCalamityJSONKeepNothing:CalamityJSONKeepNothing] :: CalamityJSONKeepNothing a -> a
+ Calamity.Internal.AesonThings: instance (Data.Typeable.Internal.Typeable a, GHC.Generics.Generic a, Data.Aeson.Types.Class.GToJSON Data.Aeson.Types.Generic.Zero (GHC.Generics.Rep a), Data.Aeson.Types.Class.GToEncoding Data.Aeson.Types.Generic.Zero (GHC.Generics.Rep a)) => Data.Aeson.Types.ToJSON.ToJSON (Calamity.Internal.AesonThings.CalamityJSONKeepNothing a)
+ Calamity.Internal.AesonThings: instance (Data.Typeable.Internal.Typeable a, GHC.Generics.Generic a, Data.Aeson.Types.FromJSON.GFromJSON Data.Aeson.Types.Generic.Zero (GHC.Generics.Rep a)) => Data.Aeson.Types.FromJSON.FromJSON (Calamity.Internal.AesonThings.CalamityJSONKeepNothing a)
+ Calamity.Internal.AesonThings: newtype CalamityJSONKeepNothing a
- Calamity.Cache.Eff: delDM :: forall r_a9w5r. MemberWithError CacheEff r_a9w5r => Snowflake DMChannel -> Sem r_a9w5r ()
+ Calamity.Cache.Eff: delDM :: forall r_a9wjX. MemberWithError CacheEff r_a9wjX => Snowflake DMChannel -> Sem r_a9wjX ()
- Calamity.Cache.Eff: delGuild :: forall r_a9w5k. MemberWithError CacheEff r_a9w5k => Snowflake Guild -> Sem r_a9w5k ()
+ Calamity.Cache.Eff: delGuild :: forall r_a9wjQ. MemberWithError CacheEff r_a9wjQ => Snowflake Guild -> Sem r_a9wjQ ()
- Calamity.Cache.Eff: delMessage :: forall r_a9w5M. MemberWithError CacheEff r_a9w5M => Snowflake Message -> Sem r_a9w5M ()
+ Calamity.Cache.Eff: delMessage :: forall r_a9wki. MemberWithError CacheEff r_a9wki => Snowflake Message -> Sem r_a9wki ()
- Calamity.Cache.Eff: delUnavailableGuild :: forall r_a9w5F. MemberWithError CacheEff r_a9w5F => Snowflake Guild -> Sem r_a9w5F ()
+ Calamity.Cache.Eff: delUnavailableGuild :: forall r_a9wkb. MemberWithError CacheEff r_a9wkb => Snowflake Guild -> Sem r_a9wkb ()
- Calamity.Cache.Eff: delUser :: forall r_a9w5y. MemberWithError CacheEff r_a9w5y => Snowflake User -> Sem r_a9w5y ()
+ Calamity.Cache.Eff: delUser :: forall r_a9wk4. MemberWithError CacheEff r_a9wk4 => Snowflake User -> Sem r_a9wk4 ()
- Calamity.Cache.Eff: getBotUser :: forall r_a9w5c. MemberWithError CacheEff r_a9w5c => Sem r_a9w5c (Maybe User)
+ Calamity.Cache.Eff: getBotUser :: forall r_a9wjI. MemberWithError CacheEff r_a9wjI => Sem r_a9wjI (Maybe User)
- Calamity.Cache.Eff: getDM :: forall r_a9w5o. MemberWithError CacheEff r_a9w5o => Snowflake DMChannel -> Sem r_a9w5o (Maybe DMChannel)
+ Calamity.Cache.Eff: getDM :: forall r_a9wjU. MemberWithError CacheEff r_a9wjU => Snowflake DMChannel -> Sem r_a9wjU (Maybe DMChannel)
- Calamity.Cache.Eff: getDMs :: forall r_a9w5q. MemberWithError CacheEff r_a9w5q => Sem r_a9w5q [DMChannel]
+ Calamity.Cache.Eff: getDMs :: forall r_a9wjW. MemberWithError CacheEff r_a9wjW => Sem r_a9wjW [DMChannel]
- Calamity.Cache.Eff: getGuild :: forall r_a9w5f. MemberWithError CacheEff r_a9w5f => Snowflake Guild -> Sem r_a9w5f (Maybe Guild)
+ Calamity.Cache.Eff: getGuild :: forall r_a9wjL. MemberWithError CacheEff r_a9wjL => Snowflake Guild -> Sem r_a9wjL (Maybe Guild)
- Calamity.Cache.Eff: getGuildChannel :: forall r_a9w5h. MemberWithError CacheEff r_a9w5h => Snowflake GuildChannel -> Sem r_a9w5h (Maybe GuildChannel)
+ Calamity.Cache.Eff: getGuildChannel :: forall r_a9wjN. MemberWithError CacheEff r_a9wjN => Snowflake GuildChannel -> Sem r_a9wjN (Maybe GuildChannel)
- Calamity.Cache.Eff: getGuilds :: forall r_a9w5j. MemberWithError CacheEff r_a9w5j => Sem r_a9w5j [Guild]
+ Calamity.Cache.Eff: getGuilds :: forall r_a9wjP. MemberWithError CacheEff r_a9wjP => Sem r_a9wjP [Guild]
- Calamity.Cache.Eff: getMessage :: forall r_a9w5J. MemberWithError CacheEff r_a9w5J => Snowflake Message -> Sem r_a9w5J (Maybe Message)
+ Calamity.Cache.Eff: getMessage :: forall r_a9wkf. MemberWithError CacheEff r_a9wkf => Snowflake Message -> Sem r_a9wkf (Maybe Message)
- Calamity.Cache.Eff: getMessages :: forall r_a9w5L. MemberWithError CacheEff r_a9w5L => Sem r_a9w5L [Message]
+ Calamity.Cache.Eff: getMessages :: forall r_a9wkh. MemberWithError CacheEff r_a9wkh => Sem r_a9wkh [Message]
- Calamity.Cache.Eff: getUnavailableGuilds :: forall r_a9w5E. MemberWithError CacheEff r_a9w5E => Sem r_a9w5E [Snowflake Guild]
+ Calamity.Cache.Eff: getUnavailableGuilds :: forall r_a9wka. MemberWithError CacheEff r_a9wka => Sem r_a9wka [Snowflake Guild]
- Calamity.Cache.Eff: getUser :: forall r_a9w5v. MemberWithError CacheEff r_a9w5v => Snowflake User -> Sem r_a9w5v (Maybe User)
+ Calamity.Cache.Eff: getUser :: forall r_a9wk1. MemberWithError CacheEff r_a9wk1 => Snowflake User -> Sem r_a9wk1 (Maybe User)
- Calamity.Cache.Eff: getUsers :: forall r_a9w5x. MemberWithError CacheEff r_a9w5x => Sem r_a9w5x [User]
+ Calamity.Cache.Eff: getUsers :: forall r_a9wk3. MemberWithError CacheEff r_a9wk3 => Sem r_a9wk3 [User]
- Calamity.Cache.Eff: isUnavailableGuild :: forall r_a9w5C. MemberWithError CacheEff r_a9w5C => Snowflake Guild -> Sem r_a9w5C Bool
+ Calamity.Cache.Eff: isUnavailableGuild :: forall r_a9wk8. MemberWithError CacheEff r_a9wk8 => Snowflake Guild -> Sem r_a9wk8 Bool
- Calamity.Cache.Eff: setBotUser :: forall r_a9w5a. MemberWithError CacheEff r_a9w5a => User -> Sem r_a9w5a ()
+ Calamity.Cache.Eff: setBotUser :: forall r_a9wjG. MemberWithError CacheEff r_a9wjG => User -> Sem r_a9wjG ()
- Calamity.Cache.Eff: setDM :: forall r_a9w5m. MemberWithError CacheEff r_a9w5m => DMChannel -> Sem r_a9w5m ()
+ Calamity.Cache.Eff: setDM :: forall r_a9wjS. MemberWithError CacheEff r_a9wjS => DMChannel -> Sem r_a9wjS ()
- Calamity.Cache.Eff: setGuild :: forall r_a9w5d. MemberWithError CacheEff r_a9w5d => Guild -> Sem r_a9w5d ()
+ Calamity.Cache.Eff: setGuild :: forall r_a9wjJ. MemberWithError CacheEff r_a9wjJ => Guild -> Sem r_a9wjJ ()
- Calamity.Cache.Eff: setMessage :: forall r_a9w5H. MemberWithError CacheEff r_a9w5H => Message -> Sem r_a9w5H ()
+ Calamity.Cache.Eff: setMessage :: forall r_a9wkd. MemberWithError CacheEff r_a9wkd => Message -> Sem r_a9wkd ()
- Calamity.Cache.Eff: setUnavailableGuild :: forall r_a9w5A. MemberWithError CacheEff r_a9w5A => Snowflake Guild -> Sem r_a9w5A ()
+ Calamity.Cache.Eff: setUnavailableGuild :: forall r_a9wk6. MemberWithError CacheEff r_a9wk6 => Snowflake Guild -> Sem r_a9wk6 ()
- Calamity.Cache.Eff: setUser :: forall r_a9w5t. MemberWithError CacheEff r_a9w5t => User -> Sem r_a9w5t ()
+ Calamity.Cache.Eff: setUser :: forall r_a9wjZ. MemberWithError CacheEff r_a9wjZ => User -> Sem r_a9wjZ ()
- Calamity.Commands.ParsePrefix: parsePrefix :: forall r_a79iO. MemberWithError ParsePrefix r_a79iO => Message -> Sem r_a79iO (Maybe (Text, Text))
+ Calamity.Commands.ParsePrefix: parsePrefix :: forall r_a79xk. MemberWithError ParsePrefix r_a79xk => Message -> Sem r_a79xk (Maybe (Text, Text))
- Calamity.Internal.LocalWriter: llisten :: forall o_aE3b r_aEjb a_XE3b. MemberWithError (LocalWriter o_aE3b) r_aEjb => Sem r_aEjb a_XE3b -> Sem r_aEjb (o_aE3b, a_XE3b)
+ Calamity.Internal.LocalWriter: llisten :: forall o_aEhH r_aExH a_XEhH. MemberWithError (LocalWriter o_aEhH) r_aExH => Sem r_aExH a_XEhH -> Sem r_aExH (o_aEhH, a_XEhH)
- Calamity.Internal.LocalWriter: ltell :: forall o_aE37 r_aEj9. MemberWithError (LocalWriter o_aE37) r_aEj9 => o_aE37 -> Sem r_aEj9 ()
+ Calamity.Internal.LocalWriter: ltell :: forall o_aEhD r_aExF. MemberWithError (LocalWriter o_aEhD) r_aExF => o_aEhD -> Sem r_aExF ()
- Calamity.Internal.RunIntoIO: intoIO :: forall p_aFmK r_aFmM r_aFrR. MemberWithError (IntoIO p_aFmK r_aFmM) r_aFrR => (p_aFmK -> Sem r_aFrR r_aFmM) -> Sem r_aFrR (p_aFmK -> IO (Maybe r_aFmM))
+ Calamity.Internal.RunIntoIO: intoIO :: forall p_aFBg r_aFBi r_aFGn. MemberWithError (IntoIO p_aFBg r_aFBi) r_aFGn => (p_aFBg -> Sem r_aFGn r_aFBi) -> Sem r_aFGn (p_aFBg -> IO (Maybe r_aFBi))
- Calamity.Metrics.Eff: addCounter :: forall r_aI92. MemberWithError MetricEff r_aI92 => Int -> Counter -> Sem r_aI92 Int
+ Calamity.Metrics.Eff: addCounter :: forall r_aIny. MemberWithError MetricEff r_aIny => Int -> Counter -> Sem r_aIny Int
- Calamity.Metrics.Eff: modifyGauge :: forall r_aI95. MemberWithError MetricEff r_aI95 => (Double -> Double) -> Gauge -> Sem r_aI95 Double
+ Calamity.Metrics.Eff: modifyGauge :: forall r_aInB. MemberWithError MetricEff r_aInB => (Double -> Double) -> Gauge -> Sem r_aInB Double
- Calamity.Metrics.Eff: observeHistogram :: forall r_aI98. MemberWithError MetricEff r_aI98 => Double -> Histogram -> Sem r_aI98 HistogramSample
+ Calamity.Metrics.Eff: observeHistogram :: forall r_aInE. MemberWithError MetricEff r_aInE => Double -> Histogram -> Sem r_aInE HistogramSample
- Calamity.Metrics.Eff: registerCounter :: forall r_aI8S. MemberWithError MetricEff r_aI8S => Text -> [(Text, Text)] -> Sem r_aI8S Counter
+ Calamity.Metrics.Eff: registerCounter :: forall r_aIno. MemberWithError MetricEff r_aIno => Text -> [(Text, Text)] -> Sem r_aIno Counter
- Calamity.Metrics.Eff: registerGauge :: forall r_aI8V. MemberWithError MetricEff r_aI8V => Text -> [(Text, Text)] -> Sem r_aI8V Gauge
+ Calamity.Metrics.Eff: registerGauge :: forall r_aInr. MemberWithError MetricEff r_aInr => Text -> [(Text, Text)] -> Sem r_aInr Gauge
- Calamity.Metrics.Eff: registerHistogram :: forall r_aI8Y. MemberWithError MetricEff r_aI8Y => Text -> [(Text, Text)] -> [Double] -> Sem r_aI8Y Histogram
+ Calamity.Metrics.Eff: registerHistogram :: forall r_aInu. MemberWithError MetricEff r_aInu => Text -> [(Text, Text)] -> [Double] -> Sem r_aInu Histogram
Files
- ChangeLog.md +6/−0
- calamity.cabal +2/−2
- src/Calamity/Gateway/Shard.hs +10/−8
- src/Calamity/Gateway/Types.hs +6/−3
- src/Calamity/Internal/AesonThings.hs +14/−0
ChangeLog.md view
@@ -1,5 +1,11 @@ # Changelog for Calamity +## 0.1.14.3++*2020-06-10*++* Fix some bugs in the gateway+ ## 0.1.14.2 *2020-06-09*
calamity.cabal view
@@ -4,10 +4,10 @@ -- -- see: https://github.com/sol/hpack ----- hash: 2a89c6e83c7636ffaf0e0f4474f87664467293685a6a21eea8fc9cc332e6e39b+-- hash: 9dad5aee926a8bb786caf940edbfef86c22f29c508eefff636e965a4d10a01af name: calamity-version: 0.1.14.2+version: 0.1.14.3 synopsis: A library for writing discord bots description: Please see the README on GitHub at <https://github.com/nitros12/calamity#readme> category: Network, Web
src/Calamity/Gateway/Shard.hs view
@@ -50,6 +50,7 @@ import Prelude hiding ( error ) import Wuss+import qualified Data.Text.Lazy as L data Websocket m a where RunWebsocket :: Text -> Text -> (Connection -> m a) -> Websocket m a@@ -140,12 +141,12 @@ r <- atomically $ tryWriteTBMQueue' outqueue (Control v) when r inner - handleWSException :: SomeException -> IO (Either ControlMessage a)+ handleWSException :: SomeException -> IO (Either (ControlMessage, Maybe Text) a) handleWSException e = pure $ case fromException e of Just (CloseRequest code _) | code `elem` [1000, 4004, 4010, 4011] ->- Left ShutDownShard- _ -> Left RestartShard+ Left (ShutDownShard, Nothing)+ e -> Left (RestartShard, Just . L.pack . show $ e) discordStream :: P.Members '[LogEff, MetricEff, P.Embed IO, P.Final IO] r => Connection -> TBMQueue ShardMsg -> Sem r () discordStream ws outqueue = inner@@ -153,7 +154,8 @@ msg <- P.embed $ Ex.catchAny (Right <$> receiveData ws) handleWSException case msg of- Left c ->+ Left (c, reason) -> do+ whenJust reason (\r -> error $ "Shard closed with reason: " <> r) P.embed . atomically $ writeTBMQueue outqueue (Control c) Right msg' -> do@@ -178,7 +180,7 @@ info $ "starting up shard "+| (shard ^. #shardID) |+" of "+| (shard ^. #shardCount) |+"" - innerLoopVal <- websocketToIO $ runWebsocket host' "/?v=7&encoding=json" innerloop+ innerLoopVal <- websocketToIO $ runWebsocket host' "/?v=6&encoding=json" innerloop case innerLoopVal of ShardFlowShutDown -> do@@ -268,13 +270,13 @@ InvalidSession resumable -> do if resumable- then do+ then+ info "Received resumable invalid session"+ else do info "Received non-resumable invalid session, sleeping for 15 seconds then retrying" P.atomicModify (#sessionID .~ Nothing) P.atomicModify (#seqNum .~ Nothing) P.embed $ threadDelay (15 * 1000 * 1000)- else- info "Received resumable invalid session" P.throw ShardFlowRestart Hello interval -> do
src/Calamity/Gateway/Types.hs view
@@ -41,6 +41,8 @@ import qualified Polysemy as P import qualified Polysemy.Async as P import qualified Polysemy.AtomicState as P+import qualified TextShow.Generic as TSG+import TextShow (TextShow) type ShardC r = (P.Members '[LogEff, P.AtomicState ShardState, P.Embed IO, P.Final IO, P.Async, MetricEff] r)@@ -214,7 +216,7 @@ , afk :: Bool } deriving ( Show, Generic )- deriving ToJSON via CalamityJSON StatusUpdateData+ deriving ToJSON via CalamityJSONKeepNothing StatusUpdateData data ResumeData = ResumeData { token :: Text@@ -248,12 +250,13 @@ = RestartShard | ShutDownShard | SendPresence StatusUpdateData- deriving ( Show )+ deriving ( Show, Generic ) data ShardFlowControl = ShardFlowRestart | ShardFlowShutDown- deriving ( Show )+ deriving ( Show, Generic )+ deriving ( TextShow ) via TSG.FromGeneric ShardFlowControl data Shard = Shard { shardID :: Int
src/Calamity/Internal/AesonThings.hs view
@@ -9,6 +9,7 @@ , DefaultToZero , DefaultToFalse , CalamityJSON(..)+ , CalamityJSONKeepNothing(..) , jsonOptions , jsonOptionsKeepNothing ) where @@ -113,6 +114,19 @@ instance (Typeable a, Generic a, GFromJSON Zero (Rep a)) => FromJSON (CalamityJSON a) where parseJSON = fmap CalamityJSON . genericParseJSON jsonOptions++-- | version that keeps Nothing fields+newtype CalamityJSONKeepNothing a = CalamityJSONKeepNothing+ { unCalamityJSONKeepNothing :: a+ }++instance (Typeable a, Generic a, GToJSON Zero (Rep a), GToEncoding Zero (Rep a)) => ToJSON (CalamityJSONKeepNothing a) where+ toJSON = genericToJSON jsonOptionsKeepNothing . unCalamityJSONKeepNothing++ toEncoding = genericToEncoding jsonOptionsKeepNothing . unCalamityJSONKeepNothing++instance (Typeable a, Generic a, GFromJSON Zero (Rep a)) => FromJSON (CalamityJSONKeepNothing a) where+ parseJSON = fmap CalamityJSONKeepNothing . genericParseJSON jsonOptionsKeepNothing jsonOptions :: Options jsonOptions = defaultOptions { sumEncoding = UntaggedValue