Files
steves-bot/src/StevesBot.Worker/Discord/Extensions.cs
T

50 lines
1.6 KiB
C#
Raw Normal View History

2025-05-18 12:16:14 -05:00
namespace StevesBot.Worker.Discord;
internal static class Extensions
{
public static IServiceCollection AddDiscordRestClient(this IServiceCollection services)
{
services
.AddHttpClient<IDiscordRestClient, DiscordRestClient>(static (sp, c) =>
{
var discordOptions = sp.GetRequiredService<DiscordClientOptions>();
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<IDiscordGatewayClient>? configure)
{
services.AddSingleton<IDiscordGatewayClient>(sp =>
{
var discordOptions = sp.GetRequiredService<DiscordClientOptions>();
var discordRestClient = sp.GetRequiredService<IDiscordRestClient>();
var logger = sp.GetRequiredService<ILogger<DiscordGatewayClient>>();
var socketFactory = sp.GetRequiredService<IWebSocketFactory>();
var timeProvider = sp.GetRequiredService<TimeProvider>();
var serviceScopeFactory = sp.GetRequiredService<IServiceScopeFactory>();
var client = new DiscordGatewayClient(
discordOptions,
socketFactory,
logger,
discordRestClient,
timeProvider,
serviceScopeFactory
);
if (configure is not null)
{
configure(client);
}
return client;
});
return services;
}
}