private static (ModixContext, GuildUserRepository) BuildTestContext()
        {
            var modixContext = TestDataContextFactory.BuildTestDataContext(x =>
            {
                x.Set <UserEntity>().AddRange(Users.Entities.Clone());
                x.Set <GuildUserEntity>().AddRange(GuildUsers.Entities.Clone());
            });

            var uut = new GuildUserRepository(modixContext);

            return(modixContext, uut);
        }
Exemplo n.º 2
0
        /// <summary>
        /// Imports the given <see cref="RowboatInfraction"/>s, mapping them to Modix infractions
        /// </summary>
        /// <param name="rowboatInfractions">The <see cref="IEnumerable{T}"/> of infractions to be imported</param>
        /// <returns>The count of imported infractions</returns>
        public async Task <int> ImportInfractionsAsync(IEnumerable <RowboatInfraction> rowboatInfractions)
        {
            AuthorizationService.RequireAuthenticatedGuild();
            AuthorizationService.RequireAuthenticatedUser();
            AuthorizationService.RequireClaims(AuthorizationClaim.ModerationConfigure, AuthorizationClaim.ModerationWarn,
                                               AuthorizationClaim.ModerationNote, AuthorizationClaim.ModerationBan);

            if (!AuthorizationService.CurrentGuildId.HasValue)
            {
                throw new InvalidOperationException("Cannot import infractions without a guild context");
            }

            var importCount = 0;

            using (var transaction = await InfractionRepository.BeginCreateTransactionAsync())
            {
                foreach (var infraction in rowboatInfractions.Where(d => d.Active))
                {
                    if (await GuildUserRepository.ReadSummaryAsync(infraction.User.Id, AuthorizationService.CurrentGuildId.Value) != null &&
                        await GuildUserRepository.ReadSummaryAsync(infraction.Actor.Id, AuthorizationService.CurrentGuildId.Value) != null)
                    {
                        await InfractionRepository.CreateAsync(
                            new InfractionCreationData()
                        {
                            GuildId     = AuthorizationService.CurrentGuildId.Value,
                            Type        = infraction.ModixInfractionType,
                            SubjectId   = infraction.User.Id,
                            Reason      = infraction.Reason,
                            CreatedById = infraction.Actor.Id
                        });

                        importCount++;
                    }
                }

                transaction.Commit();
            }

            return(importCount);
        }
Exemplo n.º 3
0
        /// <inheritdoc />
        public async Task TrackUserAsync(IGuildUser user)
        {
            using (var transaction = await GuildUserRepository.BeginCreateTransactionAsync())
            {
                if (!await GuildUserRepository.TryUpdateAsync(user.Id, user.GuildId, data =>
                {
                    // Only update properties that we were given. Updates can be triggered from several different sources, not all of which have all the user's info.
                    if (user.Username != null)
                    {
                        data.Username = user.Username;
                    }
                    if (user.DiscriminatorValue != 0)
                    {
                        data.Discriminator = user.Discriminator;
                    }
                    if ((user.Username != null) && (user.DiscriminatorValue != 0))
                    {
                        data.Nickname = user.Nickname;
                    }
                    data.LastSeen = DateTimeOffset.Now;
                }))
                {
                    await GuildUserRepository.CreateAsync(new GuildUserCreationData()
                    {
                        UserId        = user.Id,
                        GuildId       = user.GuildId,
                        Username      = user.Username ?? "[UNKNOWN USERNAME]",
                        Discriminator = (user.DiscriminatorValue == 0) ? "????" : user.Discriminator,
                        Nickname      = user.Nickname,
                        FirstSeen     = DateTimeOffset.Now,
                        LastSeen      = DateTimeOffset.Now
                    });
                }

                transaction.Commit();
            }
        }
Exemplo n.º 4
0
        public async Task <GuildUserSummary> GetGuildUserSummaryAsync(ulong guildId, ulong userId)
        {
            var found = await GuildUserRepository.ReadSummaryAsync(userId, guildId);

            return(found);
        }