module Main where import Calamity import Calamity.Cache.InMemory (runCacheInMemory) import Calamity.Commands (useConstantPrefix) import Calamity.Commands.Context (useLightContext) import Calamity.Metrics.Noop (runMetricsNoop) import Control.Lens import Control.Monad (void) import Data.Aeson (eitherDecodeFileStrict) import Data.ByteString (readFile) import Data.Flags (allFlags) import qualified Data.HashMap.Strict as Map import qualified Di (new) import DiPolysemy (runDiToIO) import GHC.Conc (newTVarIO) import Kv import Lib import Polysemy import Polysemy.AtomicState import Prelude hiding (readFile) main = do eitherDecodeFileStrict "./config.json" >>= \case Left e -> print e Right cfg -> do emptyMap <- newTVarIO (Map.empty :: Map.HashMap (Snowflake User) Form) Di.new \di -> -- logging continuation? this is strange do void . runFinal . embedToFinal . runCacheInMemory . runDiToIO di -- logging . runMetricsNoop -- no metrics . useConstantPrefix "¬" . runAtomicStateTVar emptyMap -- trying not to pollute IO . runKVStoreAtomic . useLightContext -- light command context -- all intents . runBotIO (BotToken $ cfg ^. #botToken) allFlags $ program cfg