Example #1
0
        public async Task FactoryUserAsync([Summary("id użytkownika")] ulong id, [Summary("czy usunąć karty?")] bool cards = false)
        {
            using (var db = new Database.UserContext(Config))
            {
                var fakeu = await db.GetUserOrCreateAsync(1);

                var user = await db.GetUserOrCreateAsync(id);

                if (!cards)
                {
                    foreach (var card in user.GameDeck.Cards)
                    {
                        card.InCage = false;
                        card.TagList.Clear();
                        card.LastIdOwner = id;
                        fakeu.GameDeck.Cards.Add(card);
                    }
                    user.GameDeck.Cards.Clear();
                }

                db.Users.Remove(user);
                await db.SaveChangesAsync();

                QueryCacheManager.ExpireTag(new string[] { "users", $"user-{id}" });
            }

            await ReplyAsync("", embed : $"Użytkownik o id: `{id}` został wymazany.".ToEmbedMessage(EMType.Success).Build());
        }
Example #2
0
        public async Task TransferCardAsync([Summary("WID")] ulong wid, [Summary("użytkownik")] SocketGuildUser user)
        {
            using (var db = new Database.UserContext(Config))
            {
                var thisCard = db.Cards.FirstOrDefault(x => x.Id == wid);
                if (thisCard == null)
                {
                    await ReplyAsync("", embed : $"Karta o WID: `{wid}` nie istnieje.".ToEmbedMessage(EMType.Bot).Build());

                    return;
                }

                var oldOwnerId = thisCard.GameDeckId;
                var targetUser = await db.GetUserOrCreateAsync(user.Id);

                var fromUser = await db.GetUserOrCreateAsync(oldOwnerId);

                thisCard.Active = false;
                thisCard.InCage = false;
                thisCard.Tags   = null;

                fromUser.GameDeck.Cards.Remove(thisCard);
                targetUser.GameDeck.Cards.Add(thisCard);
                await db.SaveChangesAsync();

                QueryCacheManager.ExpireTag(new string[] { $"user-{Context.User.Id}", "users", $"user-{oldOwnerId}" });

                await ReplyAsync("", embed : $"Karta {thisCard.GetString(false, false, true)} została przeniesiona.".ToEmbedMessage(EMType.Success).Build());
            }
        }
Example #3
0
        private async Task UserLeftAsync(SocketGuildUser user)
        {
            if (user.IsBot || user.IsWebhook)
            {
                return;
            }

            if (!_config.Get().BlacklistedGuilds.Any(x => x == user.Guild.Id))
            {
                using (var db = new Database.GuildConfigContext(_config))
                {
                    var config = await db.GetCachedGuildFullConfigAsync(user.Guild.Id);

                    if (config?.GoodbyeMessage == null)
                    {
                        return;
                    }
                    if (config.GoodbyeMessage == "off")
                    {
                        return;
                    }

                    await SendMessageAsync(ReplaceTags(user, config.GoodbyeMessage), user.Guild.GetTextChannel(config.GreetingChannel));
                }
            }

            var thisUser = _client.Guilds.FirstOrDefault(x => x.Id == user.Id);

            if (thisUser != null)
            {
                return;
            }

            var moveTask = new Task(() =>
            {
                using (var db = new Database.UserContext(_config))
                {
                    var duser = db.GetUserOrCreateAsync(user.Id).Result;
                    var fakeu = db.GetUserOrCreateAsync(1).Result;

                    foreach (var card in duser.GameDeck.Cards)
                    {
                        card.InCage = false;
                        card.TagList.Clear();
                        card.LastIdOwner = user.Id;
                        fakeu.GameDeck.Cards.Add(card);
                    }

                    duser.GameDeck.Cards.Clear();
                    db.Users.Remove(duser);

                    db.SaveChanges();

                    QueryCacheManager.ExpireTag(new string[] { "users" });
                }
            });

            await _executor.TryAdd(new Executable("delete user", moveTask), TimeSpan.FromSeconds(1));
        }
Example #4
0
        public async Task GiveUserScAsync([Summary("użytkownik")] SocketGuildUser user, [Summary("liczba SC(min. 1000)")] uint value)
        {
            if (value < 1000)
            {
                await ReplyAsync("", embed : "Nie można podarować mniej jak 1000 SC.".ToEmbedMessage(EMType.Error).Build());

                return;
            }

            if (user.Id == Context.User.Id)
            {
                await ReplyAsync("", embed : "Coś tutaj nie gra.".ToEmbedMessage(EMType.Error).Build());

                return;
            }

            using (var db = new Database.UserContext(Config))
            {
                if (!db.Users.Any(x => x.Id == user.Id))
                {
                    await ReplyAsync("", embed : "Ta osoba nie ma profilu bota.".ToEmbedMessage(EMType.Error).Build());

                    return;
                }

                var targetUser = await db.GetUserOrCreateAsync(user.Id);

                var thisUser = await db.GetUserOrCreateAsync(Context.User.Id);

                if (thisUser.ScCnt < value)
                {
                    await ReplyAsync("", embed : $"{Context.User.Mention} nie masz wystarczającej ilości SC.".ToEmbedMessage(EMType.Error).Build());

                    return;
                }

                thisUser.ScCnt -= value;

                var newScCnt = (value * 60) / 100;
                targetUser.ScCnt += newScCnt;

                await db.SaveChangesAsync();

                QueryCacheManager.ExpireTag(new string[] { $"user-{thisUser.Id}", "users", $"user-{targetUser.Id}" });

                await ReplyAsync("", embed : $"{Context.User.Mention} podarował {user.Mention} {newScCnt} SC".ToEmbedMessage(EMType.Success).Build());
            }
        }
Example #5
0
        public async Task ModifyPointsTCDiscordAsync(ulong id, [FromBody, Required] long value)
        {
            using (var db = new Database.UserContext(_config))
            {
                var user = db.Users.FirstOrDefault(x => x.Id == id);
                if (user == null)
                {
                    await "User not found!".ToResponse(404).ExecuteResultAsync(ControllerContext);
                    return;
                }

                var exe = new Executable($"api-tc u{id}", new Task(() =>
                {
                    using (var dbs = new Database.UserContext(_config))
                    {
                        user        = dbs.GetUserOrCreateAsync(id).Result;
                        user.TcCnt += value;

                        dbs.SaveChanges();

                        QueryCacheManager.ExpireTag(new string[] { $"user-{user.Id}", "users" });
                    }
                }));

                await _executor.TryAdd(exe, TimeSpan.FromSeconds(1));

                await "TC added!".ToResponse(200).ExecuteResultAsync(ControllerContext);
            }
        }
Example #6
0
        public async Task ToggleCardStatusAsync(ulong wid)
        {
            var currUser = ControllerContext.HttpContext.User;

            if (currUser.HasClaim(x => x.Type == "DiscordId"))
            {
                if (ulong.TryParse(currUser.Claims.First(x => x.Type == "DiscordId").Value, out var discordId))
                {
                    using (var db = new Database.UserContext(_config))
                    {
                        var botUserCh = await db.GetCachedFullUserAsync(discordId);

                        if (botUserCh == null)
                        {
                            await "User not found!".ToResponse(404).ExecuteResultAsync(ControllerContext);
                            return;
                        }

                        var thisCardCh = botUserCh.GameDeck.Cards.FirstOrDefault(x => x.Id == wid);
                        if (thisCardCh == null)
                        {
                            await "Card not found!".ToResponse(404).ExecuteResultAsync(ControllerContext);
                            return;
                        }

                        if (thisCardCh.InCage)
                        {
                            await "Card is in cage!".ToResponse(403).ExecuteResultAsync(ControllerContext);
                            return;
                        }

                        if (!thisCardCh.Active && botUserCh.GameDeck.Cards.Where(x => x.Active).Count() >= 3)
                        {
                            await "Limit of active cards triggered!".ToResponse(403).ExecuteResultAsync(ControllerContext);
                            return;
                        }
                    }

                    var exe = new Executable($"api-deck u{discordId}", new Task(() =>
                    {
                        using (var db = new Database.UserContext(_config))
                        {
                            var botUser     = db.GetUserOrCreateAsync(discordId).Result;
                            var thisCard    = botUser.GameDeck.Cards.FirstOrDefault(x => x.Id == wid);
                            thisCard.Active = !thisCard.Active;

                            db.SaveChanges();

                            QueryCacheManager.ExpireTag(new string[] { $"user-{botUser.Id}", "users" });
                        }
                    }));

                    await _executor.TryAdd(exe, TimeSpan.FromSeconds(1));

                    await "Card status toggled".ToResponse(200).ExecuteResultAsync(ControllerContext);
                    return;
                }
            }
            await "The appropriate claim was not found".ToResponse(403).ExecuteResultAsync(ControllerContext);
        }
Example #7
0
        public async Task AddGlobalEmotesAsync()
        {
            var user = Context.User as SocketGuildUser;

            if (user == null)
            {
                return;
            }

            using (var db = new Database.UserContext(Config))
            {
                var botuser = await db.GetUserOrCreateAsync(user.Id);

                if (botuser.TcCnt < 4000)
                {
                    await ReplyAsync("", embed : $"{user.Mention} nie posiadasz wystarczającej liczby TC!".ToEmbedMessage(EMType.Error).Build());

                    return;
                }

                using (var cdb = new Database.GuildConfigContext(Config))
                {
                    var gConfig = await cdb.GetCachedGuildFullConfigAsync(Context.Guild.Id);

                    var gRole = Context.Guild.GetRole(gConfig.GlobalEmotesRole);
                    if (gRole == null)
                    {
                        await ReplyAsync("", embed : "Serwer nie ma ustawionej roli globalnych emotek.".ToEmbedMessage(EMType.Bot).Build());

                        return;
                    }

                    var global = botuser.TimeStatuses.FirstOrDefault(x => x.Type == Database.Models.StatusType.Globals && x.Guild == Context.Guild.Id);
                    if (global == null)
                    {
                        global = new Database.Models.TimeStatus
                        {
                            Type   = StatusType.Globals,
                            Guild  = Context.Guild.Id,
                            EndsAt = DateTime.Now,
                        };
                        botuser.TimeStatuses.Add(global);
                    }

                    if (!user.Roles.Contains(gRole))
                    {
                        await user.AddRoleAsync(gRole);
                    }

                    global.EndsAt  = global.EndsAt.AddMonths(1);
                    botuser.TcCnt -= 4000;
                }

                await db.SaveChangesAsync();

                QueryCacheManager.ExpireTag(new string[] { $"user-{botuser.Id}", "users" });

                await ReplyAsync("", embed : $"{user.Mention} wykupił miesiąc globalnych emotek!".ToEmbedMessage(EMType.Success).Build());
            }
        }
Example #8
0
        public async Task ChangeBackgroundAsync([Summary("bezpośredni adres do obrazka (450 x 150)")] string imgUrl)
        {
            using (var db = new Database.UserContext(Config))
            {
                var botuser = await db.GetUserOrCreateAsync(Context.User.Id);

                if (botuser.ScCnt < 5000)
                {
                    await ReplyAsync("", embed : $"{Context.User.Mention} nie posiadasz wystarczającej liczby SC!".ToEmbedMessage(EMType.Error).Build());

                    return;
                }

                if (await _profile.SaveProfileImageAsync(imgUrl, $"./GOut/Saved/BG{botuser.Id}.png", 450, 150, true))
                {
                    botuser.BackgroundProfileUri = $"./GOut/Saved/BG{botuser.Id}.png";
                }
                else
                {
                    await ReplyAsync("", embed : "Nie wykryto obrazka! Upewnij się, że podałeś poprawny adres!".ToEmbedMessage(EMType.Error).Build());

                    return;
                }

                botuser.ScCnt -= 5000;

                await db.SaveChangesAsync();

                QueryCacheManager.ExpireTag(new string[] { $"user-{botuser.Id}", "users" });

                await ReplyAsync("", embed : $"Zmieniono tło profilu użytkownika: {Context.User.Mention}!".ToEmbedMessage(EMType.Success).Build());
            }
        }
Example #9
0
        public async Task RestoreCardsAsync([Summary("użytkownik")] SocketGuildUser user)
        {
            using (var db = new Database.UserContext(Config))
            {
                var bUser = await db.GetUserOrCreateAsync(user.Id);

                var thisCards = db.Cards.Include(x => x.TagList).Where(x => (x.LastIdOwner == user.Id || (x.FirstIdOwner == user.Id && x.LastIdOwner == 0)) && x.GameDeckId == 1).ToList();
                if (thisCards.Count < 1)
                {
                    await ReplyAsync("", embed : "Nie odnaleziono kart!".ToEmbedMessage(EMType.Bot).Build());

                    return;
                }

                string reply = $"Karta {thisCards.First().GetString(false, false, true)} została przeniesiona.";
                if (thisCards.Count > 1)
                {
                    reply = $"Przeniesiono {thisCards.Count} kart.";
                }

                foreach (var thisCard in thisCards)
                {
                    thisCard.Active = false;
                    thisCard.InCage = false;
                    thisCard.TagList.Clear();
                    thisCard.GameDeckId = user.Id;
                }

                await db.SaveChangesAsync();

                QueryCacheManager.ExpireTag(new string[] { $"user-{Context.User.Id}", "users" });

                await ReplyAsync("", embed : reply.ToEmbedMessage(EMType.Success).Build());
            }
        }
Example #10
0
        private Executable GetSafariExe(EmbedBuilder embed, IUserMessage msg, Card newCard,
                                        SafariImage pokeImage, ICharacterInfo character, ITextChannel trashChannel, IUser winner)
        {
            return(new Executable("safari", new Task(() =>
            {
                using (var db = new Database.UserContext(_config))
                {
                    var botUser = db.GetUserOrCreateAsync(winner.Id).Result;

                    newCard.FirstIdOwner = winner.Id;
                    newCard.Affection += botUser.GameDeck.AffectionFromKarma();
                    botUser.GameDeck.RemoveCharacterFromWishList(newCard.Character);

                    botUser.GameDeck.Cards.Add(newCard);
                    db.SaveChanges();

                    QueryCacheManager.ExpireTag(new string[] { $"user-{botUser.Id}", "users" });

                    using (var dba = new Database.AnalyticsContext(_config))
                    {
                        dba.UsersData.Add(new Database.Models.Analytics.UserAnalytics
                        {
                            Value = 1,
                            UserId = winner.Id,
                            MeasureDate = DateTime.Now,
                            GuildId = trashChannel?.Guild?.Id ?? 0,
                            Type = Database.Models.Analytics.UserAnalyticsEventType.Card
                        });
                        dba.SaveChanges();
                    }
                }

                _ = Task.Run(async() =>
                {
                    try
                    {
                        embed.ImageUrl = await _waifu.GetSafariViewAsync(pokeImage, newCard, trashChannel);
                        embed.Description = $"{winner.Mention} zdobył na polowaniu i wsadził do klatki:\n"
                                            + $"{newCard.GetString(false, false, true)}\n({newCard.Title})";
                        await msg.ModifyAsync(x => x.Embed = embed.Build());

                        var privEmb = new EmbedBuilder()
                        {
                            Color = EMType.Info.Color(),
                            Description = $"Na [polowaniu]({msg.GetJumpUrl()}) zdobyłeś: {newCard.GetString(false, false, true)}"
                        };

                        var priv = await winner.GetOrCreateDMChannelAsync();
                        if (priv != null)
                        {
                            await priv.SendMessageAsync("", false, privEmb.Build());
                        }
                    }
                    catch (Exception ex)
                    {
                        _logger.Log($"In Safari: {ex}");
                    }
                });
            })));
        }
Example #11
0
        public async Task GiveDailyScAsync()
        {
            using (var db = new Database.UserContext(Config))
            {
                var botuser = await db.GetUserOrCreateAsync(Context.User.Id);

                var daily = botuser.TimeStatuses.FirstOrDefault(x => x.Type == Database.Models.StatusType.Daily);
                if (daily == null)
                {
                    daily = new Database.Models.TimeStatus
                    {
                        Type   = Database.Models.StatusType.Daily,
                        EndsAt = DateTime.MinValue
                    };
                    botuser.TimeStatuses.Add(daily);
                }

                if (daily.IsActive())
                {
                    var timeTo = (int)daily.RemainingMinutes();
                    await ReplyAsync("", embed : $"{Context.User.Mention} następne drobne możesz otrzymać dopiero za {timeTo / 60}h {timeTo % 60}m!".ToEmbedMessage(EMType.Error).Build());

                    return;
                }

                daily.EndsAt   = DateTime.Now.AddHours(20);
                botuser.ScCnt += 100;

                await db.SaveChangesAsync();

                QueryCacheManager.ExpireTag(new string[] { $"user-{botuser.Id}" });

                await ReplyAsync("", embed : $"{Context.User.Mention} łap drobne na waciki!".ToEmbedMessage(EMType.Success).Build());
            }
        }
Example #12
0
        public async Task PlayOnSlotMachineAsync([Summary("typ(info - wyświetla informacje)")] string type = "game")
        {
            if (type != "game")
            {
                await ReplyAsync("", false, $"{_fun.GetSlotMachineGameInfo()}".ToEmbedMessage(EMType.Info).Build());

                return;
            }

            using (var db = new Database.UserContext(Config))
            {
                var botuser = await db.GetUserOrCreateAsync(Context.User.Id);

                var machine = new SlotMachine(botuser);

                var toPay = machine.ToPay();
                if (botuser.ScCnt < toPay)
                {
                    await ReplyAsync("", embed : $"{Context.User.Mention} brakuje Ci SC, aby za tyle zagrać.".ToEmbedMessage(EMType.Error).Build());

                    return;
                }
                var win = machine.Play(new SlotEqualRandom());
                botuser.ScCnt += win - toPay;

                await db.SaveChangesAsync();

                QueryCacheManager.ExpireTag(new string[] { $"user-{botuser.Id}", "users" });

                await ReplyAsync("", embed : $"{_fun.GetSlotMachineResult(machine.Draw(), Context.User, botuser, win)}".ToEmbedMessage(EMType.Bot).Build());
            }
        }
Example #13
0
        public async Task GiveHourlyScAsync()
        {
            using (var db = new Database.UserContext(Config))
            {
                var botuser = await db.GetUserOrCreateAsync(Context.User.Id);

                var hourly = botuser.TimeStatuses.FirstOrDefault(x => x.Type == Database.Models.StatusType.Hourly);
                if (hourly == null)
                {
                    hourly = new Database.Models.TimeStatus
                    {
                        Type   = Database.Models.StatusType.Hourly,
                        EndsAt = DateTime.MinValue
                    };
                    botuser.TimeStatuses.Add(hourly);
                }

                if (hourly.IsActive())
                {
                    var timeTo = (int)hourly.RemainingSeconds();
                    await ReplyAsync("", embed : $"{Context.User.Mention} następne zaskórniaki możesz otrzymać dopiero za {timeTo / 60}m {timeTo % 60}s!".ToEmbedMessage(EMType.Error).Build());

                    return;
                }

                hourly.EndsAt  = DateTime.Now.AddHours(1);
                botuser.ScCnt += 5;

                await db.SaveChangesAsync();

                QueryCacheManager.ExpireTag(new string[] { $"user-{botuser.Id}", "users" });

                await ReplyAsync("", embed : $"{Context.User.Mention} łap piątaka!".ToEmbedMessage(EMType.Success).Build());
            }
        }
Example #14
0
        public async Task SlotMachineSettingsAsync([Summary("typ nastaw(info - wyświetla informacje)")] SlotMachineSetting setting = SlotMachineSetting.Info, [Summary("wartość nastawy")] string value = "info")
        {
            if (setting == SlotMachineSetting.Info)
            {
                await ReplyAsync("", false, $"{_fun.GetSlotMachineInfo()}".ToEmbedMessage(EMType.Info).Build());

                return;
            }

            using (var db = new Database.UserContext(Config))
            {
                var botuser = await db.GetUserOrCreateAsync(Context.User.Id);

                if (!botuser.ApplySlotMachineSetting(setting, value))
                {
                    await ReplyAsync("", embed : $"Podano niewłaściwą wartość parametru!".ToEmbedMessage(EMType.Error).Build());

                    return;
                }

                await db.SaveChangesAsync();

                QueryCacheManager.ExpireTag(new string[] { $"user-{botuser.Id}", "users" });
            }

            await ReplyAsync("", embed : $"{Context.User.Mention} zmienił nastawy automatu.".ToEmbedMessage(EMType.Success).Build());
        }
Example #15
0
        private void SpawnUserPacket(SocketUser user)
        {
            var exe = new Executable($"packet u{user.Id}", new Task(() =>
            {
                using (var db = new Database.UserContext(_config))
                {
                    var botUser = db.GetUserOrCreateAsync(user.Id).Result;
                    if (botUser.IsBlacklisted)
                    {
                        return;
                    }

                    botUser.GameDeck.BoosterPacks.Add(new BoosterPack
                    {
                        CardCnt   = 2,
                        MinRarity = Rarity.E,
                        IsCardFromPackTradable = true,
                        Name = "Pakiet kart za aktywność",
                        CardSourceFromPack = CardSource.Activity
                    });
                    db.SaveChanges();
                }
            }));

            _executor.TryAdd(exe, TimeSpan.FromSeconds(1));
        }
Example #16
0
        public IExecutable GetExecutableGMwK(FightHistory history, List <PlayerInfo> players)
        {
            return(new Executable("GMwK", new Task(() =>
            {
                using (var db = new Database.UserContext(_config))
                {
                    bool isWinner = history.Winner != null;
                    foreach (var p in players)
                    {
                        var u = db.GetUserOrCreateAsync(p.User.Id).Result;
                        var stat = new CardPvPStats
                        {
                            Type = FightType.BattleRoyale,
                            Result = isWinner ? FightResult.Lose : FightResult.Draw
                        };

                        if (isWinner)
                        {
                            if (u.Id == history.Winner.User.Id)
                            {
                                stat.Result = FightResult.Win;
                            }
                        }

                        u.GameDeck.PvPStats.Add(stat);
                    }

                    db.SaveChanges();
                }
            })));
        }
Example #17
0
        public async Task GenerateItemAsync([Summary("użytkownik")] SocketGuildUser user, [Summary("przedmiot")] ItemType itemType, [Summary("liczba przedmiotów")] uint count = 1,
                                            [Summary("jakość przedmiotu")] Quality quality = Quality.Broken)
        {
            var item = itemType.ToItem(count, quality);

            using (var db = new Database.UserContext(Config))
            {
                var botuser = await db.GetUserOrCreateAsync(user.Id);

                var thisItem = botuser.GameDeck.Items.FirstOrDefault(x => x.Type == item.Type && x.Quality == item.Quality);
                if (thisItem == null)
                {
                    thisItem = item;
                    botuser.GameDeck.Items.Add(thisItem);
                }
                else
                {
                    thisItem.Count += count;
                }

                await db.SaveChangesAsync();

                QueryCacheManager.ExpireTag(new string[] { $"user-{botuser.Id}", "users" });

                string cnt = (count > 1) ? $" x{count}" : "";
                await ReplyAsync("", embed : $"{user.Mention} otrzymał _{item.Name}_{cnt}.".ToEmbedMessage(EMType.Success).Build());
            }
        }
Example #18
0
        public async Task ConnectAsync([Summary("adres do profilu")] string url)
        {
            switch (_shinden.ParseUrlToShindenId(url, out var shindenId))
            {
            case Services.UrlParsingError.InvalidUrl:
                await ReplyAsync("", embed : "Wygląda na to, że podałeś niepoprawny link.".ToEmbedMessage(EMType.Error).Build());

                return;

            case Services.UrlParsingError.InvalidUrlForum:
                await ReplyAsync("", embed : "Wygląda na to, że podałeś link do forum zamiast strony.".ToEmbedMessage(EMType.Error).Build());

                return;

            default:
            case Services.UrlParsingError.None:
                break;
            }

            var response = await _shclient.User.GetAsync(shindenId);

            if (response.IsSuccessStatusCode())
            {
                var user = response.Body;
                var userNameInDiscord = (Context.User as SocketGuildUser).Nickname ?? Context.User.Username;

                if (!user.Name.Equals(userNameInDiscord))
                {
                    await ReplyAsync("", embed : "Wykryto próbę podszycia się. Nieładnie!".ToEmbedMessage(EMType.Error).Build());

                    return;
                }

                using (var db = new Database.UserContext(Config))
                {
                    if (db.Users.Any(x => x.Shinden == shindenId))
                    {
                        await ReplyAsync("", embed : "Wygląda na to, że ktoś już połączył się z tym kontem.".ToEmbedMessage(EMType.Error).Build());

                        return;
                    }

                    var botuser = await db.GetUserOrCreateAsync(Context.User.Id);

                    botuser.Shinden = shindenId;

                    await db.SaveChangesAsync();

                    QueryCacheManager.ExpireTag(new string[] { $"user-{botuser.Id}" });
                }

                await ReplyAsync("", embed : "Konta zostały połączone.".ToEmbedMessage(EMType.Success).Build());

                return;
            }

            await ReplyAsync("", embed : $"Brak połączenia z Shindenem! ({response.Code})".ToEmbedMessage(EMType.Error).Build());
        }
Example #19
0
        public async Task GiveUserAPacksAsync(ulong id, [FromBody] List <Models.CardBoosterPack> boosterPacks)
        {
            if (boosterPacks?.Count < 1)
            {
                await "Model is Invalid".ToResponse(500).ExecuteResultAsync(ControllerContext);
                return;
            }

            var packs = new List <BoosterPack>();

            foreach (var pack in boosterPacks)
            {
                var rPack = pack.ToRealPack();
                if (rPack != null)
                {
                    packs.Add(rPack);
                }
            }

            if (packs.Count < 1)
            {
                await "Data is Invalid".ToResponse(500).ExecuteResultAsync(ControllerContext);
                return;
            }

            using (var db = new Database.UserContext(_config))
            {
                var user = await db.GetCachedFullUserAsync(id);

                if (user == null)
                {
                    await "User not found!".ToResponse(404).ExecuteResultAsync(ControllerContext);
                    return;
                }

                var exe = new Executable($"api-packet u{id}", new Task(() =>
                {
                    using (var dbs = new Database.UserContext(_config))
                    {
                        var botUser = dbs.GetUserOrCreateAsync(id).Result;

                        foreach (var pack in packs)
                        {
                            botUser.GameDeck.BoosterPacks.Add(pack);
                        }

                        dbs.SaveChanges();

                        QueryCacheManager.ExpireTag(new string[] { $"user-{botUser.Id}", "users" });
                    }
                }));

                await _executor.TryAdd(exe, TimeSpan.FromSeconds(1));

                await "Boosterpack added!".ToResponse(200).ExecuteResultAsync(ControllerContext);
            }
        }
Example #20
0
        public async Task FactoryUserAsync([Summary("id użytkownika")] ulong id, [Summary("wartość tc")] long value)
        {
            using (var db = new Database.UserContext(Config))
            {
                var user = await db.GetUserOrCreateAsync(id);

                foreach (var card in user.GameDeck.Cards.OrderByDescending(x => x.CreationDate).ToList())
                {
                    value -= 50;
                    user.GameDeck.Cards.Remove(card);

                    if (value <= 0)
                    {
                        break;
                    }
                }

                if (value > 0)
                {
                    var kct = value / 50;
                    if (user.GameDeck.Karma > 0)
                    {
                        user.GameDeck.Karma -= kct;
                        if (user.GameDeck.Karma < 0)
                        {
                            user.GameDeck.Karma = 0;
                        }
                    }
                    else
                    {
                        user.GameDeck.Karma += kct;
                        if (user.GameDeck.Karma > 0)
                        {
                            user.GameDeck.Karma = 0;
                        }
                    }

                    user.GameDeck.CTCnt -= kct;
                    if (user.GameDeck.CTCnt < 0)
                    {
                        user.GameDeck.CTCnt = 0;
                        kct = 0;
                    }

                    if (kct > 0)
                    {
                        user.GameDeck.Items.Clear();
                    }
                }

                await db.SaveChangesAsync();

                QueryCacheManager.ExpireTag(new string[] { "users", $"user-{id}" });
            }

            await ReplyAsync("", embed : $"Użytkownik o id: `{id}` został zrównany.".ToEmbedMessage(EMType.Success).Build());
        }
Example #21
0
        public async Task <bool> OnAccept(SessionContext context)
        {
            var players = new List <PlayerInfo> {
                P1, P2
            };

            var    fight    = _waifu.MakeFightAsync(players);
            string deathLog = _waifu.GetDeathLog(fight, players);

            bool   isWinner  = fight.Winner != null;
            string winString = isWinner ? $"Zwycięża {fight.Winner.User.Mention}!": "Remis!";

            if (await Message.Channel.GetMessageAsync(Message.Id) is IUserMessage msg)
            {
                await msg.ModifyAsync(x => x.Embed = $"{DuelName}{deathLog.TrimToLength(1400)}{winString}".ToEmbedMessage(EMType.Error).Build());
            }

            using (var db = new Database.UserContext(_config))
            {
                var user1 = await db.GetUserOrCreateAsync(P1.User.Id);

                var user2 = await db.GetUserOrCreateAsync(P2.User.Id);

                user1.GameDeck.PvPStats.Add(new CardPvPStats
                {
                    Type   = FightType.Versus,
                    Result = isWinner ? (fight.Winner.User.Id == user1.Id ? FightResult.Win : FightResult.Lose) : FightResult.Draw
                });

                user2.GameDeck.PvPStats.Add(new CardPvPStats
                {
                    Type   = FightType.Versus,
                    Result = isWinner ? (fight.Winner.User.Id == user2.Id ? FightResult.Win : FightResult.Lose) : FightResult.Draw
                });

                await db.SaveChangesAsync();

                QueryCacheManager.ExpireTag(new string[] { $"user-{user1.Id}", $"user-{user2.Id}", "users" });
            }

            Dispose();
            return(true);
        }
Example #22
0
        public async Task FactoryUserAsync([Summary("id użytkownika")] ulong id)
        {
            using (var db = new Database.UserContext(Config))
            {
                var user = await db.GetUserOrCreateAsync(id);

                db.Users.Remove(user);
                await db.SaveChangesAsync();

                QueryCacheManager.ExpireTag(new string[] { "users" });
            }

            await ReplyAsync("", embed : $"Użytkownik o id: `{id}` został wymazany.".ToEmbedMessage(EMType.Success).Build());
        }
Example #23
0
        public async Task TossCoinAsync([Summary("strona monety(orzeł/reszka)")] Services.CoinSide side, [Summary("ilość SC (maks. stawka 10000)")] int amount)
        {
            if (amount <= 0 || amount > 10000)
            {
                await ReplyAsync("", embed : $"{Context.User.Mention} możesz rzucić za maksymalnie 10000 SC!".ToEmbedMessage(EMType.Error).Build());

                return;
            }

            using (var db = new Database.UserContext(Config))
            {
                var botuser = await db.GetUserOrCreateAsync(Context.User.Id);

                if (botuser.ScCnt < amount)
                {
                    await ReplyAsync("", embed : $"{Context.User.Mention} nie posiadasz wystarczającej liczby SC!".ToEmbedMessage(EMType.Error).Build());

                    return;
                }

                botuser.ScCnt -= amount;
                var thrown = _fun.RandomizeSide();
                var embed  = $"{Context.User.Mention} pudło! Obecnie posiadasz {botuser.ScCnt} SC.".ToEmbedMessage(EMType.Error);

                botuser.Stats.Tail += (thrown == CoinSide.Tail) ? 1 : 0;
                botuser.Stats.Head += (thrown == CoinSide.Head) ? 1 : 0;

                if (thrown == side)
                {
                    ++botuser.Stats.Hit;
                    botuser.ScCnt            += amount * 2;
                    botuser.Stats.IncomeInSc += amount;
                    embed = $"{Context.User.Mention} trafiony zatopiony! Obecnie posiadasz {botuser.ScCnt} SC.".ToEmbedMessage(EMType.Success);
                }
                else
                {
                    ++botuser.Stats.Misd;
                    botuser.Stats.ScLost     += amount;
                    botuser.Stats.IncomeInSc -= amount;
                }

                await db.SaveChangesAsync();

                QueryCacheManager.ExpireTag(new string[] { $"user-{botuser.Id}", "users" });

                await ReplyAsync("", embed : embed.Build());

                await Context.Channel.SendFileAsync($"./Pictures/coin{(int)thrown}.png");
            }
        }
Example #24
0
        public async Task TransferCardAsync([Summary("użytkownik")] SocketGuildUser user)
        {
            using (var db = new Database.UserContext(Config))
            {
                var targetUser = await db.GetUserOrCreateAsync(user.Id);

                targetUser.IsBlacklisted = !targetUser.IsBlacklisted;
                await db.SaveChangesAsync();

                QueryCacheManager.ExpireTag(new string[] { $"user-{Context.User.Id}", "users" });

                await ReplyAsync("", embed : $"{user.Mention} - blacklist: {targetUser.IsBlacklisted}".ToEmbedMessage(EMType.Success).Build());
            }
        }
Example #25
0
        public async Task ChangeUserExpAsync([Summary("użytkownik")] SocketGuildUser user, [Summary("liczba punktów doświadczenia")] long amount)
        {
            using (var db = new Database.UserContext(Config))
            {
                var botuser = await db.GetUserOrCreateAsync(user.Id);

                botuser.ExpCnt += amount;

                await db.SaveChangesAsync();

                QueryCacheManager.ExpireTag(new string[] { $"user-{botuser.Id}", "users" });

                await ReplyAsync("", embed : $"{user.Mention} ma teraz {botuser.ExpCnt} punktów doświadczenia.".ToEmbedMessage(EMType.Success).Build());
            }
        }
Example #26
0
        public async Task ChangeUserLevelAsync([Summary("użytkownik")] SocketGuildUser user, [Summary("poziom")] long level)
        {
            using (var db = new Database.UserContext(Config))
            {
                var bUser = await db.GetUserOrCreateAsync(user.Id);

                bUser.Level  = level;
                bUser.ExpCnt = Services.ExperienceManager.CalculateExpForLevel(level);

                await db.SaveChangesAsync();

                QueryCacheManager.ExpireTag(new string[] { $"user-{Context.User.Id}", "users" });

                await ReplyAsync("", embed : $"{user.Mention} ustawiono {level} poziom.".ToEmbedMessage(EMType.Success).Build());
            }
        }
Example #27
0
        public async Task ToggleWaifuViewInProfileAsync()
        {
            using (var db = new Database.UserContext(Config))
            {
                var botuser = await db.GetUserOrCreateAsync(Context.User.Id);

                botuser.ShowWaifuInProfile = !botuser.ShowWaifuInProfile;

                string result = botuser.ShowWaifuInProfile ? "załączony" : "wyłączony";

                await db.SaveChangesAsync();

                QueryCacheManager.ExpireTag(new string[] { $"user-{botuser.Id}", "users" });

                await ReplyAsync("", embed : $"Podgląd waifu w profilu {Context.User.Mention} został {result}.".ToEmbedMessage(EMType.Success).Build());
            }
        }
Example #28
0
        public async Task GiveUserAPackAsync([FromBody] Models.CardBoosterPack boosterPack)
        {
            if (boosterPack == null)
            {
                await "Model is Invalid".ToResponse(500).ExecuteResultAsync(ControllerContext);
                return;
            }

            var pack = boosterPack.ToRealPack();

            if (pack == null)
            {
                await "Data is Invalid".ToResponse(500).ExecuteResultAsync(ControllerContext);
                return;
            }

            var currUser = ControllerContext.HttpContext.User;

            if (currUser.HasClaim(x => x.Type == "DiscordId"))
            {
                if (ulong.TryParse(currUser.Claims.First(x => x.Type == "DiscordId").Value, out var discordId))
                {
                    var exe = new Executable($"api-packet u{discordId}", new Task(() =>
                    {
                        using (var db = new Database.UserContext(_config))
                        {
                            var botUser = db.GetUserOrCreateAsync(discordId).Result;
                            botUser.GameDeck.BoosterPacks.Add(pack);

                            db.SaveChanges();

                            QueryCacheManager.ExpireTag(new string[] { $"user-{botUser.Id}", "users" });
                        }
                    }));

                    await _executor.TryAdd(exe, TimeSpan.FromSeconds(1));

                    await "Booster pack added!".ToResponse(200).ExecuteResultAsync(ControllerContext);
                    return;
                }
            }
            await "The appropriate claim was not found".ToResponse(403).ExecuteResultAsync(ControllerContext);
        }
Example #29
0
        private Executable GetSafariExe(EmbedBuilder embed, IUserMessage msg, Card newCard,
                                        SafariImage pokeImage, ICharacterInfo character, ITextChannel trashChannel, IUser winner)
        {
            return(new Executable("safari", new Task(() =>
            {
                using (var db = new Database.UserContext(_config))
                {
                    var botUser = db.GetUserOrCreateAsync(winner.Id).Result;
                    botUser.GameDeck.Cards.Add(newCard);
                    db.SaveChanges();

                    QueryCacheManager.ExpireTag(new string[] { $"user-{botUser.Id}", "users" });
                }

                _ = Task.Run(async() =>
                {
                    try
                    {
                        embed.ImageUrl = await _waifu.GetSafariViewAsync(pokeImage, character, newCard, trashChannel);
                        embed.Description = $"{winner.Mention} zdobył na polowaniu i wsadził do klatki:\n"
                                            + $"{newCard.GetString(false, false, true)}\n({newCard.Title})";
                        await msg.ModifyAsync(x => x.Embed = embed.Build());

                        var privEmb = new EmbedBuilder()
                        {
                            Color = EMType.Info.Color(),
                            Description = $"Na [polowaniu]({msg.GetJumpUrl()}) zdobyłeś: {newCard.GetString(false, false, true)}"
                        };

                        var priv = await winner.GetOrCreateDMChannelAsync();
                        if (priv != null)
                        {
                            await priv.SendMessageAsync("", false, privEmb.Build());
                        }
                    }
                    catch (Exception ex)
                    {
                        _logger.Log($"In Safari: {ex}");
                    }
                });
            })));
        }
Example #30
0
        private void SpawnUserPacket(SocketUser user)
        {
            var exe = new Executable($"packet u{user.Id}", new Task(() =>
            {
                using (var db = new Database.UserContext(_config))
                {
                    var botUser = db.GetUserOrCreateAsync(user.Id).Result;
                    if (botUser.IsBlacklisted)
                    {
                        return;
                    }

                    botUser.GameDeck.BoosterPacks.Add(new BoosterPack
                    {
                        CardCnt   = 2,
                        MinRarity = Rarity.E,
                        IsCardFromPackTradable = true,
                        Name = "Pakiet kart za aktywność",
                        CardSourceFromPack = CardSource.Activity
                    });
                    db.SaveChanges();
                }
            }));

            _executor.TryAdd(exe, TimeSpan.FromSeconds(1));

            var gUser = user as SocketGuildUser;

            using (var db = new Database.AnalyticsContext(_config))
            {
                db.UsersData.Add(new Database.Models.Analytics.UserAnalytics
                {
                    Value       = 1,
                    UserId      = user.Id,
                    MeasureDate = DateTime.Now,
                    GuildId     = gUser?.Guild?.Id ?? 0,
                    Type        = Database.Models.Analytics.UserAnalyticsEventType.Pack
                });
                db.SaveChanges();
            }
        }