private async Task AddOrUpdateByDiscordUser(SocketMessage message) { User newuser = null; User existingUser = null; using (var context = new pubgdbModel()) { existingUser = await context.Users.FirstOrDefaultAsync( user => user.DiscordName == message.Author.Username); logToConsole.Trace(existingUser == null ? "No User found." : $"User retrieved from database {existingUser.DiscordName}, {existingUser.SteamId}"); if (existingUser == null) { var regiontemp = Regex.Split(message.Content, " ")?[2]?.Trim(); newuser = new User() { DiscordName = message.Author.Username, SteamId = Regex.Split(message.Content, " ")[1].Trim(), Region = RegionConverter.Convert(Regex.Split(message.Content, " ")?[2]) }; context.Users.Add(newuser); await context.SaveChangesAsync(); logToConsole.Trace( $"Added new user to database Discord User: {message.Author.Username} --- Database model ---> DiscordName: {newuser.DiscordName}, Steam id: {newuser.SteamId}"); } else { existingUser.DiscordName = message.Author.Username; existingUser.SteamId = Regex.Split(message.Content, BotCommands.AddMe)[1].Trim(); existingUser.Region = RegionConverter.Convert(Regex.Split(message.Content, BotCommands.AddMe)?[2]?.Trim()); //context.Entry(existingUser).State = EntityState.Modified; await context.SaveChangesAsync(); logToConsole.Trace( $"Updated existing user to database Discord User: {message.Author.Username} --- Database model ---> DiscordName: {existingUser.DiscordName}, Steam id: {existingUser.SteamId}"); } } }
private async Task GetUserStats(SocketMessage message) { if (message.Content.Contains(BotCommands.StatsMe)) { try { using (var context = new pubgdbModel()) { var userModel = await context.Users.FirstOrDefaultAsync( user => user.DiscordName == message.Author.Username); var player = await Player.GetStats(userModel.SteamId); var soloRating = player.Stats.FirstOrDefault( region => region.Region == userModel.Region && region.Mode == Mode.Solo); var duoRating = player.Stats.FirstOrDefault( region => region.Region == userModel.Region && region.Mode == Mode.Duo); var squadRating = player.Stats.FirstOrDefault( region => region.Region == userModel.Region && region.Mode == Mode.Squad); logToConsole.Trace( $"Stats for {message.Author.Username} Solo Rating: {soloRating?.Stats.FirstOrDefault(stat => stat.Stat == StatType.Rating)?.Value}, Duo rating: {duoRating?.Stats.FirstOrDefault(stat => stat.Stat == StatType.Rating)?.Value}, Squad Rating: {squadRating?.Stats.FirstOrDefault(stat => stat.Stat == StatType.Rating)?.Value}"); await message.Channel.SendMessageAsync( $"Stats for {message.Author.Username} Solo Rating: {soloRating?.Stats.FirstOrDefault(stat => stat.Stat == StatType.Rating)?.Value}, Duo rating: {duoRating?.Stats.FirstOrDefault(stat => stat.Stat == StatType.Rating)?.Value}, Squad Rating: {squadRating?.Stats.FirstOrDefault(stat => stat.Stat == StatType.Rating)?.Value}"); } } catch (Exception e) { await message.Channel.SendMessageAsync( $"pubgbot failed to retrieve stats for {message.Author.Username}."); logToFile.Error(e); logToConsole.Error(e); //Console.WriteLine(e); throw; } } }