Exemplo n.º 1
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}");
                    }
                });
            })));
        }
Exemplo n.º 2
0
        public async Task ModifyPointsTCAsync(ulong id, [FromBody, Required] long value)
        {
            using (var db = new Database.UserContext(_config))
            {
                var user = db.Users.FirstOrDefault(x => x.Shinden == id);
                if (user == null)
                {
                    await "User not found!".ToResponse(404).ExecuteResultAsync(ControllerContext);
                    return;
                }

                var exe = new Executable($"api-tc su{id} ({value})", new Task(() =>
                {
                    using (var dbc = new Database.AnalyticsContext(_config))
                    {
                        dbc.TransferData.Add(new Database.Models.Analytics.TransferAnalytics()
                        {
                            Value     = value,
                            DiscordId = user.Id,
                            Date      = DateTime.Now,
                            ShindenId = user.Shinden,
                            Source    = Database.Models.Analytics.TransferSource.ByShindenId,
                        });

                        dbc.SaveChanges();
                    }

                    using (var dbs = new Database.UserContext(_config))
                    {
                        user        = dbs.Users.FirstOrDefault(x => x.Shinden == id);
                        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);
            }
        }
Exemplo n.º 3
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();
            }
        }
Exemplo n.º 4
0
        public async Task NotifyAboutLevelAsync(SocketGuildUser user, ISocketMessageChannel channel, long level)
        {
            using (var badge = await _img.GetLevelUpBadgeAsync(user.Nickname ?? user.Username,
                                                               level, user.GetAvatarUrl() ?? "https://i.imgur.com/xVIMQiB.jpg", user.Roles.OrderByDescending(x => x.Position).First().Color))
            {
                using (var badgeStream = badge.ToPngStream())
                {
                    await channel.SendFileAsync(badgeStream, $"{user.Id}.png");
                }
            }

            using (var dba = new Database.AnalyticsContext(_config))
            {
                dba.UsersData.Add(new Database.Models.Analytics.UserAnalytics
                {
                    Value       = level,
                    UserId      = user.Id,
                    GuildId     = user.Guild.Id,
                    MeasureDate = DateTime.Now,
                    Type        = Database.Models.Analytics.UserAnalyticsEventType.Level
                });
                dba.SaveChanges();
            }
        }
Exemplo n.º 5
0
        public CommandHandler(DiscordSocketClient client, IConfig config, ILogger logger, IExecutor executor)
        {
            _client   = client;
            _config   = config;
            _logger   = logger;
            _executor = executor;
            _cmd      = new CommandService();

            _timer = new Timer(async _ =>
            {
                try
                {
                    using (var proc = System.Diagnostics.Process.GetCurrentProcess())
                    {
                        _logger.Log($"mem usage: {proc.WorkingSet64 / 1048576} MiB");
                        using (var dba = new Database.AnalyticsContext(_config))
                        {
                            dba.SystemData.Add(new SystemAnalytics
                            {
                                MeasureDate = DateTime.Now,
                                Value       = proc.WorkingSet64 / 1048576,
                                Type        = SystemAnalyticsEventType.Ram,
                            });
                            await dba.SaveChangesAsync();
                        }
                    }
                }
                catch (Exception ex)
                {
                    _logger.Log($"in mem check: {ex}");
                }
            },
                               null,
                               TimeSpan.FromMinutes(1),
                               TimeSpan.FromMinutes(1));
        }
Exemplo n.º 6
0
        private async Task HandleCommandAsync(SocketMessage message)
        {
            var msg = message as SocketUserMessage;

            if (msg == null)
            {
                return;
            }

            if (msg.Author.IsBot || msg.Author.IsWebhook)
            {
                return;
            }

            string prefix  = _config.Get().Prefix;
            var    context = new SocketCommandContext(_client, msg);

            if (context.Guild != null)
            {
                using (var db = new Database.GuildConfigContext(_config))
                {
                    var gConfig = await db.GetCachedGuildFullConfigAsync(context.Guild.Id);

                    if (gConfig?.Prefix != null)
                    {
                        prefix = gConfig.Prefix;
                    }
                }
            }

            int argPos = 0;

            if (msg.HasStringPrefix(prefix, ref argPos, StringComparison.OrdinalIgnoreCase))
            {
                if (_config.Get().BlacklistedGuilds.Any(x => x == (context.Guild?.Id ?? 0)))
                {
                    return;
                }

                var res = await _cmd.GetExecutableCommandAsync(context, argPos, _provider);

                if (res.IsSuccess())
                {
                    _logger.Log($"Run cmd: u{msg.Author.Id} {res.Command.Match.Command.Name}");
                    using (var dbc = new Database.AnalyticsContext(_config))
                    {
                        string param = null;
                        try
                        {
                            var paramStart = argPos + res.Command.Match.Command.Name.Length;
                            var textBigger = context.Message.Content.Length > paramStart;
                            param = textBigger ? context.Message.Content.Substring(paramStart) : null;
                        }
                        catch (Exception) { }

                        dbc.CommandsData.Add(new CommandsAnalytics()
                        {
                            CmdName   = res.Command.Match.Command.Name,
                            GuildId   = context.Guild?.Id ?? 0,
                            UserId    = context.User.Id,
                            Date      = DateTime.Now,
                            CmdParams = param,
                        });
                        await dbc.SaveChangesAsync();
                    }

                    switch (res.Command.Match.Command.RunMode)
                    {
                    case RunMode.Async:
                        await res.Command.ExecuteAsync(_provider);

                        break;

                    default:
                    case RunMode.Sync:
                        if (!await _executor.TryAdd(res.Command, TimeSpan.FromSeconds(1)))
                        {
                            await context.Channel.SendMessageAsync("", embed : "Przekroczono czas oczekiwania!".ToEmbedMessage(EMType.Error).Build());
                        }
                        break;
                    }
                }
                else
                {
                    await ProcessResultAsync(res.Result, context, argPos, prefix);
                }
            }
        }