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 +4/−0
- README.md +5/−6
- calamity.cabal +2/−2
- src/Calamity/Commands/CommandUtils.hs +2/−2
- src/Calamity/Commands/Dsl.hs +2/−2
- src/Calamity/Types/Model/Guild/Emoji.hs +2/−2
- src/Calamity/Types/Snowflake.hs +13/−1
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> -<!-- [](https://hackage.haskell.org/package/calamity) -->-<!-- [](https://gitlab.com/nitros12/calamity/pipelines) -->-<!-- [](https://github.com/nitros12/calamity/blob/master/LICENSE) -->-<!-- [](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