build method

Client build()

Implementation

Client build() {
  _watcherConfig.watchedFiles.add(_scaffold.entrypoint);

  ioc
    ..bind<ScaffoldContract>(() => _scaffold)
    ..bind<LoggerContract>(() => _logger)
    ..bind<EnvContract>(() => _env);

  _validateEnvironment();
  _createCache();

  final token = _env.get<String>(AppEnv.token);
  final httpVersion = int.parse(_env.get(AppEnv.discordRestHttpVersion));
  final shardVersion = int.parse(_env.get(AppEnv.discordWssVersion));
  final intent = int.parse(_env.get(AppEnv.intent));

  final http = HttpClient(
      config: HttpClientConfigImpl(baseUrl: '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);

  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,
    watcherConfig: _watcherConfig,
    logger: _logger,
    environment: _env,
    httpClient: http,
    packetListener: packetListener,
    providerManager: providerManager,
    eventListener: eventListener,
    globalState: globalStateManager,
    interactiveComponent: interactiveComponent,
    wss: wssOrchestrator,
  );

  final datastore = DataStore(http);

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

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

  final client = Client(kernel);

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

  return client;
}