Started up a discord bot with minimal configuration. This currently just replies with some text everytime someone says something.
LFQGL2RWY2CRGIMMGGBN4FENVE2ODL7DXGOSQU3PRRXVD6CFAHAQC {-# LANGUAGE NamedFieldPuns #-}{-# LANGUAGE OverloadedStrings #-}{-# LANGUAGE RecordWildCards #-}module Main whereimport Data.Foldableimport Data.Text (Text)import qualified Data.Text as Textimport qualified Data.Text.IO as TIOimport Control.Monadimport Control.Monad.Readerimport Control.Monad.Trans.Maybeimport System.Environmentimport Discordimport qualified Discord.Requests as Requestimport Discord.Typesdata AppConfig = AppConfig{ botToken :: Text, channels :: [Text]}defaultConfig :: AppConfigdefaultConfig =AppConfig{ botToken = mempty, channels = ["bot-testing"]}getBotToken :: MaybeT IO TextgetBotToken = dotoken <- liftIO $ lookupEnv "DECKVINE_DISCORD_TOKEN"MaybeT . return $ fmap Text.pack tokengetAppConfig :: MaybeT IO AppConfiggetAppConfig = dobotToken <- getBotTokenMaybeT . return $ Just defaultConfig {botToken}runApp :: ReaderT AppConfig IO ()runApp = doconfig <- askuserErr <-liftIO $runDiscord $def{ discordToken = botToken config, discordOnEvent = eventHandler config, discordOnLog = \s -> TIO.putStrLn s >> TIO.putStrLn ""}liftIO $ TIO.putStrLn userErrmain :: IO ()main = doconfig <- runMaybeT getAppConfigfor_ config (runReaderT runApp)eventHandler :: AppConfig -> Event -> DiscordHandler ()eventHandler config event = case event ofMessageCreate m -> unless (fromBot m) $ dochannelRes <- restCall (Request.GetChannel (messageChannelId m))case channelRes ofLeft _ -> pure ()Right channel ->when (permissiveChannels (channels config) channel) $ dovoid $restCall( Request.CreateMessage(messageChannelId m)"Someone's Alive!!")_ -> pure ()fromBot :: Message -> BoolfromBot = userIsBot . messageAuthorpermissiveChannels :: [Text] -> Channel -> BoolpermissiveChannels names channel = case channel ofChannelText {..} -> channelName `elem` names_ -> False