packages feed

calamity 0.1.20.1 → 0.1.21.0

raw patch · 7 files changed

+30/−15 lines, 7 filesPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

API changes (from Hackage documentation)

- Calamity.Cache.Eff: delDM :: forall r_a9AjK. MemberWithError CacheEff r_a9AjK => Snowflake DMChannel -> Sem r_a9AjK ()
+ Calamity.Cache.Eff: delDM :: forall r_a9AtF. MemberWithError CacheEff r_a9AtF => Snowflake DMChannel -> Sem r_a9AtF ()
- Calamity.Cache.Eff: delGuild :: forall r_a9AjD. MemberWithError CacheEff r_a9AjD => Snowflake Guild -> Sem r_a9AjD ()
+ Calamity.Cache.Eff: delGuild :: forall r_a9Aty. MemberWithError CacheEff r_a9Aty => Snowflake Guild -> Sem r_a9Aty ()
- Calamity.Cache.Eff: delMessage :: forall r_a9Ak5. MemberWithError CacheEff r_a9Ak5 => Snowflake Message -> Sem r_a9Ak5 ()
+ Calamity.Cache.Eff: delMessage :: forall r_a9Au0. MemberWithError CacheEff r_a9Au0 => Snowflake Message -> Sem r_a9Au0 ()
- Calamity.Cache.Eff: delUnavailableGuild :: forall r_a9AjY. MemberWithError CacheEff r_a9AjY => Snowflake Guild -> Sem r_a9AjY ()
+ Calamity.Cache.Eff: delUnavailableGuild :: forall r_a9AtT. MemberWithError CacheEff r_a9AtT => Snowflake Guild -> Sem r_a9AtT ()
- Calamity.Cache.Eff: delUser :: forall r_a9AjR. MemberWithError CacheEff r_a9AjR => Snowflake User -> Sem r_a9AjR ()
+ Calamity.Cache.Eff: delUser :: forall r_a9AtM. MemberWithError CacheEff r_a9AtM => Snowflake User -> Sem r_a9AtM ()
- Calamity.Cache.Eff: getBotUser :: forall r_a9Ajv. MemberWithError CacheEff r_a9Ajv => Sem r_a9Ajv (Maybe User)
+ Calamity.Cache.Eff: getBotUser :: forall r_a9Atq. MemberWithError CacheEff r_a9Atq => Sem r_a9Atq (Maybe User)
- Calamity.Cache.Eff: getDM :: forall r_a9AjH. MemberWithError CacheEff r_a9AjH => Snowflake DMChannel -> Sem r_a9AjH (Maybe DMChannel)
+ Calamity.Cache.Eff: getDM :: forall r_a9AtC. MemberWithError CacheEff r_a9AtC => Snowflake DMChannel -> Sem r_a9AtC (Maybe DMChannel)
- Calamity.Cache.Eff: getDMs :: forall r_a9AjJ. MemberWithError CacheEff r_a9AjJ => Sem r_a9AjJ [DMChannel]
+ Calamity.Cache.Eff: getDMs :: forall r_a9AtE. MemberWithError CacheEff r_a9AtE => Sem r_a9AtE [DMChannel]
- Calamity.Cache.Eff: getGuild :: forall r_a9Ajy. MemberWithError CacheEff r_a9Ajy => Snowflake Guild -> Sem r_a9Ajy (Maybe Guild)
+ Calamity.Cache.Eff: getGuild :: forall r_a9Att. MemberWithError CacheEff r_a9Att => Snowflake Guild -> Sem r_a9Att (Maybe Guild)
- Calamity.Cache.Eff: getGuildChannel :: forall r_a9AjA. MemberWithError CacheEff r_a9AjA => Snowflake GuildChannel -> Sem r_a9AjA (Maybe GuildChannel)
+ Calamity.Cache.Eff: getGuildChannel :: forall r_a9Atv. MemberWithError CacheEff r_a9Atv => Snowflake GuildChannel -> Sem r_a9Atv (Maybe GuildChannel)
- Calamity.Cache.Eff: getGuilds :: forall r_a9AjC. MemberWithError CacheEff r_a9AjC => Sem r_a9AjC [Guild]
+ Calamity.Cache.Eff: getGuilds :: forall r_a9Atx. MemberWithError CacheEff r_a9Atx => Sem r_a9Atx [Guild]
- Calamity.Cache.Eff: getMessage :: forall r_a9Ak2. MemberWithError CacheEff r_a9Ak2 => Snowflake Message -> Sem r_a9Ak2 (Maybe Message)
+ Calamity.Cache.Eff: getMessage :: forall r_a9AtX. MemberWithError CacheEff r_a9AtX => Snowflake Message -> Sem r_a9AtX (Maybe Message)
- Calamity.Cache.Eff: getMessages :: forall r_a9Ak4. MemberWithError CacheEff r_a9Ak4 => Sem r_a9Ak4 [Message]
+ Calamity.Cache.Eff: getMessages :: forall r_a9AtZ. MemberWithError CacheEff r_a9AtZ => Sem r_a9AtZ [Message]
- Calamity.Cache.Eff: getUnavailableGuilds :: forall r_a9AjX. MemberWithError CacheEff r_a9AjX => Sem r_a9AjX [Snowflake Guild]
+ Calamity.Cache.Eff: getUnavailableGuilds :: forall r_a9AtS. MemberWithError CacheEff r_a9AtS => Sem r_a9AtS [Snowflake Guild]
- Calamity.Cache.Eff: getUser :: forall r_a9AjO. MemberWithError CacheEff r_a9AjO => Snowflake User -> Sem r_a9AjO (Maybe User)
+ Calamity.Cache.Eff: getUser :: forall r_a9AtJ. MemberWithError CacheEff r_a9AtJ => Snowflake User -> Sem r_a9AtJ (Maybe User)
- Calamity.Cache.Eff: getUsers :: forall r_a9AjQ. MemberWithError CacheEff r_a9AjQ => Sem r_a9AjQ [User]
+ Calamity.Cache.Eff: getUsers :: forall r_a9AtL. MemberWithError CacheEff r_a9AtL => Sem r_a9AtL [User]
- Calamity.Cache.Eff: isUnavailableGuild :: forall r_a9AjV. MemberWithError CacheEff r_a9AjV => Snowflake Guild -> Sem r_a9AjV Bool
+ Calamity.Cache.Eff: isUnavailableGuild :: forall r_a9AtQ. MemberWithError CacheEff r_a9AtQ => Snowflake Guild -> Sem r_a9AtQ Bool
- Calamity.Cache.Eff: setBotUser :: forall r_a9Ajt. MemberWithError CacheEff r_a9Ajt => User -> Sem r_a9Ajt ()
+ Calamity.Cache.Eff: setBotUser :: forall r_a9Ato. MemberWithError CacheEff r_a9Ato => User -> Sem r_a9Ato ()
- Calamity.Cache.Eff: setDM :: forall r_a9AjF. MemberWithError CacheEff r_a9AjF => DMChannel -> Sem r_a9AjF ()
+ Calamity.Cache.Eff: setDM :: forall r_a9AtA. MemberWithError CacheEff r_a9AtA => DMChannel -> Sem r_a9AtA ()
- Calamity.Cache.Eff: setGuild :: forall r_a9Ajw. MemberWithError CacheEff r_a9Ajw => Guild -> Sem r_a9Ajw ()
+ Calamity.Cache.Eff: setGuild :: forall r_a9Atr. MemberWithError CacheEff r_a9Atr => Guild -> Sem r_a9Atr ()
- Calamity.Cache.Eff: setMessage :: forall r_a9Ak0. MemberWithError CacheEff r_a9Ak0 => Message -> Sem r_a9Ak0 ()
+ Calamity.Cache.Eff: setMessage :: forall r_a9AtV. MemberWithError CacheEff r_a9AtV => Message -> Sem r_a9AtV ()
- Calamity.Cache.Eff: setUnavailableGuild :: forall r_a9AjT. MemberWithError CacheEff r_a9AjT => Snowflake Guild -> Sem r_a9AjT ()
+ Calamity.Cache.Eff: setUnavailableGuild :: forall r_a9AtO. MemberWithError CacheEff r_a9AtO => Snowflake Guild -> Sem r_a9AtO ()
- Calamity.Cache.Eff: setUser :: forall r_a9AjM. MemberWithError CacheEff r_a9AjM => User -> Sem r_a9AjM ()
+ Calamity.Cache.Eff: setUser :: forall r_a9AtH. MemberWithError CacheEff r_a9AtH => User -> Sem r_a9AtH ()
- Calamity.Commands.ParsePrefix: parsePrefix :: forall r_a7c1C. MemberWithError ParsePrefix r_a7c1C => Message -> Sem r_a7c1C (Maybe (Text, Text))
+ Calamity.Commands.ParsePrefix: parsePrefix :: forall r_a7cbx. MemberWithError ParsePrefix r_a7cbx => Message -> Sem r_a7cbx (Maybe (Text, Text))
- Calamity.Internal.LocalWriter: llisten :: forall o_aEHX r_aEXX a_XEHX. MemberWithError (LocalWriter o_aEHX) r_aEXX => Sem r_aEXX a_XEHX -> Sem r_aEXX (o_aEHX, a_XEHX)
+ Calamity.Internal.LocalWriter: llisten :: forall o_aEJY r_aEZY a_XEJY. MemberWithError (LocalWriter o_aEJY) r_aEZY => Sem r_aEZY a_XEJY -> Sem r_aEZY (o_aEJY, a_XEJY)
- Calamity.Internal.LocalWriter: ltell :: forall o_aEHT r_aEXV. MemberWithError (LocalWriter o_aEHT) r_aEXV => o_aEHT -> Sem r_aEXV ()
+ Calamity.Internal.LocalWriter: ltell :: forall o_aEJU r_aEZW. MemberWithError (LocalWriter o_aEJU) r_aEZW => o_aEJU -> Sem r_aEZW ()
- Calamity.Metrics.Eff: addCounter :: forall r_aKIm. MemberWithError MetricEff r_aKIm => Int -> Counter -> Sem r_aKIm Int
+ Calamity.Metrics.Eff: addCounter :: forall r_aKKx. MemberWithError MetricEff r_aKKx => Int -> Counter -> Sem r_aKKx Int
- Calamity.Metrics.Eff: modifyGauge :: forall r_aKIp. MemberWithError MetricEff r_aKIp => (Double -> Double) -> Gauge -> Sem r_aKIp Double
+ Calamity.Metrics.Eff: modifyGauge :: forall r_aKKA. MemberWithError MetricEff r_aKKA => (Double -> Double) -> Gauge -> Sem r_aKKA Double
- Calamity.Metrics.Eff: observeHistogram :: forall r_aKIs. MemberWithError MetricEff r_aKIs => Double -> Histogram -> Sem r_aKIs HistogramSample
+ Calamity.Metrics.Eff: observeHistogram :: forall r_aKKD. MemberWithError MetricEff r_aKKD => Double -> Histogram -> Sem r_aKKD HistogramSample
- Calamity.Metrics.Eff: registerCounter :: forall r_aKIc. MemberWithError MetricEff r_aKIc => Text -> [(Text, Text)] -> Sem r_aKIc Counter
+ Calamity.Metrics.Eff: registerCounter :: forall r_aKKn. MemberWithError MetricEff r_aKKn => Text -> [(Text, Text)] -> Sem r_aKKn Counter
- Calamity.Metrics.Eff: registerGauge :: forall r_aKIf. MemberWithError MetricEff r_aKIf => Text -> [(Text, Text)] -> Sem r_aKIf Gauge
+ Calamity.Metrics.Eff: registerGauge :: forall r_aKKq. MemberWithError MetricEff r_aKKq => Text -> [(Text, Text)] -> Sem r_aKKq Gauge
- Calamity.Metrics.Eff: registerHistogram :: forall r_aKIi. MemberWithError MetricEff r_aKIi => Text -> [(Text, Text)] -> [Double] -> Sem r_aKIi Histogram
+ Calamity.Metrics.Eff: registerHistogram :: forall r_aKKt. MemberWithError MetricEff r_aKKt => Text -> [(Text, Text)] -> [Double] -> Sem r_aKKt Histogram

Files

ChangeLog.md view
@@ -1,5 +1,9 @@ # Changelog for Calamity +## 0.1.21.0++- Fix ToJSON instance for `RawEmoji`+ ## 0.1.20.1  * Documentation improvements.
README.md view
@@ -1,15 +1,11 @@ <h1 align="center">Calamity</h1> -<!-- [![Hackage](https://img.shields.io/hackage/v/calamity)](https://hackage.haskell.org/package/calamity) -->-<!-- [![Gitlab pipeline status](https://img.shields.io/gitlab/pipeline/nitros12/calamity)](https://gitlab.com/nitros12/calamity/pipelines) -->-<!-- [![License](https://img.shields.io/github/license/nitros12/calamity)](https://github.com/nitros12/calamity/blob/master/LICENSE) -->-<!-- [![Hackage-Deps](https://img.shields.io/hackage-deps/v/calamity)](https://hackage.haskell.org/package/calamity) -->- <p align="center">   <a href="https://hackage.haskell.org/package/calamity"><img src="https://img.shields.io/hackage/v/calamity" alt="Hackage"></a>   <a href="https://gitlab.com/nitros12/calamity/pipelines"><img src="https://img.shields.io/gitlab/pipeline/nitros12/calamity" alt="Gitlab pipeline status"></a>   <a href="https://github.com/nitros12/calamity/blob/master/LICENSE"><img src="https://img.shields.io/github/license/nitros12/calamity" alt="License"></a>   <a href="https://hackage.haskell.org/package/calamity"><img src="https://img.shields.io/hackage-deps/v/calamity" alt="Hackage-Deps"></a>+  <a href="https://discord.gg/NGCThCY"><img src="https://discord.com/api/guilds/754446998077178088/widget.png?style=shield" alt="Discord Invite"></a> </p>  Calamity is a Haskell library for writing discord bots, it uses@@ -28,6 +24,9 @@   example of using prometheus as the metrics handler can be found   [here](https://github.com/nitros12/calamity-example). +* Logging: The [di-polysemy](https://hackage.haskell.org/package/di-polysemy)+  library is used to allow the logging effect to be customized, or disabled.+ # Docs  You can find documentation on hackage at: https://hackage.haskell.org/package/calamity@@ -35,7 +34,7 @@ # Examples  Some example projects can be found at:-- [nitros12/calamity-example](https://github.com/nitros12/calamity-example): An extended example of the snippet below, shows use of metrics.+<!-- - [nitros12/calamity-example](https://github.com/nitros12/calamity-example): An extended example of the snippet below, shows use of metrics. --> - [nitros12/calamity-bot](https://github.com/nitros12/calamity-bot): Uses a database, showing modularisation of groups/commands.  ``` haskell
calamity.cabal view
@@ -4,10 +4,10 @@ -- -- see: https://github.com/sol/hpack ----- hash: 55bf5727de4e0d34fab772f8f03176d91db899e03912214153fdfd0bf161eedc+-- hash: 5fa37b5c8ac352c7170a1e67f6f1c722b1e1e041e5f49cd19058014ae1b1caf4  name:           calamity-version:        0.1.20.1+version:        0.1.21.0 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
src/Calamity/Commands/CommandUtils.hs view
@@ -84,8 +84,8 @@ -- 'buildCommand' @\'['Named' "user" ('Snowflake' 'User'), 'Named' "reason" ('KleeneStarConcat' 'S.Text')] --    "ban" 'Nothing' [] ('const' "Ban a user") $ \ctx uid r -> case (ctx 'Control.Lens.^.' #guild) of --      'Just' guild -> do---        'void' . 'Calamity.HTTP.invoke' . 'Calamity.HTTP.reason' r $ 'Calamity.HTTP.Guild.CreateGuildBan' guild uid---        'void' $ 'Calamity.Types.Tellable.tell' ctx ("Banned user `" '<>' 'TextShow.showt' uid '<>' "` with reason: " '<>' r)+--        'Control.Monad.void' . 'Calamity.HTTP.invoke' $ 'Calamity.HTTP.Guild.CreateGuildBan' guild uid ('Calamity.HTTP.Guild.CreateGuildBanData' 'Nothing' $ 'Just' r)+--        'Control.Monad.void' $ 'Calamity.Types.Tellable.tell' ctx ("Banned user `" '<>' 'TextShow.showt' uid '<>' "` with reason: " '<>' r) --      'Nothing' -> 'void' $ 'Calamity.Types.Tellable.tell' @'L.Text' ctx "Can only ban users from guilds." -- @ buildCommand :: forall ps r.
src/Calamity/Commands/Dsl.hs view
@@ -169,7 +169,7 @@ --                'Calamity.Commands.Parser.Named' "reason" ('Calamity.Commands.Parser.KleeneStarConcat' 'S.Text')] --    "ban" $ \\ctx uid r -> case (ctx 'Control.Lens.^.' #guild) of --      'Just' guild -> do---        'Control.Monad.void' . 'Calamity.HTTP.invoke' . 'Calamity.HTTP.reason' r $ 'Calamity.HTTP.Guild.CreateGuildBan' guild uid+--        'Control.Monad.void' . 'Calamity.HTTP.invoke' $ 'Calamity.HTTP.Guild.CreateGuildBan' guild uid ('Calamity.HTTP.Guild.CreateGuildBanData' 'Nothing' $ 'Just' r) --        'Control.Monad.void' $ 'Calamity.Types.Tellable.tell' ctx ("Banned user `" '<>' 'TextShow.showt' uid '<>' "` with reason: " '<>' r) --      'Nothing' -> 'void' $ 'Calamity.Types.Tellable.tell' @'L.Text' ctx "Can only ban users from guilds." -- @@@ -198,7 +198,7 @@ --                'Calamity.Commands.Parser.Named' "reason" ('Calamity.Commands.Parser.KleeneStarConcat' 'S.Text')] --    "ban" [] $ \\ctx uid r -> case (ctx 'Control.Lens.^.' #guild) of --      'Just' guild -> do---        'Control.Monad.void' . 'Calamity.HTTP.invoke' . 'Calamity.HTTP.reason' r $ 'Calamity.HTTP.Guild.CreateGuildBan' guild uid+--        'Control.Monad.void' . 'Calamity.HTTP.invoke' $ 'Calamity.HTTP.Guild.CreateGuildBan' guild uid ('Calamity.HTTP.Guild.CreateGuildBanData' 'Nothing' $ 'Just' r) --        'Control.Monad.void' $ 'Calamity.Types.Tellable.tell' ctx ("Banned user `" '<>' 'TextShow.showt' uid '<>' "` with reason: " '<>' r) --      'Nothing' -> 'void' $ 'Calamity.Types.Tellable.tell' @'L.Text' ctx "Can only ban users from guilds." -- @
src/Calamity/Types/Model/Guild/Emoji.hs view
@@ -75,8 +75,8 @@   showb (CustomEmoji p) = showb p  instance ToJSON RawEmoji where-  toJSON (CustomEmoji e) = object ["emoji" .= e]-  toJSON (UnicodeEmoji s) = object ["emoji" .= object ["name" .= s]]+  toJSON (CustomEmoji e) = toJSON e+  toJSON (UnicodeEmoji s) = object ["name" .= s, "id" .= Nothing @()]  instance FromJSON RawEmoji where   parseJSON = withObject "RawEmoji" $ \v -> do
src/Calamity/Types/Snowflake.hs view
@@ -19,6 +19,7 @@ import           Data.Text.Read import qualified Data.Vector.Unboxing         as U import           Data.Word+import           Data.Bits  import           GHC.Generics @@ -31,7 +32,18 @@   }   deriving ( Generic, Eq, Ord, Data )   deriving ( Show, TextShow ) via Word64-  deriving newtype ( NFData, ToJSONKey, Hashable, U.Unboxable )+  deriving newtype ( NFData, ToJSONKey, U.Unboxable )++-- I'm pretty sure that Word64's hash just being 'fromIntegral' is a bad idea when+-- attempting to use it in a hashmap, so swizzle the bits a bit to give a good+-- distribution of bits+instance Hashable (Snowflake t) where+  hashWithSalt salt (Snowflake a) =+    let initial = fromIntegral @_ @Word64 $ hashWithSalt salt a+        round1 = ((initial `shiftR` 30) `xor` initial) * 0xbf58476d1ce4e5b9+        round2 = ((round1 `shiftR` 27) `xor` round1) * 0xbf58476d1ce4e5b9+        round3 = ((round2 `shiftR` 31) `xor` round2)+     in fromIntegral @_ @Int round3  instance ToJSON (Snowflake t) where   toJSON (Snowflake s) = String . showt $ s