public override IServiceCollection ConfigureServices(IServiceCollection services)
    {
        services.AddHttpClient <RestClientBase>((services, client) => client.BaseAddress = new(services.GetService <IApiConfig>().ApiHost));

        services.AddSingleton <IEncryptionService>(services =>
        {
            if (services.GetRequiredService <IApiConfig>().AzureIdentity is not null)
            {
                KeyVaultService kvs = ActivatorUtilities.CreateInstance <KeyVaultService>(services);
                kvs.InitializeAsync(CancellationToken.None).GetAwaiter().GetResult();
                return(kvs);
            }
            else
            {
                return(ActivatorUtilities.CreateInstance <LocalEncryptionService>(services));
            }
        });

        services.AddAuthorizationCore(options =>
        {
            options.AddPolicy(AuthorizationExtensions.RequireManageGuildPermission, policy => policy
                              .RequireGuildRole(Permissions.ManageGuild));

            options.AddPolicy(AuthorizationExtensions.RequireBanMembersPermission, policy => policy
                              .RequireGuildRole(Permissions.BanMembers));
        });

        services.AddScoped <IAuthorizationHandler, GuildAccessAuthorizationHandler>();

        return(services
               .AddSingleton <GuildTrafficHandler>()
               .AddSingleton <BroadcastsListener>()
               .AddSingleton <ComponentInteractionsListener>()
               .AddSingleton(services =>
        {
            TrustlistClient client = ActivatorUtilities.CreateInstance <TrustlistClient>(services);
            client.SetBaseUri(new(services.GetRequiredService <IApiConfig>().ApiHost));
            return client;
        })
               .AddSingleton(services =>
        {
            EmitterClient client = ActivatorUtilities.CreateInstance <EmitterClient>(services);
            client.SetBaseUri(new(services.GetRequiredService <IApiConfig>().ApiHost));
            return client;
        })
               .AddSingleton <ApiAuthService>()
               .AddSingleton(s => s.GetRequiredService <IInterfaceConfigProvider <IApiConfig> >().InitConfig(PluginManifest.ApiConfigFileName).PopulateApiConfig()));
    }
 public EmitterModule(EmitterClient emitterClient, ApiAuthService apiAuthService, IDatabaseProvider <PluginManifest> database)
 {
     guildConfig          = database.GetMongoDatabase().GetCollection <GuildConfig>(nameof(GuildConfig));
     _emitterClient       = emitterClient;
     this._apiAuthService = apiAuthService;
 }