Example #1
0
        public async Task <bool> GiftWaifuAsync(ulong from, IUser giftedWaifu, WaifuItem itemObj)
        {
            if (!await _cs.RemoveAsync(from, "Bought waifu item", itemObj.Price, gamble: true))
            {
                return(false);
            }

            using (var uow = _db.UnitOfWork)
            {
                var w = uow.Waifus.ByWaifuUserId(giftedWaifu.Id, set => set.Include(x => x.Items));
                if (w == null)
                {
                    uow.Waifus.Add(w = new WaifuInfo()
                    {
                        Affinity = null,
                        Claimer  = null,
                        Price    = 1,
                        Waifu    = uow.DiscordUsers.GetOrCreate(giftedWaifu),
                    });
                }
                w.Items.Add(itemObj);
                if (w.Claimer?.UserId == from)
                {
                    w.Price += (int)(itemObj.Price * 0.95);
                }
                else
                {
                    w.Price += itemObj.Price / 2;
                }

                await uow.CompleteAsync();
            }
            return(true);
        }
Example #2
0
            public async Task WaifuGift()
            {
                var embed = new EmbedBuilder()
                            .WithTitle(GetText("waifu_gift_shop"))
                            .WithOkColor();

                Enum.GetValues(typeof(WaifuItem.ItemName))
                .Cast <WaifuItem.ItemName>()
                .Select(x => WaifuItem.GetItem(x))
                .ForEach(x => embed.AddField(f => f.WithName(x.ItemEmoji + " " + x.Item).WithValue(x.Price).WithIsInline(true)));

                await Context.Channel.EmbedAsync(embed).ConfigureAwait(false);
            }
Example #3
0
            public async Task WaifuGift(WaifuItem.ItemName item, [Remainder] IUser waifu)
            {
                if (waifu.Id == Context.User.Id)
                {
                    return;
                }

                var itemObj = WaifuItem.GetItem(item, _bc.BotConfig.WaifuGiftMultiplier);

                using (var uow = _db.UnitOfWork)
                {
                    var w = uow.Waifus.ByWaifuUserId(waifu.Id);

                    //try to buy the item first

                    if (!await _cs.RemoveAsync(Context.User.Id, "Bought waifu item", itemObj.Price, gamble: true))
                    {
                        await ReplyErrorLocalized("not_enough", _bc.BotConfig.CurrencySign).ConfigureAwait(false);

                        return;
                    }
                    if (w == null)
                    {
                        uow.Waifus.Add(w = new WaifuInfo()
                        {
                            Affinity = null,
                            Claimer  = null,
                            Price    = 1,
                            Waifu    = uow.DiscordUsers.GetOrCreate(waifu),
                        });

                        w.Waifu.Username      = waifu.Username;
                        w.Waifu.Discriminator = waifu.Discriminator;
                    }
                    w.Items.Add(itemObj);
                    if (w.Claimer?.UserId == Context.User.Id)
                    {
                        w.Price += itemObj.Price;
                    }
                    else
                    {
                        w.Price += itemObj.Price / 2;
                    }

                    await uow.CompleteAsync().ConfigureAwait(false);
                }

                await ReplyConfirmLocalized("waifu_gift", Format.Bold(item.ToString() + " " + itemObj.ItemEmoji), Format.Bold(waifu.ToString())).ConfigureAwait(false);
            }
Example #4
0
            public async Task WaifuGift(WaifuItem.ItemName item, [Remainder] IUser waifu)
            {
                if (waifu.Id == Context.User.Id)
                {
                    return;
                }
                var itemObj = WaifuItem.GetItemObject(item, Bc.BotConfig.WaifuGiftMultiplier);
                int sucess  = await _service.GiftWaifuAsync(Context.User.Id, waifu, itemObj);

                if (sucess != 0)
                {
                    await ReplyConfirmLocalized("waifu_gift", Format.Bold(GetText(item.ToString()) + " " + itemObj.ItemEmoji), waifu.Mention, Format.Bold(String.Format("{0:#,0}", sucess) + Bc.BotConfig.CurrencySign));
                }
                else
                {
                    await ReplyErrorLocalized("not_enough", Bc.BotConfig.CurrencySign);
                }
            }
            public async Task WaifuGift(WaifuItem.ItemName item, [Leftover] IUser waifu)
            {
                if (waifu.Id == ctx.User.Id)
                {
                    return;
                }

                var  itemObj = WaifuItem.GetItemObject(item, Bc.BotConfig.WaifuGiftMultiplier);
                bool sucess  = await _service.GiftWaifuAsync(ctx.User.Id, waifu, itemObj);

                if (sucess)
                {
                    await ReplyConfirmLocalizedAsync("waifu_gift", Format.Bold(item.ToString() + " " + itemObj.ItemEmoji), Format.Bold(waifu.ToString()));
                }
                else
                {
                    await ReplyErrorLocalizedAsync("not_enough", Bc.BotConfig.CurrencySign);
                }
            }
            public async Task WaifuGift(int page = 1)
            {
                if (--page < 0 || page > 3)
                {
                    return;
                }

                await ctx.SendPaginatedConfirmAsync(page, (cur) =>
                {
                    var embed = new EmbedBuilder()
                                .WithTitle(GetText("waifu_gift_shop"))
                                .WithOkColor();

                    Enum.GetValues(typeof(WaifuItem.ItemName))
                    .Cast <WaifuItem.ItemName>()
                    .Select(x => WaifuItem.GetItemObject(x, Bc.BotConfig.WaifuGiftMultiplier))
                    .OrderBy(x => x.Price)
                    .Skip(9 * cur)
                    .Take(9)
                    .ForEach(x => embed.AddField(f => f.WithName(x.ItemEmoji + " " + x.Item).WithValue(x.Price).WithIsInline(true)));

                    return(embed);
                }, Enum.GetValues(typeof(WaifuItem.ItemName)).Length, 9);
            }