packages feed

calamity 0.1.30.3 → 0.1.30.4

raw patch · 8 files changed

+111/−64 lines, 8 filesPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

API changes (from Hackage documentation)

+ Calamity.Client.Client: runBotIO'' :: forall r a. Members '[LogEff, MetricEff, CacheEff, Reader Client, AtomicState EventHandlers, Embed IO, Final IO, Async] r => Token -> Intents -> Maybe StatusUpdateData -> Sem (Reader Client : r) a -> Sem r (Maybe StartupError)
- Calamity.Cache.Eff: delDM :: forall r_acVj0. MemberWithError CacheEff r_acVj0 => Snowflake DMChannel -> Sem r_acVj0 ()
+ Calamity.Cache.Eff: delDM :: forall r_acViF. MemberWithError CacheEff r_acViF => Snowflake DMChannel -> Sem r_acViF ()
- Calamity.Cache.Eff: delGuild :: forall r_acViT. MemberWithError CacheEff r_acViT => Snowflake Guild -> Sem r_acViT ()
+ Calamity.Cache.Eff: delGuild :: forall r_acViy. MemberWithError CacheEff r_acViy => Snowflake Guild -> Sem r_acViy ()
- Calamity.Cache.Eff: delMessage :: forall r_acVjl. MemberWithError CacheEff r_acVjl => Snowflake Message -> Sem r_acVjl ()
+ Calamity.Cache.Eff: delMessage :: forall r_acVj0. MemberWithError CacheEff r_acVj0 => Snowflake Message -> Sem r_acVj0 ()
- Calamity.Cache.Eff: delUnavailableGuild :: forall r_acVje. MemberWithError CacheEff r_acVje => Snowflake Guild -> Sem r_acVje ()
+ Calamity.Cache.Eff: delUnavailableGuild :: forall r_acViT. MemberWithError CacheEff r_acViT => Snowflake Guild -> Sem r_acViT ()
- Calamity.Cache.Eff: delUser :: forall r_acVj7. MemberWithError CacheEff r_acVj7 => Snowflake User -> Sem r_acVj7 ()
+ Calamity.Cache.Eff: delUser :: forall r_acViM. MemberWithError CacheEff r_acViM => Snowflake User -> Sem r_acViM ()
- Calamity.Cache.Eff: getBotUser :: forall r_acViL. MemberWithError CacheEff r_acViL => Sem r_acViL (Maybe User)
+ Calamity.Cache.Eff: getBotUser :: forall r_acViq. MemberWithError CacheEff r_acViq => Sem r_acViq (Maybe User)
- Calamity.Cache.Eff: getDM :: forall r_acViX. MemberWithError CacheEff r_acViX => Snowflake DMChannel -> Sem r_acViX (Maybe DMChannel)
+ Calamity.Cache.Eff: getDM :: forall r_acViC. MemberWithError CacheEff r_acViC => Snowflake DMChannel -> Sem r_acViC (Maybe DMChannel)
- Calamity.Cache.Eff: getDMs :: forall r_acViZ. MemberWithError CacheEff r_acViZ => Sem r_acViZ [DMChannel]
+ Calamity.Cache.Eff: getDMs :: forall r_acViE. MemberWithError CacheEff r_acViE => Sem r_acViE [DMChannel]
- Calamity.Cache.Eff: getGuild :: forall r_acViO. MemberWithError CacheEff r_acViO => Snowflake Guild -> Sem r_acViO (Maybe Guild)
+ Calamity.Cache.Eff: getGuild :: forall r_acVit. MemberWithError CacheEff r_acVit => Snowflake Guild -> Sem r_acVit (Maybe Guild)
- Calamity.Cache.Eff: getGuildChannel :: forall r_acViQ. MemberWithError CacheEff r_acViQ => Snowflake GuildChannel -> Sem r_acViQ (Maybe GuildChannel)
+ Calamity.Cache.Eff: getGuildChannel :: forall r_acViv. MemberWithError CacheEff r_acViv => Snowflake GuildChannel -> Sem r_acViv (Maybe GuildChannel)
- Calamity.Cache.Eff: getGuilds :: forall r_acViS. MemberWithError CacheEff r_acViS => Sem r_acViS [Guild]
+ Calamity.Cache.Eff: getGuilds :: forall r_acVix. MemberWithError CacheEff r_acVix => Sem r_acVix [Guild]
- Calamity.Cache.Eff: getMessage :: forall r_acVji. MemberWithError CacheEff r_acVji => Snowflake Message -> Sem r_acVji (Maybe Message)
+ Calamity.Cache.Eff: getMessage :: forall r_acViX. MemberWithError CacheEff r_acViX => Snowflake Message -> Sem r_acViX (Maybe Message)
- Calamity.Cache.Eff: getMessages :: forall r_acVjk. MemberWithError CacheEff r_acVjk => Sem r_acVjk [Message]
+ Calamity.Cache.Eff: getMessages :: forall r_acViZ. MemberWithError CacheEff r_acViZ => Sem r_acViZ [Message]
- Calamity.Cache.Eff: getUnavailableGuilds :: forall r_acVjd. MemberWithError CacheEff r_acVjd => Sem r_acVjd [Snowflake Guild]
+ Calamity.Cache.Eff: getUnavailableGuilds :: forall r_acViS. MemberWithError CacheEff r_acViS => Sem r_acViS [Snowflake Guild]
- Calamity.Cache.Eff: getUser :: forall r_acVj4. MemberWithError CacheEff r_acVj4 => Snowflake User -> Sem r_acVj4 (Maybe User)
+ Calamity.Cache.Eff: getUser :: forall r_acViJ. MemberWithError CacheEff r_acViJ => Snowflake User -> Sem r_acViJ (Maybe User)
- Calamity.Cache.Eff: getUsers :: forall r_acVj6. MemberWithError CacheEff r_acVj6 => Sem r_acVj6 [User]
+ Calamity.Cache.Eff: getUsers :: forall r_acViL. MemberWithError CacheEff r_acViL => Sem r_acViL [User]
- Calamity.Cache.Eff: isUnavailableGuild :: forall r_acVjb. MemberWithError CacheEff r_acVjb => Snowflake Guild -> Sem r_acVjb Bool
+ Calamity.Cache.Eff: isUnavailableGuild :: forall r_acViQ. MemberWithError CacheEff r_acViQ => Snowflake Guild -> Sem r_acViQ Bool
- Calamity.Cache.Eff: setBotUser :: forall r_acViJ. MemberWithError CacheEff r_acViJ => User -> Sem r_acViJ ()
+ Calamity.Cache.Eff: setBotUser :: forall r_acVio. MemberWithError CacheEff r_acVio => User -> Sem r_acVio ()
- Calamity.Cache.Eff: setDM :: forall r_acViV. MemberWithError CacheEff r_acViV => DMChannel -> Sem r_acViV ()
+ Calamity.Cache.Eff: setDM :: forall r_acViA. MemberWithError CacheEff r_acViA => DMChannel -> Sem r_acViA ()
- Calamity.Cache.Eff: setGuild :: forall r_acViM. MemberWithError CacheEff r_acViM => Guild -> Sem r_acViM ()
+ Calamity.Cache.Eff: setGuild :: forall r_acVir. MemberWithError CacheEff r_acVir => Guild -> Sem r_acVir ()
- Calamity.Cache.Eff: setMessage :: forall r_acVjg. MemberWithError CacheEff r_acVjg => Message -> Sem r_acVjg ()
+ Calamity.Cache.Eff: setMessage :: forall r_acViV. MemberWithError CacheEff r_acViV => Message -> Sem r_acViV ()
- Calamity.Cache.Eff: setUnavailableGuild :: forall r_acVj9. MemberWithError CacheEff r_acVj9 => Snowflake Guild -> Sem r_acVj9 ()
+ Calamity.Cache.Eff: setUnavailableGuild :: forall r_acViO. MemberWithError CacheEff r_acViO => Snowflake Guild -> Sem r_acViO ()
- Calamity.Cache.Eff: setUser :: forall r_acVj2. MemberWithError CacheEff r_acVj2 => User -> Sem r_acVj2 ()
+ Calamity.Cache.Eff: setUser :: forall r_acViH. MemberWithError CacheEff r_acViH => User -> Sem r_acViH ()
- Calamity.Client.Client: runBotIO :: forall r a. (Members '[Embed IO, Final IO, CacheEff, MetricEff, LogEff] r, Typeable (SetupEff r)) => Token -> Intents -> Sem (SetupEff r) a -> Sem r (Maybe StartupError)
+ Calamity.Client.Client: runBotIO :: forall r a. Members '[Embed IO, Final IO, CacheEff, MetricEff, LogEff] r => Token -> Intents -> Sem (SetupEff r) a -> Sem r (Maybe StartupError)
- Calamity.Client.Client: runBotIO' :: forall r a. (Members '[Embed IO, Final IO, CacheEff, MetricEff, LogEff] r, Typeable (SetupEff r)) => Token -> Intents -> Maybe StatusUpdateData -> Sem (SetupEff r) a -> Sem r (Maybe StartupError)
+ Calamity.Client.Client: runBotIO' :: forall r a. Members '[Embed IO, Final IO, CacheEff, MetricEff, LogEff] r => Token -> Intents -> Maybe StatusUpdateData -> Sem (SetupEff r) a -> Sem r (Maybe StartupError)
- Calamity.Client.Types: type BotC r = (Members '[LogEff, MetricEff, CacheEff, Reader Client, AtomicState EventHandlers, Embed IO, Final IO, Async] r, Typeable r)
+ Calamity.Client.Types: type BotC r = (Members '[LogEff, MetricEff, CacheEff, Reader Client, AtomicState EventHandlers, Embed IO, Final IO, Async] r)
- Calamity.Gateway.Types: StatusUpdateData :: Maybe Integer -> Maybe Activity -> Text -> Bool -> StatusUpdateData
+ Calamity.Gateway.Types: StatusUpdateData :: Maybe Integer -> Maybe Activity -> StatusType -> Bool -> StatusUpdateData
- Calamity.Gateway.Types: [$sel:status:StatusUpdateData] :: StatusUpdateData -> Text
+ Calamity.Gateway.Types: [$sel:status:StatusUpdateData] :: StatusUpdateData -> StatusType
- Calamity.Internal.LocalWriter: llisten :: forall o_at4e r_at5D a_Xt4e. MemberWithError (LocalWriter o_at4e) r_at5D => Sem r_at5D a_Xt4e -> Sem r_at5D (o_at4e, a_Xt4e)
+ Calamity.Internal.LocalWriter: llisten :: forall o_at3R r_at5g a_Xt3R. MemberWithError (LocalWriter o_at3R) r_at5g => Sem r_at5g a_Xt3R -> Sem r_at5g (o_at3R, a_Xt3R)
- Calamity.Internal.LocalWriter: ltell :: forall o_at4a r_at5B. MemberWithError (LocalWriter o_at4a) r_at5B => o_at4a -> Sem r_at5B ()
+ Calamity.Internal.LocalWriter: ltell :: forall o_at3N r_at5e. MemberWithError (LocalWriter o_at3N) r_at5e => o_at3N -> Sem r_at5e ()
- Calamity.Metrics.Eff: addCounter :: forall r_aBA8. MemberWithError MetricEff r_aBA8 => Int -> Counter -> Sem r_aBA8 Int
+ Calamity.Metrics.Eff: addCounter :: forall r_aBzH. MemberWithError MetricEff r_aBzH => Int -> Counter -> Sem r_aBzH Int
- Calamity.Metrics.Eff: modifyGauge :: forall r_aBAb. MemberWithError MetricEff r_aBAb => (Double -> Double) -> Gauge -> Sem r_aBAb Double
+ Calamity.Metrics.Eff: modifyGauge :: forall r_aBzK. MemberWithError MetricEff r_aBzK => (Double -> Double) -> Gauge -> Sem r_aBzK Double
- Calamity.Metrics.Eff: observeHistogram :: forall r_aBAe. MemberWithError MetricEff r_aBAe => Double -> Histogram -> Sem r_aBAe HistogramSample
+ Calamity.Metrics.Eff: observeHistogram :: forall r_aBzN. MemberWithError MetricEff r_aBzN => Double -> Histogram -> Sem r_aBzN HistogramSample
- Calamity.Metrics.Eff: registerCounter :: forall r_aBzY. MemberWithError MetricEff r_aBzY => Text -> [(Text, Text)] -> Sem r_aBzY Counter
+ Calamity.Metrics.Eff: registerCounter :: forall r_aBzx. MemberWithError MetricEff r_aBzx => Text -> [(Text, Text)] -> Sem r_aBzx Counter
- Calamity.Metrics.Eff: registerGauge :: forall r_aBA1. MemberWithError MetricEff r_aBA1 => Text -> [(Text, Text)] -> Sem r_aBA1 Gauge
+ Calamity.Metrics.Eff: registerGauge :: forall r_aBzA. MemberWithError MetricEff r_aBzA => Text -> [(Text, Text)] -> Sem r_aBzA Gauge
- Calamity.Metrics.Eff: registerHistogram :: forall r_aBA4. MemberWithError MetricEff r_aBA4 => Text -> [(Text, Text)] -> [Double] -> Sem r_aBA4 Histogram
+ Calamity.Metrics.Eff: registerHistogram :: forall r_aBzD. MemberWithError MetricEff r_aBzD => Text -> [(Text, Text)] -> [Double] -> Sem r_aBzD Histogram

Files

Calamity/Client/Client.hs view
@@ -5,6 +5,7 @@     react,     runBotIO,     runBotIO',+    runBotIO'',     stopBot,     sendPresence,     events,@@ -95,7 +96,7 @@ -- | Create a bot, run your setup action, and then loop until the bot closes. runBotIO ::     forall r a.-    (P.Members '[P.Embed IO, P.Final IO, CacheEff, MetricEff, LogEff] r, Typeable (SetupEff r)) =>+    (P.Members '[P.Embed IO, P.Final IO, CacheEff, MetricEff, LogEff] r) =>     Token ->     -- | The intents the bot should use     Intents ->@@ -106,15 +107,15 @@ resetDi :: BotC r => P.Sem r a -> P.Sem r a resetDi m = do     initialDi <- P.asks (^. #initialDi)-    Di.local (flip fromMaybe initialDi) m+    Di.local (`fromMaybe` initialDi) m  {- | Create a bot, run your setup action, and then loop until the bot closes. - This version allows you to specify the initial status, and intents.+ This version allows you to specify the initial status -} runBotIO' ::     forall r a.-    (P.Members '[P.Embed IO, P.Final IO, CacheEff, MetricEff, LogEff] r, Typeable (SetupEff r)) =>+    (P.Members '[P.Embed IO, P.Final IO, CacheEff, MetricEff, LogEff] r) =>     Token ->     -- | The intents the bot should use     Intents ->@@ -136,6 +137,44 @@                 Di.push "calamity-stop" finishUp                 pure Nothing +{- | Create a bot, run your setup action, and then loop until the bot closes.++ This version only handles the @'P.Reader' 'Client'@ effect, allowing you to+ handle the @'P.AtomicState' 'EventHandlers'@ yourself.+-}+runBotIO'' ::+    forall r a.+    (P.Members+      '[ LogEff+       , MetricEff+       , CacheEff+       , P.Reader Client+       , P.AtomicState EventHandlers+       , P.Embed IO+       , P.Final IO+       , P.Async+       ]+ r) =>+    Token ->+    -- | The intents the bot should use+    Intents ->+    -- | The initial status to send to the gateway+    Maybe StatusUpdateData ->+    P.Sem (P.Reader Client ': r) a ->+    P.Sem r (Maybe StartupError)+runBotIO'' token intents status setup = do+    initialDi <- Di.fetch+    client <- P.embed $ newClient token initialDi+    P.runReader client . Di.push "calamity" $ do+        void $ Di.push "calamity-setup" setup+        r <- shardBot status intents+        case r of+            Left e -> pure (Just e)+            Right _ -> do+                Di.push "calamity-loop" clientLoop+                Di.push "calamity-stop" finishUp+                pure Nothing+ {- | Register an event handler, returning an action that removes the event handler from the bot.   Refer to 'EventType' for what events you can register, and 'EHType' for the@@ -217,7 +256,7 @@     inc <- P.asks (^. #eventsIn)     P.embed $ dupChan inc -{- | Wait until an event satisfying a condition happens, then returns it's+{- | Wait until an event satisfying a condition happens, then returns its  parameters.   The check function for this command is pure unlike 'waitUntilM'@@ -260,7 +299,7 @@         when (f args) $ do             P.embed $ putMVar result args -{- | Wait until an event satisfying a condition happens, then returns it's+{- | Wait until an event satisfying a condition happens, then returns its  parameters   This is what it would look like with @s ~ \''MessageCreateEvt'@:@@ -326,7 +365,7 @@     debug "bot has stopped"  {- | main loop of the client, handles fetching the next event, processing the- event and invoking it's handler functions+ event and invoking its handler functions -} clientLoop :: BotC r => P.Sem r () clientLoop = do@@ -382,38 +421,38 @@     P.Sem (P.Fail ': r) [IO ()] handleEvent' eh evt@(Ready rd@ReadyData{}) = do     updateCache evt-    pure $ map ($ rd) (getEventHandlers @ 'ReadyEvt eh)+    pure $ map ($ rd) (getEventHandlers @'ReadyEvt eh) handleEvent' _ Resumed = pure [] handleEvent' eh evt@(ChannelCreate (DMChannel' chan)) = do     updateCache evt     Just newChan <- DMChannel' <<$>> getDM (getID chan)-    pure $ map ($ newChan) (getEventHandlers @ 'ChannelCreateEvt eh)+    pure $ map ($ newChan) (getEventHandlers @'ChannelCreateEvt eh) handleEvent' eh evt@(ChannelCreate (GuildChannel' chan)) = do     updateCache evt     Just guild <- getGuild (getID chan)     Just newChan <- pure $ GuildChannel' <$> guild ^. #channels . at (getID chan)-    pure $ map ($ newChan) (getEventHandlers @ 'ChannelCreateEvt eh)+    pure $ map ($ newChan) (getEventHandlers @'ChannelCreateEvt eh) handleEvent' eh evt@(ChannelUpdate (DMChannel' chan)) = do     Just oldChan <- DMChannel' <<$>> getDM (getID chan)     updateCache evt     Just newChan <- DMChannel' <<$>> getDM (getID chan)-    pure $ map ($ (oldChan, newChan)) (getEventHandlers @ 'ChannelUpdateEvt eh)+    pure $ map ($ (oldChan, newChan)) (getEventHandlers @'ChannelUpdateEvt eh) handleEvent' eh evt@(ChannelUpdate (GuildChannel' chan)) = do     Just oldGuild <- getGuild (getID chan)     Just oldChan <- pure $ GuildChannel' <$> oldGuild ^. #channels . at (getID chan)     updateCache evt     Just newGuild <- getGuild (getID chan)     Just newChan <- pure $ GuildChannel' <$> newGuild ^. #channels . at (getID chan)-    pure $ map ($ (oldChan, newChan)) (getEventHandlers @ 'ChannelUpdateEvt eh)+    pure $ map ($ (oldChan, newChan)) (getEventHandlers @'ChannelUpdateEvt eh) handleEvent' eh evt@(ChannelDelete (GuildChannel' chan)) = do     Just oldGuild <- getGuild (getID chan)     Just oldChan <- pure $ GuildChannel' <$> oldGuild ^. #channels . at (getID chan)     updateCache evt-    pure $ map ($ oldChan) (getEventHandlers @ 'ChannelDeleteEvt eh)+    pure $ map ($ oldChan) (getEventHandlers @'ChannelDeleteEvt eh) handleEvent' eh evt@(ChannelDelete (DMChannel' chan)) = do     Just oldChan <- DMChannel' <<$>> getDM (getID chan)     updateCache evt-    pure $ map ($ oldChan) (getEventHandlers @ 'ChannelDeleteEvt eh)+    pure $ map ($ oldChan) (getEventHandlers @'ChannelDeleteEvt eh)  -- handleEvent' eh evt@(ChannelPinsUpdate ChannelPinsUpdateData { channelID, lastPinTimestamp }) = do --   chan <- (GuildChannel' <$> os ^? #channels . at (coerceSnowflake channelID) . _Just)@@ -427,12 +466,12 @@     pure $         map             ($ (guild, (if isNew then GuildCreateNew else GuildCreateAvailable)))-            (getEventHandlers @ 'GuildCreateEvt eh)+            (getEventHandlers @'GuildCreateEvt eh) handleEvent' eh evt@(GuildUpdate guild) = do     Just oldGuild <- getGuild (getID guild)     updateCache evt     Just newGuild <- getGuild (getID guild)-    pure $ map ($ (oldGuild, newGuild)) (getEventHandlers @ 'GuildUpdateEvt eh)+    pure $ map ($ (oldGuild, newGuild)) (getEventHandlers @'GuildUpdateEvt eh)  -- NOTE: Guild will be deleted in the new cache if unavailable was false handleEvent' eh evt@(GuildDelete UnavailableGuild{id, unavailable}) = do@@ -441,96 +480,96 @@     pure $         map             ($ (oldGuild, (if unavailable then GuildDeleteUnavailable else GuildDeleteRemoved)))-            (getEventHandlers @ 'GuildDeleteEvt eh)+            (getEventHandlers @'GuildDeleteEvt eh) handleEvent' eh evt@(GuildBanAdd BanData{guildID, user}) = do     Just guild <- getGuild guildID     updateCache evt-    pure $ map ($ (guild, user)) (getEventHandlers @ 'GuildBanAddEvt eh)+    pure $ map ($ (guild, user)) (getEventHandlers @'GuildBanAddEvt eh) handleEvent' eh evt@(GuildBanRemove BanData{guildID, user}) = do     Just guild <- getGuild guildID     updateCache evt-    pure $ map ($ (guild, user)) (getEventHandlers @ 'GuildBanRemoveEvt eh)+    pure $ map ($ (guild, user)) (getEventHandlers @'GuildBanRemoveEvt eh)  -- NOTE: we fire this event using the guild data with old emojis handleEvent' eh evt@(GuildEmojisUpdate GuildEmojisUpdateData{guildID, emojis}) = do     Just guild <- getGuild guildID     updateCache evt-    pure $ map ($ (guild, emojis)) (getEventHandlers @ 'GuildEmojisUpdateEvt eh)+    pure $ map ($ (guild, emojis)) (getEventHandlers @'GuildEmojisUpdateEvt eh) handleEvent' eh evt@(GuildIntegrationsUpdate GuildIntegrationsUpdateData{guildID}) = do     updateCache evt     Just guild <- getGuild guildID-    pure $ map ($ guild) (getEventHandlers @ 'GuildIntegrationsUpdateEvt eh)+    pure $ map ($ guild) (getEventHandlers @'GuildIntegrationsUpdateEvt eh) handleEvent' eh evt@(GuildMemberAdd member) = do     updateCache evt     Just guild <- getGuild (getID member)     Just member <- pure $ guild ^. #members . at (getID member)-    pure $ map ($ member) (getEventHandlers @ 'GuildMemberAddEvt eh)+    pure $ map ($ member) (getEventHandlers @'GuildMemberAddEvt eh) handleEvent' eh evt@(GuildMemberRemove GuildMemberRemoveData{user, guildID}) = do     Just guild <- getGuild guildID     Just member <- pure $ guild ^. #members . at (getID user)     updateCache evt-    pure $ map ($ member) (getEventHandlers @ 'GuildMemberRemoveEvt eh)+    pure $ map ($ member) (getEventHandlers @'GuildMemberRemoveEvt eh) handleEvent' eh evt@(GuildMemberUpdate GuildMemberUpdateData{user, guildID}) = do     Just oldGuild <- getGuild guildID     Just oldMember <- pure $ oldGuild ^. #members . at (getID user)     updateCache evt     Just newGuild <- getGuild guildID     Just newMember <- pure $ newGuild ^. #members . at (getID user)-    pure $ map ($ (oldMember, newMember)) (getEventHandlers @ 'GuildMemberUpdateEvt eh)+    pure $ map ($ (oldMember, newMember)) (getEventHandlers @'GuildMemberUpdateEvt eh) handleEvent' eh evt@(GuildMembersChunk GuildMembersChunkData{members, guildID}) = do     updateCache evt     Just guild <- getGuild guildID     let memberIDs = map (getID @Member) members     let members' = catMaybes $ map (\mid -> guild ^. #members . at mid) memberIDs-    pure $ map ($ (guild, members')) (getEventHandlers @ 'GuildMembersChunkEvt eh)+    pure $ map ($ (guild, members')) (getEventHandlers @'GuildMembersChunkEvt eh) handleEvent' eh evt@(GuildRoleCreate GuildRoleData{guildID, role}) = do     updateCache evt     Just guild <- getGuild guildID     Just role' <- pure $ guild ^. #roles . at (getID role)-    pure $ map ($ (guild, role')) (getEventHandlers @ 'GuildRoleCreateEvt eh)+    pure $ map ($ (guild, role')) (getEventHandlers @'GuildRoleCreateEvt eh) handleEvent' eh evt@(GuildRoleUpdate GuildRoleData{guildID, role}) = do     Just oldGuild <- getGuild guildID     Just oldRole <- pure $ oldGuild ^. #roles . at (getID role)     updateCache evt     Just newGuild <- getGuild guildID     Just newRole <- pure $ newGuild ^. #roles . at (getID role)-    pure $ map ($ (newGuild, oldRole, newRole)) (getEventHandlers @ 'GuildRoleUpdateEvt eh)+    pure $ map ($ (newGuild, oldRole, newRole)) (getEventHandlers @'GuildRoleUpdateEvt eh) handleEvent' eh evt@(GuildRoleDelete GuildRoleDeleteData{guildID, roleID}) = do     Just guild <- getGuild guildID     Just role <- pure $ guild ^. #roles . at roleID     updateCache evt-    pure $ map ($ (guild, role)) (getEventHandlers @ 'GuildRoleDeleteEvt eh)+    pure $ map ($ (guild, role)) (getEventHandlers @'GuildRoleDeleteEvt eh) handleEvent' eh (InviteCreate d) = do-    pure $ map ($ d) (getEventHandlers @ 'InviteCreateEvt eh)+    pure $ map ($ d) (getEventHandlers @'InviteCreateEvt eh) handleEvent' eh (InviteDelete d) = do-    pure $ map ($ d) (getEventHandlers @ 'InviteDeleteEvt eh)+    pure $ map ($ d) (getEventHandlers @'InviteDeleteEvt eh) handleEvent' eh evt@(MessageCreate msg _) = do     updateCache evt-    pure $ map ($ msg) (getEventHandlers @ 'MessageCreateEvt eh)+    pure $ map ($ msg) (getEventHandlers @'MessageCreateEvt eh) handleEvent' eh evt@(MessageUpdate msg) = do     oldMsg <- getMessage (getID msg)     updateCache evt     newMsg <- getMessage (getID msg)-    let rawActions = map ($ msg) (getEventHandlers @ 'RawMessageUpdateEvt eh)+    let rawActions = map ($ msg) (getEventHandlers @'RawMessageUpdateEvt eh)     let actions = case (oldMsg, newMsg) of             (Just oldMsg', Just newMsg') ->-                map ($ (oldMsg', newMsg')) (getEventHandlers @ 'MessageUpdateEvt eh)+                map ($ (oldMsg', newMsg')) (getEventHandlers @'MessageUpdateEvt eh)             _ -> []     pure $ rawActions <> actions handleEvent' eh evt@(MessageDelete MessageDeleteData{id}) = do     oldMsg <- getMessage id     updateCache evt-    let rawActions = map ($ id) (getEventHandlers @ 'RawMessageDeleteEvt eh)+    let rawActions = map ($ id) (getEventHandlers @'RawMessageDeleteEvt eh)     let actions = case oldMsg of             Just oldMsg' ->-                map ($ oldMsg') (getEventHandlers @ 'MessageDeleteEvt eh)+                map ($ oldMsg') (getEventHandlers @'MessageDeleteEvt eh)             _ -> []     pure $ rawActions <> actions handleEvent' eh evt@(MessageDeleteBulk MessageDeleteBulkData{ids}) = do     messages <- catMaybes <$> traverse getMessage ids     updateCache evt-    let rawActions = map ($ ids) (getEventHandlers @ 'RawMessageDeleteBulkEvt eh)-    let actions = map ($ messages) (getEventHandlers @ 'MessageDeleteBulkEvt eh)+    let rawActions = map ($ ids) (getEventHandlers @'RawMessageDeleteBulkEvt eh)+    let actions = map ($ messages) (getEventHandlers @'MessageDeleteBulkEvt eh)     pure $ rawActions <> actions handleEvent' eh evt@(MessageReactionAdd reaction) = do     updateCache evt@@ -543,10 +582,10 @@         Nothing -> do             chan <- getDM (coerceSnowflake $ getID @Channel reaction)             pure (DMChannel' <$> chan)-    let rawActions = map ($ reaction) (getEventHandlers @ 'RawMessageReactionAddEvt eh)+    let rawActions = map ($ reaction) (getEventHandlers @'RawMessageReactionAddEvt eh)     let actions = case (msg, user, chan) of             (Just msg', Just user', Just chan') ->-                map ($ (msg', user', chan', reaction ^. #emoji)) (getEventHandlers @ 'MessageReactionAddEvt eh)+                map ($ (msg', user', chan', reaction ^. #emoji)) (getEventHandlers @'MessageReactionAddEvt eh)             _ -> []     pure $ rawActions <> actions handleEvent' eh evt@(MessageReactionRemove reaction) = do@@ -560,19 +599,19 @@         Nothing -> do             chan <- getDM (coerceSnowflake $ getID @Channel reaction)             pure (DMChannel' <$> chan)-    let rawActions = map ($ reaction) (getEventHandlers @ 'RawMessageReactionRemoveEvt eh)+    let rawActions = map ($ reaction) (getEventHandlers @'RawMessageReactionRemoveEvt eh)     let actions = case (msg, user, chan) of             (Just msg', Just user', Just chan') ->-                map ($ (msg', user', chan', reaction ^. #emoji)) (getEventHandlers @ 'MessageReactionRemoveEvt eh)+                map ($ (msg', user', chan', reaction ^. #emoji)) (getEventHandlers @'MessageReactionRemoveEvt eh)             _ -> []     pure $ rawActions <> actions handleEvent' eh evt@(MessageReactionRemoveAll MessageReactionRemoveAllData{messageID}) = do     msg <- getMessage messageID     updateCache evt-    let rawActions = map ($ messageID) (getEventHandlers @ 'RawMessageReactionRemoveAllEvt eh)+    let rawActions = map ($ messageID) (getEventHandlers @'RawMessageReactionRemoveAllEvt eh)     let actions = case msg of             Just msg' ->-                map ($ msg') (getEventHandlers @ 'MessageReactionRemoveAllEvt eh)+                map ($ msg') (getEventHandlers @'MessageReactionRemoveAllEvt eh)             _ -> []     pure $ rawActions <> actions handleEvent' eh evt@(PresenceUpdate PresenceUpdateData{userID, presence = Presence{guildID}}) = do@@ -585,30 +624,30 @@         newUser :: User = upcast newMember         userUpdates =             if oldUser /= newUser-                then map ($ (oldUser, newUser)) (getEventHandlers @ 'UserUpdateEvt eh)+                then map ($ (oldUser, newUser)) (getEventHandlers @'UserUpdateEvt eh)                 else mempty-    pure $ userUpdates <> map ($ (oldMember, newMember)) (getEventHandlers @ 'GuildMemberUpdateEvt eh)+    pure $ userUpdates <> map ($ (oldMember, newMember)) (getEventHandlers @'GuildMemberUpdateEvt eh) handleEvent' eh (TypingStart TypingStartData{channelID, guildID, userID, timestamp = UnixTimestamp timestamp}) =     case guildID of         Just gid -> do             Just guild <- getGuild gid             Just chan <- pure $ GuildChannel' <$> guild ^. #channels . at (coerceSnowflake channelID)-            pure $ map ($ (chan, userID, timestamp)) (getEventHandlers @ 'TypingStartEvt eh)+            pure $ map ($ (chan, userID, timestamp)) (getEventHandlers @'TypingStartEvt eh)         Nothing -> do             Just chan <- DMChannel' <<$>> getDM (coerceSnowflake channelID)-            pure $ map ($ (chan, userID, timestamp)) (getEventHandlers @ 'TypingStartEvt eh)+            pure $ map ($ (chan, userID, timestamp)) (getEventHandlers @'TypingStartEvt eh) handleEvent' eh evt@(UserUpdate _) = do     Just oldUser <- getBotUser     updateCache evt     Just newUser <- getBotUser-    pure $ map ($ (oldUser, newUser)) (getEventHandlers @ 'UserUpdateEvt eh)+    pure $ map ($ (oldUser, newUser)) (getEventHandlers @'UserUpdateEvt eh) handleEvent' eh evt@(VoiceStateUpdate newVoiceState@V.VoiceState{guildID = Just guildID}) = do     oldVoiceState <- ((find ((== V.sessionID newVoiceState) . V.sessionID) . voiceStates) =<<) <$> getGuild guildID     updateCache evt-    pure $ map ($ (oldVoiceState, newVoiceState)) (getEventHandlers @ 'VoiceStateUpdateEvt eh)+    pure $ map ($ (oldVoiceState, newVoiceState)) (getEventHandlers @'VoiceStateUpdateEvt eh) handleEvent' eh evt@(InteractionCreate interaction) = do     updateCache evt-    pure $ map ($ interaction) (getEventHandlers @ 'InteractionEvt eh)+    pure $ map ($ interaction) (getEventHandlers @'InteractionEvt eh) handleEvent' _ e = fail $ "Unhandled event: " <> show e  updateCache :: P.Members '[CacheEff, P.Fail] r => DispatchData -> P.Sem r ()
Calamity/Client/Types.hs view
@@ -80,7 +80,6 @@        , P.Async        ]       r-  , Typeable r   )  -- | A concrete effect stack used inside the bot
Calamity/Commands/Dsl.hs view
@@ -60,12 +60,12 @@    'Calamity.Commands.Dsl.command' \@'[] "test" \\ctx -> 'pure' ()  @ - In the above block, any command declared inside 'hide' will have it's+ In the above block, any command declared inside 'hide' will have its  \'hidden\' flag set and will not be shown by the default help command:  'Calamity.Commands.Help.helpCommand'   The 'Calamity.Commands.Help.helpCommand' function can be used to create a- help command for the commands DSL action it is used in, read it's doc page+ help command for the commands DSL action it is used in, read its doc page  for more information on how it functions.   The 'Calamity.Commands.Utils.addCommands' function creates the command@@ -256,7 +256,7 @@ {- | Construct a group and place any commands registered in the given action  into the new group. - This also resets the @help@ function back to it's original value, use+ This also resets the @help@ function back to its original value, use  'group'' if you don't want that (i.e. your help function is context aware). -} group ::@@ -273,7 +273,7 @@  The parent group, visibility, checks, and command help are drawn from the  reader context. - This also resets the @help@ function back to it's original value, use+ This also resets the @help@ function back to its original value, use  'group'' if you don't want that (i.e. your help function is context aware). -} groupA ::@@ -292,7 +292,7 @@  The parent group, visibility, checks, and command help are drawn from the  reader context. - Unlike 'help' this doesn't reset the @help@ function back to it's original+ Unlike 'help' this doesn't reset the @help@ function back to its original  value. -} group' ::@@ -309,7 +309,7 @@  The parent group, visibility, checks, and command help are drawn from the  reader context. - Unlike 'help' this doesn't reset the @help@ function back to it's original+ Unlike 'help' this doesn't reset the @help@ function back to its original  value. -} groupA' ::
Calamity/Gateway/Types.hs view
@@ -23,6 +23,7 @@ import           Calamity.Types.Model.Guild.Guild import           Calamity.Types.Model.Voice import           Calamity.Types.Model.Presence.Activity+import           Calamity.Types.Model.User (StatusType) import           Calamity.Types.Snowflake  import           Control.Concurrent.Async@@ -219,7 +220,7 @@ data StatusUpdateData = StatusUpdateData   { since  :: Maybe Integer   , game   :: Maybe Activity-  , status :: Text+  , status :: StatusType   , afk    :: Bool   }   deriving ( Show, Generic )
Calamity/Types/Upgradeable.hs view
@@ -24,7 +24,7 @@ -- | A typeclass that represents snowflakes that can be upgraded to their -- complete data, either through the cache or HTTP. class Upgradeable a ids | a -> ids, ids -> a where-  -- | Upgrade a snowflake to it's complete data.+  -- | Upgrade a snowflake to its complete data.   --   -- If it existed in the cache then it is returned from there, otherwise we   -- fetch from HTTP and update the cache on success.
Calamity/Utils/Message.hs view
@@ -114,21 +114,21 @@ codeline :: L.Text -> L.Text codeline content = "``" <> escapeCodelines content <> "``" -{- | Formats some text into it's bolded form+{- | Formats some text into its bolded form   Any existing bolded text is escaped -} bold :: L.Text -> L.Text bold content = "**" <> escapeBold content <> "**" -{- | Formats some text into it's striked form+{- | Formats some text into its striked form   Any existing striked text is escaped -} strike :: L.Text -> L.Text strike content = "~~" <> escapeStrike content <> "~~" -{- | Formats some text into it's underlined form+{- | Formats some text into its underlined form   Any existing underlined text is escaped -}@@ -143,7 +143,7 @@ quoteAll :: L.Text -> L.Text quoteAll = (">> " <>) -{- | Formats some text into it's spoilered form+{- | Formats some text into its spoilered form   Any existing spoilers are escaped -}
ChangeLog.md view
@@ -1,5 +1,13 @@ # Changelog for Calamity +## 0.1.30.4+++ The `status` field of `StatusUpdateData` has been changed from `Text` to+  `StatusType`.++ Removed the redundant `Typeable` constraint from `BotC` and `runBotIO`, etc.++ Added the `runBotIO''` function which gives more control over the internal+  state effects.+ ## 0.1.30.3  + Added models for interactions and components 
calamity.cabal view
@@ -5,7 +5,7 @@ -- see: https://github.com/sol/hpack  name:           calamity-version:        0.1.30.3+version:        0.1.30.4 synopsis:       A library for writing discord bots in haskell description:    Please see the README on GitHub at <https://github.com/simmsb/calamity#readme> category:       Network, Web