summaryrefslogtreecommitdiff
path: root/deps/discord-haskell/examples/gateway.hs
diff options
context:
space:
mode:
Diffstat (limited to 'deps/discord-haskell/examples/gateway.hs')
-rw-r--r--deps/discord-haskell/examples/gateway.hs53
1 files changed, 53 insertions, 0 deletions
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)