From dcef0b65069fb38fd0f6c4382353167f603ebff1 Mon Sep 17 00:00:00 2001 From: LLLL Colonq Date: Thu, 16 Nov 2023 19:06:43 -0500 Subject: Initial commit --- deps/discord-haskell/examples/gateway.hs | 53 ++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 deps/discord-haskell/examples/gateway.hs (limited to 'deps/discord-haskell/examples/gateway.hs') diff --git a/deps/discord-haskell/examples/gateway.hs b/deps/discord-haskell/examples/gateway.hs new file mode 100644 index 0000000..57e2e75 --- /dev/null +++ b/deps/discord-haskell/examples/gateway.hs @@ -0,0 +1,53 @@ +{-# LANGUAGE OverloadedStrings #-} + +import Control.Monad (forever) +import Control.Concurrent (forkIO, killThread) +import UnliftIO (liftIO) +import Control.Concurrent.Chan +import qualified Data.Text.IO as TIO + +import Discord +import Discord.Types + +import ExampleUtils (getToken, getGuildId) + +main :: IO () +main = gatewayExample + +-- | Prints every event as it happens +gatewayExample :: IO () +gatewayExample = do + tok <- getToken + testserverid <- getGuildId + + outChan <- newChan :: IO (Chan String) + + -- Events are processed in new threads, but stdout isn't + -- synchronized. We get ugly output when multiple threads + -- write to stdout at the same time + threadId <- forkIO $ forever $ readChan outChan >>= putStrLn + + err <- runDiscord $ def { discordToken = tok + , discordOnStart = startHandler testserverid + , discordOnEvent = eventHandler outChan + , discordOnEnd = killThread threadId + } + TIO.putStrLn err + +-- Events are enumerated in the discord docs +-- https://discord.com/developers/docs/topics/gateway#commands-and-events-gateway-events +eventHandler :: Chan String -> Event -> DiscordHandler () +eventHandler out event = liftIO $ writeChan out (show event <> "\n") + + +startHandler :: GuildId -> DiscordHandler () +startHandler testserverid = do + let opts = RequestGuildMembersOpts + { requestGuildMembersOptsGuildId = testserverid + , requestGuildMembersOptsLimit = 100 + , requestGuildMembersOptsNamesStartingWith = "" + } + + -- gateway commands are enumerated in the discord docs + -- https://discord.com/developers/docs/topics/gateway#commands-and-events-gateway-commands + sendCommand (RequestGuildMembers opts) -- cgit v1.2.3