namespace StevesBot.Worker.Discord; internal static class Extensions { public static IServiceCollection AddDiscordRestClient(this IServiceCollection services) { services .AddHttpClient(static (sp, c) => { var discordOptions = sp.GetRequiredService(); c.BaseAddress = new Uri(discordOptions.ApiUrl); c.DefaultRequestHeaders.Authorization = new("Bot", discordOptions.AppToken); c.DefaultRequestHeaders.Add("User-Agent", $"DiscordBot (https://github.com/StevanFreeborn/steves-bot, 0.0.0)"); }) .AddStandardResilienceHandler(); return services; } public static IServiceCollection AddDiscordGatewayClient(this IServiceCollection services, Action? configure) { services.AddSingleton(sp => { var discordOptions = sp.GetRequiredService(); var discordRestClient = sp.GetRequiredService(); var logger = sp.GetRequiredService>(); var socketFactory = sp.GetRequiredService(); var timeProvider = sp.GetRequiredService(); var serviceScopeFactory = sp.GetRequiredService(); var client = new DiscordGatewayClient( discordOptions, socketFactory, logger, discordRestClient, timeProvider, serviceScopeFactory ); if (configure is not null) { configure(client); } return client; }); return services; } }