build method

Client build()

Implementation

Client build() {
  _validateEnvironment();

  final logLevel = env.get(AppEnv.logLevel);
  final dartEnv = env.get<DartEnv>(AppEnv.dartEnv);

  _logger = ioc.make<LoggerContract>(() => Logger(logLevel, dartEnv.value));

  _createCache();

  final token = env.get<String>(AppEnv.token, defaultValue: _token);
  final intent = env.get<int>(AppEnv.intent, defaultValue: _intent);

  final httpVersion = env.get<int>(AppEnv.discordRestHttpVersion,
      defaultValue: _discordRestHttpVersion);

  final shardVersion = env.get<int>(AppEnv.discordWssVersion,
      defaultValue: _discordWssVersion);

  final wsEncodingStrategy =
      env.get(AppEnv.discordWssEncoding, defaultValue: _wssEncoder);

  final http = HttpClient(
      config: HttpClientConfigImpl(
          uri: Uri.parse('https://discord.com/api/v$httpVersion'),
          headers: {
        Header.userAgent('Mineral'),
        Header.contentType('application/json'),
      }));

  final shardConfig = ShardingConfig(
      token: token,
      intent: intent,
      version: shardVersion,
      encoding: wsEncodingStrategy.strategy());

  final packetListener = PacketListener();
  final eventListener = EventListener();
  final providerManager = ProviderManager();
  final globalStateManager = ioc.make(GlobalStateManager.new);
  final interactiveComponent = ioc.make<InteractiveComponentManagerContract>(
      InteractiveComponentManager.new);
  final wssOrchestrator = ioc.make<WebsocketOrchestratorContract>(
      () => WebsocketOrchestrator(shardConfig));

  final kernel = Kernel(
    _hasDefinedDevPort,
    _devPort,
    _watchedFiles,
    logger: _logger,
    httpClient: http,
    packetListener: packetListener,
    providerManager: providerManager,
    eventListener: eventListener,
    globalState: globalStateManager,
    interactiveComponent: interactiveComponent,
    wss: wssOrchestrator,
  );

  ioc
    ..bind<HttpClientContract>(() => http)
    ..bind<Kernel>(() => kernel)
    ..bind<MarshallerContract>(Marshaller.new)
    ..bind<DataStoreContract>(() => DataStore(http))
    ..bind<CommandInteractionManagerContract>(CommandInteractionManager.new);

  packetListener
    ..kernel = kernel
    ..init();

  final client = Client(kernel);

  for (final provider in _providers) {
    providerManager.register(provider(client));
  }

  return client;
}