website/backend/src/Main.hs
2024-12-05 15:44:50 -06:00

41 lines
No EOL
1.2 KiB
Haskell
Executable file

-- allows "string literals" to be Text
{-# LANGUAGE OverloadedStrings #-}
module Main where
import Control.Monad (void, when)
import Data.Text (Text, isPrefixOf, toLower)
import Data.Text.IO as TIO
import Discord
import Discord.Requests as R
import Discord.Types
import UnliftIO.Concurrent
-- | Replies "pong" to every message that starts with "ping"
main :: IO ()
main = do
userFacingError <-
runDiscord $
def
{ discordToken = "Bot ZZZZZZZZZZZZZZZZZZZ",
discordOnEvent = eventHandler,
discordOnLog = \s -> TIO.putStrLn s >> TIO.putStrLn ""
} -- if you see OnLog error, post in the discord / open an issue
TIO.putStrLn userFacingError
-- userFacingError is an unrecoverable error
-- put normal 'cleanup' code in discordOnEnd (see examples)
eventHandler :: Event -> DiscordHandler ()
eventHandler event = case event of
MessageCreate m -> when (isPing m && not (fromBot m)) $ do
void $ restCall (R.CreateReaction (messageChannelId m, messageId m) "eyes")
threadDelay (2 * 10 ^ 6)
void $ restCall (R.CreateMessage (messageChannelId m) "Pong!")
_ -> return ()
fromBot :: Message -> Bool
fromBot = userIsBot . messageAuthor
isPing :: Message -> Bool
isPing = ("ping" `isPrefixOf`) . toLower . messageContent