Tutorial
hgsipiere opened this issue · 8 comments
A tutorial, explaining step by step the DSL would be nice.
Hi, I've added some more content to the command docs: https://hackage.haskell.org/package/calamity-0.1.20.1/docs/Calamity-Commands-Dsl.html
If there's some part you're confused by please let me know.
Hi, so my understanding of Polysemy is that we want to run all our effects so we get rid of metrics with runMetricsNoop
. When I do runDiNoop
I seem to get an infinite loop, what am I doing wrong?
This is the project: https://github.com/hgsipiere/problem
Specifically this is the problematic line set:
void . P.runFinal . P.embedToFinal. D.runDiNoop . runCacheInMemory . runMetricsNoop . useConstantPrefix "!" $ runBotIO (BotToken token) $ do addCommands $ do helpCommand
It seems like DiPolysemy is logging, so I assume that's what to do if I want no logging.
Hm, I compiled that project and everything works fine.
Hi sorry, it does work perfectly I was just confused. When I ran the calamity example, there seems to be logging without a run Di. If I wanted that level of logging and nothing extra (which I realise now is more than noop), what would you recommend?
ah, I've forgotten to update calamity-example.
The project that's up to date is calamity-bot, you can see an example of usage here:
https://github.com/nitros12/calamity-bot/blob/master/src/CalamityBot.hs#L43
If you want to control the log level, use the filter function from di-core:
https://hackage.haskell.org/package/di-core-1.0.4/docs/Di-Core.html#v:filter
Ahh thank you, that sorted my problem. The other thing that I'm confused about is the ban example (https://hackage.haskell.org/package/calamity-0.1.20.1/docs/Calamity-Commands-Dsl.html ), my alternative was
void . invoke $ CreateGuildBan guild uid (CreateGuildBanData Nothing $ Just r)
. reason
seems to conditionally implement the typeclass Request
to give invoke
from Calamity.HTTP.Reason
; in this case it also doesn't complete the curried CreateGuildBan
since it needs a GuildBanData
. There is also another definition of reason
as an AuditLogEntry constructor but that takes a Maybe Text
which is a type mismatch I think.
The other things that I was confused about were guilds since the Discord UI calls them servers, snowflakes and what bot tokens were. These were just sorted from consulting the Discord API documentation (this clarified what deleteMessageDays are for as another example).
Is there a discord or irc for questions? An issue feels kind of inappropriate.
the 'ban' example is incorrect and is missing the ban data yeah, the Calamity.HTTP.Reason.reason
function is used to add the X-Audit-Log-Reason
http header to the request, the 'reason' field of CreateGuildBanData
is the correct way to attach the reason info for bans.
I'll push an update correcting that example in a bit.
I've made a guild for calamity here: https://discord.gg/NGCThCY