示例#1
0
        private static void RegisterDiscordClient(IServiceCollection services, BotSecretsConfig config, DiscordSocketConfig socketConfig)
        {
            var client = new DiscordSocketClient(socketConfig);

            services.AddSingleton <IDiscordClient>(client);
            services.AddSingleton(client);
        }
示例#2
0
 public DiscordBot(IServiceProvider serviceProvider, ILogger <DiscordBot> logger, DiscordSocketConfig botConfig, BotSecretsConfig connectionConfig,
                   IGuildConfigService guildConfigService, IVerificationStorageService verificationStorage)
 {
     _serviceProvider     = serviceProvider;
     _verificationStorage = verificationStorage;
     _logger             = logger;
     _guildConfigService = guildConfigService;
     _connectionConfig   = connectionConfig;
     _botConfig          = botConfig;
     _discordClient      = new DiscordSocketClient(botConfig);
 }
        public AzureVerificationService(BotSecretsConfig secretsConfig)
        {
            _secretsConfig = secretsConfig;

            _pca = PublicClientApplicationBuilder
                   .Create(_secretsConfig.DeviceAuthAppId)
                   .WithAuthority($"https://login.microsoftonline.com/{_secretsConfig.AadTenant}")
                   .WithDefaultRedirectUri()
                   .Build();

            _app = ConfidentialClientApplicationBuilder
                   .Create(_secretsConfig.AkvClientId)
                   .WithClientSecret(_secretsConfig.AkvSecret)
                   .WithAuthority($"https://login.microsoftonline.com/{_secretsConfig.AadTenant}")
                   .Build();
        }
        public TableStorageVerificationStorageService(BotSecretsConfig secrets)
        {
            var storageClient = CloudStorageAccount.Parse(secrets.TableStorageConnectionString);

            _tableClient = storageClient.CreateCloudTableClient();
        }
示例#5
0
        private static async Task Main(string[] args)
        {
            var hostBuilder = new HostBuilder()
                              .ConfigureHostConfiguration(config =>
            {
                config.AddEnvironmentVariables("BOTHOSTING:");
            })
                              .ConfigureAppConfiguration((context, config) =>
            {
                config.SetBasePath(Directory.GetCurrentDirectory())
                .AddJsonFile("appsettings.json", false)
                .AddJsonFile($"appsettings.{context.HostingEnvironment.EnvironmentName}.json", true)
                .AddEnvironmentVariables();

                if (context.HostingEnvironment.IsDevelopment())
                {
                    config.AddUserSecrets("CorpinatorBot");
                }

                var secrets = new BotSecretsConfig();
                IConfigurationRoot builtConfig;
                if (context.HostingEnvironment.IsProduction())
                {
                    builtConfig = config.Build();
                    builtConfig.Bind(nameof(BotSecretsConfig), secrets);
                    config.AddAzureKeyVault(secrets.AkvVault, secrets.AkvClientId, secrets.AkvSecret);
                }

                // build and bind a second time to populate secrets found in AKV
                builtConfig = config.Build();
                builtConfig.Bind(nameof(BotSecretsConfig), secrets);

                context.Properties.Add("botSecrets", secrets);
            })
                              .ConfigureLogging((context, logging) =>
            {
                logging.AddConsole();
                if (context.HostingEnvironment.IsDevelopment())
                {
                    logging.AddDebug();
                }
            })
                              .ConfigureServices((context, services) =>
            {
                var secrets      = context.Properties["botSecrets"] as BotSecretsConfig;
                var socketConfig = new DiscordSocketConfig();
                context.Configuration.Bind(socketConfig);
                services.AddSingleton(socketConfig);

                services.AddSingleton(secrets);
                RegisterDiscordClient(services, socketConfig);
                services.AddSingleton <IVerificationStorageService, TableStorageVerificationStorageService>();
                services.AddSingleton <IGuildConfigService, TableStorageGuildConfigService>();
                services.AddTransient <IVerificationService, AzureVerificationService>();

                services.AddHostedService <DiscordBot>();
                services.AddHostedService <OngoingValidator>();
            })
                              .UseConsoleLifetime();

            await hostBuilder.RunConsoleAsync();
        }