module EventHandler ( handleEvent ) where
import Control.Applicative ( (<|>) )
import Control.Monad ( unless )
import Data.Foldable ( for_ )
import qualified Data.Text as T ( head )
import Discord.Types
import Discord
import qualified Academic
import qualified Admin
import qualified BinancePriceFetcher
import qualified Misc
import qualified Helpme
import qualified Haskell
import qualified HallOfFame
import qualified RoleSelfAssign
import qualified MCServer
import qualified QuoteSystem
import qualified ModifyEventsChannel
commandReceivers :: [Message -> DiscordHandler ()]
commandReceivers :: [Message -> DiscordHandler ()]
commandReceivers = [[Message -> DiscordHandler ()]] -> [Message -> DiscordHandler ()]
forall (t :: * -> *) a. Foldable t => t [a] -> [a]
concat
[
[Message -> DiscordHandler ()]
Admin.receivers
, [Message -> DiscordHandler ()]
Academic.receivers
, [Message -> DiscordHandler ()]
BinancePriceFetcher.receivers
, [Message -> DiscordHandler ()]
Misc.receivers
, [Message -> DiscordHandler ()]
Helpme.receivers
, [Message -> DiscordHandler ()]
Haskell.receivers
, [Message -> DiscordHandler ()]
HallOfFame.messageReceivers
, [Message -> DiscordHandler ()]
MCServer.receivers
, [Message -> DiscordHandler ()]
QuoteSystem.receivers
, [Message -> DiscordHandler ()]
ModifyEventsChannel.receivers
, [Message -> DiscordHandler ()]
RoleSelfAssign.receivers
]
reactionAddReceivers :: [ReactionInfo -> DiscordHandler ()]
reactionAddReceivers :: [ReactionInfo -> DiscordHandler ()]
reactionAddReceivers = [[ReactionInfo -> DiscordHandler ()]]
-> [ReactionInfo -> DiscordHandler ()]
forall (t :: * -> *) a. Foldable t => t [a] -> [a]
concat
[
[ReactionInfo -> DiscordHandler ()]
Misc.reactionReceivers
, [ReactionInfo -> DiscordHandler ()]
HallOfFame.reactionReceivers
, [ReactionInfo -> DiscordHandler ()]
RoleSelfAssign.reactionAddReceivers
]
{-# ANN reactionRemoveReceivers "HLint: ignore Evaluate" #-}
reactionRemoveReceivers :: [ReactionInfo -> DiscordHandler()]
reactionRemoveReceivers :: [ReactionInfo -> DiscordHandler ()]
reactionRemoveReceivers = [[ReactionInfo -> DiscordHandler ()]]
-> [ReactionInfo -> DiscordHandler ()]
forall (t :: * -> *) a. Foldable t => t [a] -> [a]
concat
[ [ReactionInfo -> DiscordHandler ()]
RoleSelfAssign.reactionRemReceivers
]
isFromBot :: Message -> Bool
isFromBot :: Message -> Bool
isFromBot Message
m = User -> Bool
userIsBot (Message -> User
messageAuthor Message
m)
handleEvent :: Event -> DiscordHandler ()
handleEvent :: Event -> DiscordHandler ()
handleEvent Event
event = case Event
event of
MessageCreate Message
m ->
Bool -> DiscordHandler () -> DiscordHandler ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (Message -> Bool
isFromBot Message
m) (DiscordHandler () -> DiscordHandler ())
-> DiscordHandler () -> DiscordHandler ()
forall a b. (a -> b) -> a -> b
$ [Message -> DiscordHandler ()]
-> ((Message -> DiscordHandler ()) -> DiscordHandler ())
-> DiscordHandler ()
forall (t :: * -> *) (f :: * -> *) a b.
(Foldable t, Applicative f) =>
t a -> (a -> f b) -> f ()
for_ [Message -> DiscordHandler ()]
commandReceivers ((Message -> DiscordHandler ()) -> Message -> DiscordHandler ()
forall a b. (a -> b) -> a -> b
$ Message
m)
MessageReactionAdd ReactionInfo
r ->
[ReactionInfo -> DiscordHandler ()]
-> ((ReactionInfo -> DiscordHandler ()) -> DiscordHandler ())
-> DiscordHandler ()
forall (t :: * -> *) (f :: * -> *) a b.
(Foldable t, Applicative f) =>
t a -> (a -> f b) -> f ()
for_ [ReactionInfo -> DiscordHandler ()]
reactionAddReceivers ((ReactionInfo -> DiscordHandler ())
-> ReactionInfo -> DiscordHandler ()
forall a b. (a -> b) -> a -> b
$ ReactionInfo
r) DiscordHandler () -> DiscordHandler () -> DiscordHandler ()
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> () -> DiscordHandler ()
forall (f :: * -> *) a. Applicative f => a -> f a
pure ()
MessageReactionRemove ReactionInfo
r ->
[ReactionInfo -> DiscordHandler ()]
-> ((ReactionInfo -> DiscordHandler ()) -> DiscordHandler ())
-> DiscordHandler ()
forall (t :: * -> *) (f :: * -> *) a b.
(Foldable t, Applicative f) =>
t a -> (a -> f b) -> f ()
for_ [ReactionInfo -> DiscordHandler ()]
reactionRemoveReceivers ((ReactionInfo -> DiscordHandler ())
-> ReactionInfo -> DiscordHandler ()
forall a b. (a -> b) -> a -> b
$ ReactionInfo
r) DiscordHandler () -> DiscordHandler () -> DiscordHandler ()
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> () -> DiscordHandler ()
forall (f :: * -> *) a. Applicative f => a -> f a
pure ()
Event
_ -> () -> DiscordHandler ()
forall (f :: * -> *) a. Applicative f => a -> f a
pure ()