public async Task <(DiscordUser, bool, TimeSpan?)> ChangeAffinityAsync(IUser user, IGuildUser target) { DiscordUser oldAff = null; var success = false; TimeSpan? remaining = null; using (var uow = _db.UnitOfWork) { var w = uow.Waifus.ByWaifuUserId(user.Id); var newAff = target == null ? null : uow.DiscordUsers.GetOrCreate(target); var now = DateTime.UtcNow; if (w?.Affinity?.UserId == target?.Id) { } else if (!_cache.TryAddAffinityCooldown(user.Id, out remaining)) { } else if (w == null) { var thisUser = uow.DiscordUsers.GetOrCreate(user); uow.Waifus.Add(new WaifuInfo() { Affinity = newAff, Waifu = thisUser, Price = 1, Claimer = null }); success = true; uow._context.WaifuUpdates.Add(new WaifuUpdate() { User = thisUser, Old = null, New = newAff, UpdateType = WaifuUpdateType.AffinityChanged }); } else { if (w.Affinity != null) { oldAff = w.Affinity; } w.Affinity = newAff; success = true; uow._context.WaifuUpdates.Add(new WaifuUpdate() { User = w.Waifu, Old = oldAff, New = newAff, UpdateType = WaifuUpdateType.AffinityChanged }); } await uow.CompleteAsync(); } return(oldAff, success, remaining); }
public async Task WaifuClaimerAffinity([Remainder] IGuildUser u = null) { if (u?.Id == Context.User.Id) { await ReplyErrorLocalized("waifu_egomaniac").ConfigureAwait(false); return; } DiscordUser oldAff = null; var sucess = false; TimeSpan? remaining = null; using (var uow = _db.UnitOfWork) { var w = uow.Waifus.ByWaifuUserId(Context.User.Id); var newAff = u == null ? null : uow.DiscordUsers.GetOrCreate(u); var now = DateTime.UtcNow; if (w?.Affinity?.UserId == u?.Id) { } else if (!_cache.TryAddAffinityCooldown(Context.User.Id, out remaining)) { } else if (w == null) { var thisUser = uow.DiscordUsers.GetOrCreate(Context.User); uow.Waifus.Add(new WaifuInfo() { Affinity = newAff, Waifu = thisUser, Price = 1, Claimer = null }); sucess = true; uow._context.WaifuUpdates.Add(new WaifuUpdate() { User = thisUser, Old = null, New = newAff, UpdateType = WaifuUpdateType.AffinityChanged }); } else { if (w.Affinity != null) { oldAff = w.Affinity; } w.Affinity = newAff; sucess = true; uow._context.WaifuUpdates.Add(new WaifuUpdate() { User = w.Waifu, Old = oldAff, New = newAff, UpdateType = WaifuUpdateType.AffinityChanged }); } await uow.CompleteAsync().ConfigureAwait(false); } if (!sucess) { if (remaining != null) { await ReplyErrorLocalized("waifu_affinity_cooldown", Format.Bold(((int)remaining?.TotalHours).ToString()), Format.Bold(remaining?.Minutes.ToString())).ConfigureAwait(false); } else { await ReplyErrorLocalized("waifu_affinity_already").ConfigureAwait(false); } return; } if (u == null) { await ReplyConfirmLocalized("waifu_affinity_reset").ConfigureAwait(false); } else if (oldAff == null) { await ReplyConfirmLocalized("waifu_affinity_set", Format.Bold(u.ToString())).ConfigureAwait(false); } else { await ReplyConfirmLocalized("waifu_affinity_changed", Format.Bold(oldAff.ToString()), Format.Bold(u.ToString())).ConfigureAwait(false); } }