示例#1
0
        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);
        }
示例#2
0
            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);
                }
            }