content: -- | Module containing the core client stuff
  module Calamity.Client (
    module Calamity.Client.Client,
    module Calamity.Client.Types,
  
    -- * Client stuff
    -- $clientDocs
  ) where
  
  import Calamity.Client.Client
  import Calamity.Client.Types
  
  {- $clientDocs
  
   This module provides the core components for running a discord client, along
   with abstractions for registering event handlers, firing custom events, and
   waiting on events.
  
  
   ==== Registered Metrics
  
       1. Counter: @"events_recieved" [type, shard]@
  
           Incremented for each event received, the @type@ parameter is the type
           of event (the name of the constructor in
           'Calamity.Gateway.DispatchEvents.DispatchData'), and @shard@ is the
           ID of the shard that received the event.
  
       2. Histogram: @"cache_update"@
  
           Tracks how long it takes to update the cache after recieving an event.
  
       3. Histogram: @"event_handle"@
  
           Tracks how long it takes to process an event handler for an event.
  
  
   ==== Examples
  
   A simple client that prints every message recieved:
  
   @
   'Control.Monad.void' . 'Polysemy.runFinal' . 'Polysemy.embedToFinal' . 'Calamity.Cache.InMemory.runCacheInMemory' . 'Calamity.Metrics.Noop.runMetricsNoop' $ 'runBotIO' ('Calamity.Types.Token.BotToken' token) $ do
     'react' \@\''MessageCreateEvt' $ \\msg -> 'Polysemy.embed' $ 'print' msg
   @
  -}
  