Ejemplo n.º 1
0
        public async Task <bool> EnsureExistsAsync(ulong userId)
        {
            await using var context = new RiftContext();
            if (await context.Users
                .AsQueryable()
                .AnyAsync(x => x.UserId == userId))
            {
                return(true);
            }

            try
            {
                var entry = new RiftUser
                {
                    UserId = userId,
                };

                await context.Users.AddAsync(entry);

                await context.SaveChangesAsync();

                OnUserCreated?.Invoke(null, new UserCreatedEventArgs(userId));
                return(true);
            }
            catch
            {
                RiftBot.Log.Error($"Failed to check {nameof(EnsureExistsAsync)} for user {userId.ToString()}.");
                return(false);
            }
        }
Ejemplo n.º 2
0
        public async Task RemoveAsync(ulong userId)
        {
            await using var context = new RiftContext();
            var dbUser = new RiftUser
            {
                UserId = userId,
            };

            context.Users.Remove(dbUser);
            await context.SaveChangesAsync();
        }
Ejemplo n.º 3
0
        public async Task SetBackgroundAsync(ulong userId, int backgroundId)
        {
            var dbUser = new RiftUser
            {
                UserId            = userId,
                ProfileBackground = backgroundId
            };

            await using var context = new RiftContext();
            context.Entry(dbUser).Property(x => x.ProfileBackground).IsModified = true;
            await context.SaveChangesAsync();
        }
Ejemplo n.º 4
0
        public async Task AddExperienceAsync(ulong userId, uint exp = 0u)
        {
            if (exp == uint.MinValue)
            {
                return;
            }

            if (!await EnsureExistsAsync(userId))
            {
                throw new DatabaseException(nameof(AddExperienceAsync));
            }

            var dbUser = new RiftUser {
                UserId = userId
            };

            var profile = await GetAsync(userId);

            var cooldowns = await DB.Cooldowns.GetAsync(userId);

            await using var context = new RiftContext();
            var entry = context.Attach(dbUser);

            if (DateTime.UtcNow < cooldowns.DoubleExpTime)
            {
                exp *= 2;
            }

            var expBefore = profile.Experience;

            if (uint.MaxValue - expBefore < exp)
            {
                dbUser.Experience = uint.MaxValue;
            }
            else
            {
                dbUser.Experience = expBefore + exp;
            }

            entry.Property(x => x.Experience).IsModified = true;

            await context.SaveChangesAsync();
        }
Ejemplo n.º 5
0
        public async Task SetLevelAsync(ulong userId, uint level)
        {
            if (!await EnsureExistsAsync(userId))
            {
                throw new DatabaseException(nameof(SetLevelAsync));
            }

            var user = new RiftUser
            {
                UserId = userId,
                Level  = level,
            };

            await using var context = new RiftContext();
            context.Attach(user).Property(x => x.Level).IsModified = true;
            await context.SaveChangesAsync();

            OnLevelReached?.Invoke(null, new LevelReachedEventArgs(userId, level));
        }