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}"); } }); }))); }
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); } }
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(); } }
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(); } }
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)); }
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); } } }