mirror of
				https://gitlab.com/Kwoth/nadekobot.git
				synced 2025-11-04 08:34:27 -05:00 
			
		
		
		
	Fixed .bank take, added .bank seize alias. Added .bank award
This commit is contained in:
		@@ -75,7 +75,21 @@ public partial class Gambling
 | 
			
		||||
 | 
			
		||||
        private async Task BankTakeInternalAsync(long amount, ulong userId)
 | 
			
		||||
        {
 | 
			
		||||
            if (await _bank.WithdrawAsync(userId, amount))
 | 
			
		||||
            if (await _bank.TakeAsync(userId, amount))
 | 
			
		||||
            {
 | 
			
		||||
                await ReplyErrorLocalizedAsync(strs.take_fail(N(amount),
 | 
			
		||||
                    _client.GetUser(userId)?.ToString()
 | 
			
		||||
                    ?? userId.ToString(),
 | 
			
		||||
                    CurrencySign));
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
            
 | 
			
		||||
            await ctx.OkAsync();
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
        private async Task BankAwardInternalAsync(long amount, ulong userId)
 | 
			
		||||
        {
 | 
			
		||||
            if (await _bank.AwardAsync(userId, amount))
 | 
			
		||||
            {
 | 
			
		||||
                await ReplyErrorLocalizedAsync(strs.take_fail(N(amount),
 | 
			
		||||
                    _client.GetUser(userId)?.ToString()
 | 
			
		||||
@@ -89,7 +103,7 @@ public partial class Gambling
 | 
			
		||||
 | 
			
		||||
        [Cmd]
 | 
			
		||||
        [OwnerOnly]
 | 
			
		||||
        [Priority(-1)]
 | 
			
		||||
        [Priority(1)]
 | 
			
		||||
        public async Task BankTake(long amount, [Leftover] IUser user)
 | 
			
		||||
            => await BankTakeInternalAsync(amount, user.Id);
 | 
			
		||||
        
 | 
			
		||||
@@ -98,5 +112,10 @@ public partial class Gambling
 | 
			
		||||
        [Priority(0)]
 | 
			
		||||
        public async Task BankTake(long amount, ulong userId)
 | 
			
		||||
            => await BankTakeInternalAsync(amount, userId);
 | 
			
		||||
        
 | 
			
		||||
        [Cmd]
 | 
			
		||||
        [OwnerOnly]
 | 
			
		||||
        public async Task BankAward(long amount, [Leftover] IUser user)
 | 
			
		||||
            => await BankAwardInternalAsync(amount, user.Id);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -15,6 +15,48 @@ public sealed class BankService : IBankService, INService
 | 
			
		||||
        _db = db;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public async Task<bool> AwardAsync(ulong userId, long amount)
 | 
			
		||||
    {
 | 
			
		||||
        if (amount <= 0)
 | 
			
		||||
            throw new ArgumentOutOfRangeException(nameof(amount));
 | 
			
		||||
 | 
			
		||||
        await using var ctx = _db.GetDbContext();
 | 
			
		||||
        await ctx.BankUsers
 | 
			
		||||
            .ToLinqToDBTable()
 | 
			
		||||
            .InsertOrUpdateAsync(() => new()
 | 
			
		||||
                {
 | 
			
		||||
                    UserId = userId,
 | 
			
		||||
                    Balance = amount
 | 
			
		||||
                },
 | 
			
		||||
                (old) => new()
 | 
			
		||||
                {
 | 
			
		||||
                    Balance = old.Balance + amount
 | 
			
		||||
                },
 | 
			
		||||
                () => new()
 | 
			
		||||
                {
 | 
			
		||||
                    UserId = userId
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
        return true;
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    public async Task<bool> TakeAsync(ulong userId, long amount)
 | 
			
		||||
    {
 | 
			
		||||
        if (amount <= 0)
 | 
			
		||||
            throw new ArgumentOutOfRangeException(nameof(amount));
 | 
			
		||||
        
 | 
			
		||||
        await using var ctx = _db.GetDbContext();
 | 
			
		||||
        var rows = await ctx.BankUsers
 | 
			
		||||
            .ToLinqToDBTable()
 | 
			
		||||
            .Where(x => x.UserId == userId && x.Balance >= amount)
 | 
			
		||||
            .UpdateAsync((old) => new()
 | 
			
		||||
            {
 | 
			
		||||
                Balance = old.Balance - amount
 | 
			
		||||
            });
 | 
			
		||||
        
 | 
			
		||||
        return rows > 0;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public async Task<bool> DepositAsync(ulong userId, long amount)
 | 
			
		||||
    {
 | 
			
		||||
        if (amount <= 0)
 | 
			
		||||
 
 | 
			
		||||
@@ -5,4 +5,6 @@ public interface IBankService
 | 
			
		||||
    Task<bool> DepositAsync(ulong userId, long amount);
 | 
			
		||||
    Task<bool> WithdrawAsync(ulong userId, long amount);
 | 
			
		||||
    Task<long> GetBalanceAsync(ulong userId);
 | 
			
		||||
    Task<bool> AwardAsync(ulong userId, long amount);
 | 
			
		||||
    Task<bool> TakeAsync(ulong userId, long amount);
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user