示例#1
0
        public async Task <Result <bool, Error> > TryAddMarriage(ulong user1, ulong user2)
        => await _soraTransactor.TryDoInTransactionAsync(async context =>
        {
            this.OrderUserIdsRef(ref user1, ref user2);

            // Check if already exists
            var marr = await context.Marriages.FirstOrDefaultAsync(x => x.Partner1Id == user1 && x.Partner2Id == user2);
            if (marr != null)
            {
                return(new Result <bool, Error>(new Error("You are already married to this person")));
            }

            // Make sure users exists :)
            await context.Users.GetOrCreateUserNoSaveAsync(user1);
            await context.Users.GetOrCreateUserNoSaveAsync(user2);

            var user1Count = await this.GetUserMarriageCount(user1);
            var user2Count = await this.GetUserMarriageCount(user2);
            if (user1Count >= _MAX_MARRIAGES || user2Count >= _MAX_MARRIAGES)
            {
                return(new Result <bool, Error>(new Error("Marriage limit has been reached")));
            }

            // Otherwise we create it
            var marriage = new Marriage()
            {
                Partner1Id   = user1,
                Partner2Id   = user2,
                PartnerSince = DateTime.UtcNow
            };

            context.Marriages.Add(marriage);
            await context.SaveChangesAsync();
            return(true);
        }).ConfigureAwait(false);
示例#2
0
        public async Task <bool> TryUnboxWaifus(ulong userid, List <Waifu> waifus, uint boxCost)
        {
            return(await _soraTransactor.TryDoInTransactionAsync(async context =>
            {
                var user = await context.Users.FindAsync(userid).ConfigureAwait(false);
                if (user == null)
                {
                    return false;
                }

                // check if enough money
                if (user.Coins < boxCost)
                {
                    return false;
                }
                // Remove money
                user.Coins -= boxCost;
                // Give waifus
                foreach (var waifu in waifus)
                {
                    var userWaifu = user.UserWaifus.FirstOrDefault(x => x.WaifuId == waifu.Id);
                    if (userWaifu != null)
                    {
                        userWaifu.Count++;
                        continue;
                    }
                    // otherwise we have to add it
                    userWaifu = new UserWaifu(userid, waifu.Id, 1);
                    user.UserWaifus.Add(userWaifu);
                }

                await context.SaveChangesAsync().ConfigureAwait(false);
                return true;
            }).ConfigureAwait(false));
        }
示例#3
0
 public async Task <bool> TryTakeAmount(ulong userId, uint amount)
 {
     return(await _soraTransactor.TryDoInTransactionAsync(async context =>
     {
         var user = await context.Users.FindAsync(userId).ConfigureAwait(false);
         if (user.Coins < amount)
         {
             return false;
         }
         user.Coins -= amount;
         await context.SaveChangesAsync().ConfigureAwait(false);
         return true;
     }).ConfigureAwait(false));
 }
示例#4
0
 public async Task <bool> SetGuildPrefix(ulong id, string prefix)
 {
     // let's at least test this
     if (string.IsNullOrWhiteSpace(prefix))
     {
         return(false);
     }
     return(await _soraTransactor.TryDoInTransactionAsync(async context =>
     {
         var guild = await GetOrSetAndGetGuild(id, context).ConfigureAwait(false);
         guild.Prefix = prefix;
         await context.SaveChangesAsync().ConfigureAwait(false);
         return true;
     }).ConfigureAwait(false));
 }