-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathProgram.cs
More file actions
76 lines (65 loc) · 2.55 KB
/
Copy pathProgram.cs
File metadata and controls
76 lines (65 loc) · 2.55 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
using Discord;
using Discord.Interactions;
using Discord.WebSocket;
using DiscordChannelsBot.CommandManagement.ChannelManagement;
using DiscordChannelsBot.CommandManagement.CommandHandling;
using DiscordChannelsBot.Configuration;
using DiscordChannelsBot.Models;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
namespace DiscordChannelsBot;
internal class Program
{
public static void Main(string[] args)
{
MainAsync(args).GetAwaiter().GetResult();
}
private static async Task MainAsync(string[] args)
{
using var host = CreateHostBuilder(args).Build();
await using var serviceScope = host.Services.CreateAsyncScope();
var serviceProvider = serviceScope.ServiceProvider;
var bot = serviceProvider.GetRequiredService<DiscordBot>();
await StartBot(bot);
}
private static async Task StartBot(DiscordBot bot)
{
await bot.StartAsync();
await Task.Delay(Timeout.Infinite);
}
private static IHostBuilder CreateHostBuilder(string[] args)
{
return Host.CreateDefaultBuilder(args)
.ConfigureLogging(ConfigureLogging)
.ConfigureServices(ConfigureServices);
}
private static void ConfigureLogging(HostBuilderContext context, ILoggingBuilder loggingBuilder)
{
loggingBuilder.ClearProviders();
loggingBuilder.AddConsole();
}
private static void ConfigureServices(HostBuilderContext context, IServiceCollection services)
{
AddDbContext(services);
services.Configure<DiscordBotConfiguration>(context.Configuration.GetSection("DiscordBot"))
.AddSingleton(_ => new DiscordSocketClient(new DiscordSocketConfig
{
GatewayIntents = GatewayIntents.All
}))
// .AddSingleton<CommandService>()
.AddSingleton<InteractionService>()
.AddSingleton<IDiscordBotConfigurationService, DiscordBotFileBasedConfigurationService>()
.AddSingleton<ICommandHandlingService, CommandHandlingService>()
.AddSingleton<IVoiceChannelManagementService, VoiceChannelManagementService>()
.AddSingleton<DiscordBot>();
}
private static void AddDbContext(IServiceCollection services)
{
var connectionString = Environment.GetEnvironmentVariable("DB_CONNECTION_STRING");
services.AddDbContext<ApplicationDbContext>(options =>
options.UseNpgsql(connectionString!)
);
}
}