using Discord; using NadekoBot.Core.Services; using System; using System.Collections.Concurrent; using System.Threading.Tasks; namespace NadekoBot.Modules.Gambling.Services { public class WaifuService : INService { private readonly DbService _db; private readonly CurrencyService _cs; public ConcurrentDictionary DivorceCooldowns { get; } = new ConcurrentDictionary(); public ConcurrentDictionary AffinityCooldowns { get; } = new ConcurrentDictionary(); public WaifuService(DbService db, CurrencyService cs) { _db = db; _cs = cs; } public async Task WaifuTransfer(IUser owner, ulong waifuId, IUser newOwner) { if (owner.Id == newOwner.Id || waifuId == newOwner.Id) return false; using (var uow = _db.UnitOfWork) { var waifu = uow.Waifus.ByWaifuUserId(waifuId); var ownerUser = uow.DiscordUsers.GetOrCreate(owner); // owner has to be the owner of the waifu if (waifu == null || waifu.ClaimerId != ownerUser.Id) return false; if (!await _cs.RemoveAsync(owner.Id, "Waifu Transfer", waifu.Price / 10, uow).ConfigureAwait(false)) { return false; } //new claimerId is the id of the new owner var newOwnerUser = uow.DiscordUsers.GetOrCreate(newOwner); waifu.ClaimerId = newOwnerUser.Id; await uow.CompleteAsync().ConfigureAwait(false); } return true; } } }