public GuildTrafficHandler(ILogger <GuildTrafficHandler> logger, DiscordClient discordClient, TrustlistClient client, IDatabaseProvider <PluginManifest> database)
 {
     _logger           = logger;
     _discordClient    = discordClient;
     _client           = client;
     _configRepository = database.GetMongoDatabase().GetCollection <GuildConfig>(nameof(GuildConfig));
 }
Пример #2
0
    public BroadcastsListener(ILogger <BroadcastsListener> logger, IInterfaceConfigProvider <IApiConfig> configProvider,
                              DiscordClient discordClient, IDatabaseProvider <PluginManifest> database, TrustlistClient trustlistUserApiService)
    {
        IApiConfig config = configProvider.InitConfig(PluginManifest.ApiConfigFileName).PopulateApiConfig();

        _logger          = logger;
        _discordClient   = discordClient;
        _trustlistClient = trustlistUserApiService;
        _guildConfig     = database.GetMongoDatabase().GetCollection <GuildConfig>(nameof(GuildConfig));

        _hubConnection = new HubConnectionBuilder()
                         .WithUrl(config.ApiHost + "/hubs/trustlist")
                         .AddMessagePackProtocol()
                         .WithAutomaticReconnect()
                         .Build();

        void LogBroadcast(string name, ulong userid) => logger.LogDebug("Received SignalR Boradcast: {name} {userId}", name, userid);

        _hubConnection.On <ulong, TrustlistEntry>(nameof(ITrustlistHubPush.NotifyNewEntry), async(userId, entry) =>
        {
            LogBroadcast(nameof(ITrustlistHubPush.NotifyNewEntry), userId);
            await BroadcastUpdateAsync(BroadcastUpdateType.NewEntry, userId, entry);
        });

        _hubConnection.On <ulong, TrustlistEntry, byte>(nameof(ITrustlistHubPush.NotifyEscalatedEntry), async(userId, entry, level) =>
        {
            LogBroadcast(nameof(ITrustlistHubPush.NotifyEscalatedEntry), userId);
            await BroadcastUpdateAsync(BroadcastUpdateType.Escalation, userId, entry);
        });

        _hubConnection.On <ulong, TrustlistEntry>(nameof(ITrustlistHubPush.NotifyDeletedEntry), (userId, entry) =>
        {
            LogBroadcast(nameof(ITrustlistHubPush.NotifyDeletedEntry), userId);
        });
    }
Пример #3
0
    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 TrustlistSlashModule(TrustlistClient trustlist, ApiAuthService apiAuth, IDatabaseProvider <PluginManifest> databaseProvider)
 {
     _trustlist    = trustlist;
     this._apiAuth = apiAuth;
     guildConfig   = databaseProvider.GetMongoDatabase().GetCollection <GuildConfig>(nameof(GuildConfig));
 }