You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
50 lines
1.4 KiB
50 lines
1.4 KiB
{-# LANGUAGE OverloadedStrings #-}
|
|
|
|
module Main where
|
|
|
|
import Control.Monad
|
|
|
|
import qualified Data.Text as T
|
|
import qualified Data.Text.IO as TIO
|
|
|
|
import UnliftIO (liftIO)
|
|
|
|
import Discord
|
|
import Discord.Types
|
|
import qualified Discord.Requests as R
|
|
|
|
cmdPrefix :: T.Text
|
|
cmdPrefix = "%"
|
|
|
|
main :: IO ()
|
|
main = do
|
|
tok <- TIO.readFile "./auth.secret"
|
|
err <- runDiscord $ def { discordToken = tok
|
|
, discordOnStart = onDiscordStart
|
|
, discordOnEnd = liftIO $ putStrLn "Ended"
|
|
, discordOnEvent = onDiscordEvent
|
|
, discordOnLog =
|
|
\s -> TIO.putStrLn s >> TIO.putStrLn ""
|
|
}
|
|
TIO.putStrLn err
|
|
|
|
onDiscordStart :: DiscordHandler ()
|
|
onDiscordStart = undefined
|
|
|
|
onDiscordEvent :: Event -> DiscordHandler ()
|
|
onDiscordEvent (MessageCreate m) = when (not (fromBot m) && isCommand m) $ do
|
|
let content = messageContent m
|
|
let elements = T.words content
|
|
case head elements of
|
|
_ -> unknownCommand m elements
|
|
return ()
|
|
onDiscordEvent _ = return ()
|
|
|
|
fromBot :: Message -> Bool
|
|
fromBot = userIsBot . messageAuthor
|
|
|
|
unknownCommand :: Message -> [Text] -> DiscordHandler ()
|
|
unknownCommand =
|
|
|
|
isCommand :: Message ->Bool
|
|
isCommand = (cmdPrefix `T.isPrefixOf`) . messageContent
|