private static List <SniperInfo> GetSniperInfoFrom_pokewatchers(ISession session, List <PokemonId> pokemonIds) { var uri = $"http://pokewatchers.com/api.php?act=grab"; ScanResult_pokewatchers scanResult_pokewatchers; try { var handler = new ClearanceHandler(); // Create a HttpClient that uses the handler. var client = new HttpClient(handler); // Our new firewall requires a user agent, or you'll be blocked. client.DefaultRequestHeaders.TryAddWithoutValidation("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/511.2 (KHTML, like Gecko) Chrome/15.0.041.151 Safari/555.2"); string response = null; int retries = 0; bool retry; // Retry up to 5 times, sleeping for 1s between retries. do { // Use the HttpClient as usual. Any JS challenge will be solved automatically for you. response = client.GetStringAsync(uri).Result; if (response == "You can only request the API every 5 seconds.") { retry = true; Thread.Sleep(1000); } else { retry = false; } } while (retry && (retries++ < 5)); if (response == null || response == "You can only request the API every 5 seconds.") { response = "[]"; } var fullresp = "{ \"pokemons\":" + response + "}".Replace("Mr_mime", "MrMime");; scanResult_pokewatchers = JsonConvert.DeserializeObject <ScanResult_pokewatchers>(fullresp); } catch (Exception ex) { // most likely System.IO.IOException session.EventDispatcher.Send(new ErrorEvent { Message = "(PokeWatchers.com) " + ex.Message }); return(null); } if (scanResult_pokewatchers.pokemons != null) { foreach (var pokemon in scanResult_pokewatchers.pokemons) { try { var SnipInfo = new SniperInfo(); SnipInfo.Id = pokemon.pokemon; string[] coordsArray = pokemon.cords.Split(','); SnipInfo.Latitude = Convert.ToDouble(coordsArray[0], CultureInfo.InvariantCulture); SnipInfo.Longitude = Convert.ToDouble(coordsArray[1], CultureInfo.InvariantCulture); SnipInfo.TimeStampAdded = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc).AddSeconds(pokemon.timeadded); SnipInfo.ExpirationTimestamp = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc).AddSeconds(pokemon.timeend); SnipeLocations.Add(SnipInfo); } catch { } } var locationsToSnipe = new List <SniperInfo>(); var status = ""; foreach (var q in SnipeLocations) { if (!session.LogicSettings.UseTransferIvForSnipe || (q.IV == 0 && !session.LogicSettings.SnipeIgnoreUnknownIv) || (q.IV >= session.Inventory.GetPokemonTransferFilter(q.Id).KeepMinIvPercentage)) { if (!LocsVisited.Contains(new PokemonLocation(q.Latitude, q.Longitude))) { if (q.ExpirationTimestamp != default(DateTime) && q.ExpirationTimestamp > new DateTime(2016) && q.ExpirationTimestamp > DateTime.UtcNow.AddSeconds(20)) { if (q.Id == PokemonId.Missingno || pokemonIds.Contains(q.Id)) { locationsToSnipe.Add(q); status = "Snipe! Let's Go!"; } else { status = "Not User Selected Pokemon"; } } else { status = "Expired"; } } else { status = "Already Visited"; } } else { status = "IV too low or user choosed ignore unknown IV pokemon"; } var message = "Pokewatcher: Found a " + q.Id + " in " + q.Latitude.ToString("0.0000") + "," + q.Longitude.ToString("0.0000") + " Time Remain:" + (q.ExpirationTimestamp - DateTime.Now).TotalSeconds.ToString("0") + "s " + " Status: " + status; System.Diagnostics.Debug.Print(message); session.EventDispatcher.Send(new SnipeEvent { Message = message }); } return(locationsToSnipe.OrderBy(q => q.ExpirationTimestamp).ToList()); } else { return(null); } }
public static async Task Start(Session session, CancellationToken cancellationToken) { while (true) { if (session.LogicSettings.UseSnipeOnlineLocationServer) { try { using (var httpClient = new HttpClient()) { httpClient.DefaultRequestHeaders.Accept.Add( new MediaTypeWithQualityHeaderValue("application/json")); var response =await httpClient.GetAsync("http://pokesnipers.com/api/v1/pokemon.json", cancellationToken); response.EnsureSuccessStatusCode(); var json = await response.Content.ReadAsStringAsync(); dynamic pokesniper = JsonConvert.DeserializeObject(json); JArray results = pokesniper.results; SnipeLocations.Clear(); foreach (var result in results) { PokemonId id; Enum.TryParse(result.Value<string>("name"), out id); var a = new SniperInfo { Id = id, Iv = 100, Latitude = Convert.ToDouble(result.Value<string>("coords").Split(',')[0]), Longitude = Convert.ToDouble(result.Value<string>("coords").Split(',')[1]), TimeStamp = DateTime.Now }; SnipeLocations.Add(a); } } } catch (Exception e) { // ignored } } else { cancellationToken.ThrowIfCancellationRequested(); try { var lClient = new TcpClient(); lClient.Connect(session.LogicSettings.SnipeLocationServer, session.LogicSettings.SnipeLocationServerPort); var sr = new StreamReader(lClient.GetStream()); while (lClient.Connected) { var line = sr.ReadLine(); if (line == null) throw new Exception("Unable to ReadLine from sniper socket"); var info = JsonConvert.DeserializeObject<SniperInfo>(line); if (SnipeLocations.Any(x => Math.Abs(x.Latitude - info.Latitude) < 0.0001 && Math.Abs(x.Longitude - info.Longitude) < 0.0001)) // we might have different precisions from other sources continue; SnipeLocations.RemoveAll(x => DateTime.Now > x.TimeStampAdded.AddMinutes(15)); SnipeLocations.Add(info); } } catch (SocketException) { // this is spammed to often. Maybe add it to debug log later } catch (Exception ex) { // most likely System.IO.IOException session.EventDispatcher.Send(new ErrorEvent {Message = ex.ToString()}); } } await Task.Delay(5000, cancellationToken); } }
private static List <SniperInfo> GetSniperInfoFrom_pokezz(ISession session, List <PokemonId> pokemonIds) { var options = new IO.Options(); options.Transports = Quobject.Collections.Immutable.ImmutableList.Create <string>("websocket"); var socket = IO.Socket("http://pokezz.com", options); var hasError = true; ManualResetEventSlim waitforbroadcast = new ManualResetEventSlim(false); List <PokemonLocation_pokezz> pokemons = new List <PokemonLocation_pokezz>(); socket.On("a", (msg) => { hasError = false; socket.Close(); string[] pokemonDefinitions = ((String)msg).Split('~'); foreach (var pokemonDefinition in pokemonDefinitions) { try { string[] pokemonDefinitionElements = pokemonDefinition.Split('|'); PokemonLocation_pokezz pokezzElement = new PokemonLocation_pokezz(); pokezzElement.name = (PokemonId)Convert.ToInt32(pokemonDefinitionElements[0], CultureInfo.InvariantCulture); pokezzElement.lat = Convert.ToDouble(pokemonDefinitionElements[1], CultureInfo.InvariantCulture); pokezzElement.lng = Convert.ToDouble(pokemonDefinitionElements[2], CultureInfo.InvariantCulture); pokezzElement.time = Convert.ToDouble(pokemonDefinitionElements[3], CultureInfo.InvariantCulture); pokezzElement.verified = (pokemonDefinitionElements[4] == "0") ? false : true; pokezzElement.iv = pokemonDefinitionElements[5]; pokemons.Add(pokezzElement); } catch (Exception) { // Just in case Pokezz changes their implementation, let's catch the error and set the error flag. hasError = true; } } waitforbroadcast.Set(); }); socket.On(Quobject.SocketIoClientDotNet.Client.Socket.EVENT_ERROR, () => { socket.Close(); waitforbroadcast.Set(); }); socket.On(Quobject.SocketIoClientDotNet.Client.Socket.EVENT_CONNECT_ERROR, () => { socket.Close(); waitforbroadcast.Set(); }); waitforbroadcast.Wait(5000); // Wait a maximum of 5 seconds for Pokezz to respond. socket.Close(); if (!hasError) { foreach (var pokemon in pokemons) { var SnipInfo = new SniperInfo(); SnipInfo.Id = pokemon.name; SnipInfo.Latitude = pokemon.lat; SnipInfo.Longitude = pokemon.lng; SnipInfo.TimeStampAdded = DateTime.Now; SnipInfo.ExpirationTimestamp = new DateTime(1970, 1, 1, 0, 0, 0, 0).AddSeconds(pokemon.time).ToLocalTime(); SnipInfo.IV = pokemon._iv; if (pokemon.verified || !session.LogicSettings.GetOnlyVerifiedSniperInfoFromPokezz) { SnipeLocations.Add(SnipInfo); } } var locationsToSnipe = SnipeLocations?.Where(q => (!session.LogicSettings.UseTransferIvForSnipe || (q.IV == 0 && !session.LogicSettings.SnipeIgnoreUnknownIv) || (q.IV >= session.Inventory.GetPokemonTransferFilter(q.Id).KeepMinIvPercentage)) && !LocsVisited.Contains(new PokemonLocation(q.Latitude, q.Longitude)) && !(q.ExpirationTimestamp != default(DateTime) && q.ExpirationTimestamp > new DateTime(2016) && // make absolutely sure that the server sent a correct datetime q.ExpirationTimestamp < DateTime.Now) && (q.Id == PokemonId.Missingno || pokemonIds.Contains(q.Id))).ToList() ?? new List <SniperInfo>(); return(locationsToSnipe.OrderBy(q => q.ExpirationTimestamp).ToList()); } else { session.EventDispatcher.Send(new ErrorEvent { Message = "(Pokezz.com) Connection Error" }); return(null); } }
private static List <SniperInfo> GetSniperInfoFrom_pokesnipers(ISession session, List <PokemonId> pokemonIds) { var uri = $"http://pokesnipers.com/api/v1/pokemon.json"; ScanResult_pokesnipers scanResult_pokesnipers; try { var handler = new ClearanceHandler(); // Create a HttpClient that uses the handler. var client = new HttpClient(handler); // Use the HttpClient as usual. Any JS challenge will be solved automatically for you. var fullresp = client.GetStringAsync(uri).Result.Replace(" M", "Male").Replace(" F", "Female").Replace("Farfetch'd", "Farfetchd").Replace("Mr.Maleime", "MrMime"); scanResult_pokesnipers = JsonConvert.DeserializeObject <ScanResult_pokesnipers>(fullresp); } catch (Exception ex) { // most likely System.IO.IOException session.EventDispatcher.Send(new ErrorEvent { Message = "(PokeSnipers.com) " + ex.Message }); return(null); } if (scanResult_pokesnipers.pokemons != null) { foreach (var pokemon in scanResult_pokesnipers.pokemons) { try { var SnipInfo = new SniperInfo(); SnipInfo.Id = pokemon.name; string[] coordsArray = pokemon.coords.Split(','); SnipInfo.Latitude = Convert.ToDouble(coordsArray[0], CultureInfo.InvariantCulture); SnipInfo.Longitude = Convert.ToDouble(coordsArray[1], CultureInfo.InvariantCulture); SnipInfo.TimeStampAdded = DateTime.Now; SnipInfo.ExpirationTimestamp = Convert.ToDateTime(pokemon.until); SnipInfo.IV = pokemon.iv; SnipeLocations.Add(SnipInfo); } catch (Exception) { // ignored } } var locationsToSnipe = new List <SniperInfo>(); var status = ""; foreach (var q in SnipeLocations) { if (!session.LogicSettings.UseTransferIvForSnipe || (q.IV == 0 && !session.LogicSettings.SnipeIgnoreUnknownIv) || (q.IV >= session.Inventory.GetPokemonTransferFilter(q.Id).KeepMinIvPercentage)) { if (!LocsVisited.Contains(new PokemonLocation(q.Latitude, q.Longitude))) { if (q.ExpirationTimestamp != default(DateTime) && q.ExpirationTimestamp > new DateTime(2016) && q.ExpirationTimestamp > DateTime.Now.AddSeconds(20)) { if (q.Id == PokemonId.Missingno || pokemonIds.Contains(q.Id)) { locationsToSnipe.Add(q); status = "Snipe! Let's Go!"; } else { status = "Not User Selected Pokemon"; } } else { status = "Expired"; } } else { status = "Already Visited"; } } else { status = "IV too low or user choosed ignore unknown IV pokemon"; } var message = "Pokesniper: Found a " + q.Id + " in " + q.Latitude.ToString("0.0000") + "," + q.Longitude.ToString("0.0000") + " Time Remain:" + (q.ExpirationTimestamp - DateTime.Now).TotalSeconds.ToString("0") + "s " + " Status: " + status; System.Diagnostics.Debug.Print(message); session.EventDispatcher.Send(new SnipeEvent { Message = message }); } return(locationsToSnipe.OrderBy(q => q.ExpirationTimestamp).ToList()); } else { return(null); } }
private static List <SniperInfo> GetSniperInfoFrom_pokesnipers(ISession session, List <PokemonId> pokemonIds) { var uri = $"http://pokesnipers.com/api/v1/pokemon.json"; ScanResult_pokesnipers scanResult_pokesnipers; try { var handler = new ClearanceHandler(); // Create a HttpClient that uses the handler. var client = new HttpClient(handler); // Use the HttpClient as usual. Any JS challenge will be solved automatically for you. var fullresp = client.GetStringAsync(uri).Result.Replace(" M", "Male").Replace(" F", "Female").Replace("Farfetch'd", "Farfetchd").Replace("Mr.Maleime", "MrMime"); scanResult_pokesnipers = JsonConvert.DeserializeObject <ScanResult_pokesnipers>(fullresp); } catch (Exception ex) { // most likely System.IO.IOException session.EventDispatcher.Send(new ErrorEvent { Message = ex.Message }); scanResult_pokesnipers = new ScanResult_pokesnipers { Status = "fail", pokemons = new List <PokemonLocation_pokesnipers>() }; return(new List <SniperInfo>()); } if (scanResult_pokesnipers.pokemons != null) { SnipeLocations.RemoveAll(x => DateTime.Now > x.TimeStampAdded.AddMinutes(15)); foreach (var pokemon in scanResult_pokesnipers.pokemons) { var SnipInfo = new SniperInfo(); SnipInfo.Id = pokemon.name; if (null != pokemon.coords) { string[] coordsArray = pokemon.coords.Split(','); SnipInfo.Latitude = Convert.ToDouble(coordsArray[0]); SnipInfo.Longitude = Convert.ToDouble(coordsArray[1]); SnipInfo.TimeStampAdded = DateTime.Now; SnipInfo.ExpirationTimestamp = Convert.ToDateTime(pokemon.until); SnipInfo.IV = pokemon.iv; SnipeLocations.Add(SnipInfo); } } var locationsToSnipe = SnipeLocations?.Where(q => (!session.LogicSettings.UseTransferIvForSnipe || (q.IV == 0 && !session.LogicSettings.SnipeIgnoreUnknownIv) || (q.IV >= session.Inventory.GetPokemonTransferFilter(q.Id).KeepMinIvPercentage)) && !LocsVisited.Contains(new PokemonLocation(q.Latitude, q.Longitude)) && !(q.ExpirationTimestamp != default(DateTime) && q.ExpirationTimestamp > new DateTime(2016) && // make absolutely sure that the server sent a correct datetime q.ExpirationTimestamp < DateTime.Now) && (q.Id == PokemonId.Missingno || pokemonIds.Contains(q.Id))).ToList() ?? new List <SniperInfo>(); return(locationsToSnipe); } return(new List <SniperInfo>()); }
private static List <SniperInfo> GetSniperInfoFrom_pokezz(ISession session, ICollection <PokemonId> pokemonIds) { var options = new IO.Options { Transports = ImmutableList.Create("websocket") }; var socket = IO.Socket("http://pokezz.com", options); var hasError = true; var waitforbroadcast = new ManualResetEventSlim(false); var pokemons = new List <PokemonLocationPokezz>(); socket.On("a", msg => { hasError = false; socket.Close(); var pokemonDefinitions = ((string)msg).Split('~'); foreach (var pokemonDefinition in pokemonDefinitions) { try { var pokemonDefinitionElements = pokemonDefinition.Split('|'); var pokezzElement = new PokemonLocationPokezz { name = (PokemonId)Convert.ToInt32(pokemonDefinitionElements[0], CultureInfo.InvariantCulture), lat = Convert.ToDouble(pokemonDefinitionElements[1], CultureInfo.InvariantCulture), lng = Convert.ToDouble(pokemonDefinitionElements[2], CultureInfo.InvariantCulture), time = Convert.ToDouble(pokemonDefinitionElements[3], CultureInfo.InvariantCulture), verified = pokemonDefinitionElements[4] != "0", iv = pokemonDefinitionElements[5] }; pokemons.Add(pokezzElement); } catch (Exception) { // Just in case Pokezz changes their implementation, let's catch the error and set the error flag. hasError = true; } } waitforbroadcast.Set(); }); socket.On(Socket.EVENT_ERROR, () => { socket.Close(); waitforbroadcast.Set(); }); socket.On(Socket.EVENT_CONNECT_ERROR, () => { socket.Close(); waitforbroadcast.Set(); }); waitforbroadcast.Wait(5000); // Wait a maximum of 5 seconds for Pokezz to respond. socket.Close(); if (hasError) { session.EventDispatcher.Send(new ErrorEvent { Message = "(Pokezz.com) Connection Error" }); return(null); } foreach (var pokemon in pokemons) { var snipInfo = new SniperInfo { Id = pokemon.name, Latitude = pokemon.lat, Longitude = pokemon.lng, TimeStampAdded = DateTime.Now, ExpirationTimestamp = new DateTime(1970, 1, 1, 0, 0, 0, 0).AddSeconds(pokemon.time).ToLocalTime(), IV = pokemon._iv }; if (pokemon.verified || !session.LogicSettings.GetOnlyVerifiedSniperInfoFromPokezz) { SnipeLocations.Add(snipInfo); } } var locationsToSnipe = new List <SniperInfo>(); foreach (var q in SnipeLocations) { string status; if (!session.LogicSettings.UseTransferIvForSnipe || (q.IV < 1 && !session.LogicSettings.SnipeIgnoreUnknownIv) || (q.IV >= session.Inventory.GetPokemonTransferFilter(q.Id).KeepMinIvPercentage)) { if (!LocsVisited.Contains(new PokemonLocation(q.Latitude, q.Longitude))) { if (q.ExpirationTimestamp != default(DateTime) && q.ExpirationTimestamp > new DateTime(2016) && q.ExpirationTimestamp > DateTime.Now.AddSeconds(20)) { if (q.Id == PokemonId.Missingno || pokemonIds.Contains(q.Id)) { locationsToSnipe.Add(q); status = "Snipe! Let's Go!"; } else { status = "Not User Selected Pokemon"; } } else { status = "Expired"; } } else { status = "Already Visited"; } } else { status = "IV too low or user choosed ignore unknown IV pokemon"; } var message = "Pokezz: Found a " + q.Id + " in " + q.Latitude.ToString("0.0000") + "," + q.Longitude.ToString("0.0000") + " Time Remain:" + (q.ExpirationTimestamp - DateTime.Now).TotalSeconds.ToString("0") + "s " + " Status: " + status; Debug.Print(message); //session.EventDispatcher.Send(new SnipeEvent {Message = message}); } return(locationsToSnipe.OrderBy(q => q.ExpirationTimestamp).ToList()); }
private static List<SniperInfo> GetSniperInfoFrom_pokewatchers(ISession session, List<PokemonId> pokemonIds) { var uri = $"http://pokewatchers.com/api.php?act=grab"; ScanResult_pokewatchers scanResult_pokewatchers; try { var handler = new ClearanceHandler(); // Create a HttpClient that uses the handler. var client = new HttpClient(handler); // Use the HttpClient as usual. Any JS challenge will be solved automatically for you. var fullresp = "{ \"pokemons\":" + client.GetStringAsync(uri).Result.Replace(" M", "Male").Replace(" F", "Female").Replace("Farfetch'd", "Farfetchd").Replace("Mr.Maleime", "MrMime") +"}"; scanResult_pokewatchers = JsonConvert.DeserializeObject<ScanResult_pokewatchers>(fullresp); } catch (Exception ex) { // most likely System.IO.IOException session.EventDispatcher.Send(new ErrorEvent { Message = "(PokeWatchers.com) " + ex.Message }); return null; } if (scanResult_pokewatchers.pokemons != null) { foreach (var pokemon in scanResult_pokewatchers.pokemons) { try { var SnipInfo = new SniperInfo(); SnipInfo.Id = pokemon.pokemon; string[] coordsArray = pokemon.cords.Split(','); SnipInfo.Latitude = Convert.ToDouble(coordsArray[0], CultureInfo.InvariantCulture); SnipInfo.Longitude = Convert.ToDouble(coordsArray[1], CultureInfo.InvariantCulture); SnipInfo.TimeStampAdded = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc).AddSeconds(pokemon.timeadded); SnipInfo.ExpirationTimestamp = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc).AddSeconds(pokemon.timeend); SnipeLocations.Add(SnipInfo); } catch { } } var locationsToSnipe = SnipeLocations?.Where(q => (!session.LogicSettings.UseTransferIvForSnipe || (q.IV == 0 && !session.LogicSettings.SnipeIgnoreUnknownIv) || (q.IV >= session.Inventory.GetPokemonTransferFilter(q.Id).KeepMinIvPercentage)) && !LocsVisited.Contains(new PokemonLocation(q.Latitude, q.Longitude)) && !(q.ExpirationTimestamp != default(DateTime) && q.ExpirationTimestamp > new DateTime(2016) && // make absolutely sure that the server sent a correct datetime q.ExpirationTimestamp < DateTime.Now) && (q.Id == PokemonId.Missingno || pokemonIds.Contains(q.Id))).ToList() ?? new List<SniperInfo>(); return locationsToSnipe.OrderBy(q => q.ExpirationTimestamp).ToList(); } else return null; }
private static List <SniperInfo> GetSniperInfoFrom_pokezz(ISession session, List <PokemonId> pokemonIds) { var uri = $"http://pokezz.com/pokemons.json"; ScanResult_pokezz scanResult_pokezz; try { var request = WebRequest.CreateHttp(uri); request.Accept = "application/json"; request.UserAgent = "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36\r\n"; request.Method = "GET"; request.Timeout = 15000; request.ReadWriteTimeout = 32000; var resp = request.GetResponse(); var reader = new StreamReader(resp.GetResponseStream()); var fullresp = "{\"pokemons\": " + reader.ReadToEnd().Replace(" M", "Male").Replace(" F", "Female").Replace("Farfetch'd", "Farfetchd").Replace("Mr.Maleime", "MrMime") + "}"; scanResult_pokezz = JsonConvert.DeserializeObject <ScanResult_pokezz>(fullresp); } catch (Exception ex) { // most likely System.IO.IOException session.EventDispatcher.Send(new ErrorEvent { Message = ex.Message }); scanResult_pokezz = new ScanResult_pokezz { Status = "fail", pokemons = new List <PokemonLocation_pokezz>() }; return(new List <SniperInfo>()); } if (scanResult_pokezz.pokemons != null) { SnipeLocations.RemoveAll(x => DateTime.Now > x.TimeStampAdded.AddMinutes(15)); foreach (var pokemon in scanResult_pokezz.pokemons) { var SnipInfo = new SniperInfo(); SnipInfo.Id = pokemon.name; SnipInfo.Latitude = pokemon.lat; SnipInfo.Longitude = pokemon.lng; SnipInfo.TimeStampAdded = DateTime.Now; SnipInfo.ExpirationTimestamp = new DateTime(1970, 1, 1, 0, 0, 0, 0).AddSeconds(Math.Round(pokemon.time / 1000d)).ToLocalTime(); SnipInfo.IV = pokemon._iv; if (pokemon.verified || !session.LogicSettings.GetOnlyVerifiedSniperInfoFromPokezz) { SnipeLocations.Add(SnipInfo); } } var locationsToSnipe = SnipeLocations?.Where(q => (!session.LogicSettings.UseTransferIvForSnipe || (q.IV == 0 && !session.LogicSettings.SnipeIgnoreUnknownIv) || (q.IV >= session.Inventory.GetPokemonTransferFilter(q.Id).KeepMinIvPercentage)) && !LocsVisited.Contains(new PokemonLocation(q.Latitude, q.Longitude)) && !(q.ExpirationTimestamp != default(DateTime) && q.ExpirationTimestamp > new DateTime(2016) && // make absolutely sure that the server sent a correct datetime q.ExpirationTimestamp < DateTime.Now) && (q.Id == PokemonId.Missingno || pokemonIds.Contains(q.Id))).ToList() ?? new List <SniperInfo>(); return(locationsToSnipe); } return(new List <SniperInfo>()); }
private static List <SniperInfo> GetSniperInfoFrom_pokewatchers(ISession session, List <PokemonId> pokemonIds) { var uri = $"http://pokewatchers.com/api.php?act=grab"; ScanResult_pokewatchers scanResult_pokewatchers; try { var handler = new ClearanceHandler(); // Create a HttpClient that uses the handler. var client = new HttpClient(handler); // Use the HttpClient as usual. Any JS challenge will be solved automatically for you. var fullresp = "{ \"pokemons\":" + client.GetStringAsync(uri).Result.Replace(" M", "Male").Replace(" F", "Female").Replace("Farfetch'd", "Farfetchd").Replace("Mr.Maleime", "MrMime") + "}"; scanResult_pokewatchers = JsonConvert.DeserializeObject <ScanResult_pokewatchers>(fullresp); } catch (Exception ex) { // most likely System.IO.IOException session.EventDispatcher.Send(new ErrorEvent { Message = "(PokeWatchers.com) " + ex.Message }); return(null); } if (scanResult_pokewatchers.pokemons != null) { foreach (var pokemon in scanResult_pokewatchers.pokemons) { try { var SnipInfo = new SniperInfo(); SnipInfo.Id = pokemon.pokemon; string[] coordsArray = pokemon.cords.Split(','); SnipInfo.Latitude = Convert.ToDouble(coordsArray[0], CultureInfo.InvariantCulture); SnipInfo.Longitude = Convert.ToDouble(coordsArray[1], CultureInfo.InvariantCulture); SnipInfo.TimeStampAdded = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc).AddSeconds(pokemon.timeadded); SnipInfo.ExpirationTimestamp = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc).AddSeconds(pokemon.timeend); SnipeLocations.Add(SnipInfo); } catch { } } var locationsToSnipe = SnipeLocations?.Where(q => (!session.LogicSettings.UseTransferIvForSnipe || (q.IV == 0 && !session.LogicSettings.SnipeIgnoreUnknownIv) || (q.IV >= session.Inventory.GetPokemonTransferFilter(q.Id).KeepMinIvPercentage)) && !LocsVisited.Contains(new PokemonLocation(q.Latitude, q.Longitude)) && !(q.ExpirationTimestamp != default(DateTime) && q.ExpirationTimestamp > new DateTime(2016) && // make absolutely sure that the server sent a correct datetime q.ExpirationTimestamp < DateTime.Now) && (q.Id == PokemonId.Missingno || pokemonIds.Contains(q.Id))).ToList() ?? new List <SniperInfo>(); return(locationsToSnipe.OrderBy(q => q.ExpirationTimestamp).ToList()); } else { return(null); } }
private static List<SniperInfo> GetSniperInfoFrom_pokezz(ISession session, List<PokemonId> pokemonIds) { var options = new IO.Options(); options.Transports = Quobject.Collections.Immutable.ImmutableList.Create<string>("websocket"); var socket = IO.Socket("http://pokezz.com", options); var hasError = false; ManualResetEventSlim waitforbroadcast = new ManualResetEventSlim(false); List<PokemonLocation_pokezz> pokemons = new List<PokemonLocation_pokezz>(); socket.On("pokemons", (msg) => { socket.Close(); JArray data = JArray.FromObject(msg); foreach (var pokeToken in data.Children()) { var Token = pokeToken.ToString().Replace(" M", "Male").Replace(" F", "Female").Replace("Farfetch'd", "Farfetchd").Replace("Mr.Maleime", "MrMime"); pokemons.Add(JToken.Parse(Token).ToObject<PokemonLocation_pokezz>()); } waitforbroadcast.Set(); }); socket.On(Quobject.SocketIoClientDotNet.Client.Socket.EVENT_ERROR, () => { socket.Close(); hasError = true; waitforbroadcast.Set(); }); socket.On(Quobject.SocketIoClientDotNet.Client.Socket.EVENT_CONNECT_ERROR, () => { socket.Close(); hasError = true; waitforbroadcast.Set(); }); waitforbroadcast.Wait(); if (!hasError) { foreach (var pokemon in pokemons) { var SnipInfo = new SniperInfo(); SnipInfo.Id = pokemon.name; SnipInfo.Latitude = pokemon.lat; SnipInfo.Longitude = pokemon.lng; SnipInfo.TimeStampAdded = DateTime.Now; SnipInfo.ExpirationTimestamp = new DateTime(1970, 1, 1, 0, 0, 0, 0).AddSeconds(Math.Round(pokemon.time / 1000d)).ToLocalTime(); SnipInfo.IV = pokemon._iv; if (pokemon.verified || !session.LogicSettings.GetOnlyVerifiedSniperInfoFromPokezz) SnipeLocations.Add(SnipInfo); } var locationsToSnipe = SnipeLocations?.Where(q => (!session.LogicSettings.UseTransferIvForSnipe || (q.IV == 0 && !session.LogicSettings.SnipeIgnoreUnknownIv) || (q.IV >= session.Inventory.GetPokemonTransferFilter(q.Id).KeepMinIvPercentage)) && !LocsVisited.Contains(new PokemonLocation(q.Latitude, q.Longitude)) && !(q.ExpirationTimestamp != default(DateTime) && q.ExpirationTimestamp > new DateTime(2016) && // make absolutely sure that the server sent a correct datetime q.ExpirationTimestamp < DateTime.Now) && (q.Id == PokemonId.Missingno || pokemonIds.Contains(q.Id))).ToList() ?? new List<SniperInfo>(); return locationsToSnipe.OrderBy(q => q.ExpirationTimestamp).ToList(); } else { session.EventDispatcher.Send(new ErrorEvent {Message = "(Pokezz.com) Connection Error"}); return null; } }
private static List <SniperInfo> GetSniperInfoFrom_pokezz(ISession session, List <PokemonId> pokemonIds) { var options = new IO.Options(); options.Transports = Quobject.Collections.Immutable.ImmutableList.Create <string>("websocket"); var socket = IO.Socket("http://pokezz.com", options); var hasError = false; ManualResetEventSlim waitforbroadcast = new ManualResetEventSlim(false); List <PokemonLocation_pokezz> pokemons = new List <PokemonLocation_pokezz>(); socket.On("pokemons", (msg) => { socket.Close(); JArray data = JArray.FromObject(msg); foreach (var pokeToken in data.Children()) { var Token = pokeToken.ToString().Replace(" M", "Male").Replace(" F", "Female").Replace("Farfetch'd", "Farfetchd").Replace("Mr.Maleime", "MrMime"); pokemons.Add(JToken.Parse(Token).ToObject <PokemonLocation_pokezz>()); } waitforbroadcast.Set(); }); socket.On(Quobject.SocketIoClientDotNet.Client.Socket.EVENT_ERROR, () => { socket.Close(); hasError = true; waitforbroadcast.Set(); }); socket.On(Quobject.SocketIoClientDotNet.Client.Socket.EVENT_CONNECT_ERROR, () => { socket.Close(); hasError = true; waitforbroadcast.Set(); }); waitforbroadcast.Wait(); if (!hasError) { foreach (var pokemon in pokemons) { var SnipInfo = new SniperInfo(); SnipInfo.Id = pokemon.name; SnipInfo.Latitude = pokemon.lat; SnipInfo.Longitude = pokemon.lng; SnipInfo.TimeStampAdded = DateTime.Now; SnipInfo.ExpirationTimestamp = new DateTime(1970, 1, 1, 0, 0, 0, 0).AddSeconds(Math.Round(pokemon.time / 1000d)).ToLocalTime(); SnipInfo.IV = pokemon._iv; if (pokemon.verified || !session.LogicSettings.GetOnlyVerifiedSniperInfoFromPokezz) { SnipeLocations.Add(SnipInfo); } } var locationsToSnipe = SnipeLocations?.Where(q => (!session.LogicSettings.UseTransferIvForSnipe || (q.IV == 0 && !session.LogicSettings.SnipeIgnoreUnknownIv) || (q.IV >= session.Inventory.GetPokemonTransferFilter(q.Id).KeepMinIvPercentage)) && !LocsVisited.Contains(new PokemonLocation(q.Latitude, q.Longitude)) && !(q.ExpirationTimestamp != default(DateTime) && q.ExpirationTimestamp > new DateTime(2016) && // make absolutely sure that the server sent a correct datetime q.ExpirationTimestamp < DateTime.Now) && (q.Id == PokemonId.Missingno || pokemonIds.Contains(q.Id))).ToList() ?? new List <SniperInfo>(); return(locationsToSnipe.OrderBy(q => q.ExpirationTimestamp).ToList()); } else { session.EventDispatcher.Send(new ErrorEvent { Message = "(Pokezz.com) Connection Error" }); return(null); } }
private static List<SniperInfo> GetSniperInfoFrom_pokezz(ISession session, List<PokemonId> pokemonIds) { var uri = $"http://pokezz.com/pokemons.json"; ScanResult_pokezz scanResult_pokezz; try { var request = WebRequest.CreateHttp(uri); request.Accept = "application/json"; request.UserAgent = "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36\r\n"; request.Method = "GET"; request.Timeout = 15000; request.ReadWriteTimeout = 32000; var resp = request.GetResponse(); var reader = new StreamReader(resp.GetResponseStream()); var fullresp = "{\"pokemons\": " + reader.ReadToEnd().Replace(" M", "Male").Replace(" F", "Female").Replace("Farfetch'd", "Farfetchd").Replace("Mr.Maleime", "MrMime") +"}"; scanResult_pokezz = JsonConvert.DeserializeObject<ScanResult_pokezz>(fullresp); } catch (Exception ex) { // most likely System.IO.IOException session.EventDispatcher.Send(new ErrorEvent { Message = ex.Message }); scanResult_pokezz = new ScanResult_pokezz { Status = "fail", pokemons = new List<PokemonLocation_pokezz>() }; return new List<SniperInfo>(); } if (scanResult_pokezz.pokemons != null) { SnipeLocations.RemoveAll(x => DateTime.Now > x.TimeStampAdded.AddMinutes(15)); foreach (var pokemon in scanResult_pokezz.pokemons) { var SnipInfo = new SniperInfo(); SnipInfo.Id = pokemon.name; SnipInfo.Latitude = pokemon.lat; SnipInfo.Longitude = pokemon.lng; SnipInfo.TimeStampAdded = DateTime.Now; SnipInfo.ExpirationTimestamp = new DateTime(1970, 1, 1, 0, 0, 0, 0).AddSeconds(Math.Round(pokemon.time / 1000d)).ToLocalTime(); SnipInfo.IV = pokemon._iv; if (pokemon.verified || !session.LogicSettings.GetOnlyVerifiedSniperInfoFromPokezz) { SnipeLocations.Add(SnipInfo); } } var locationsToSnipe = SnipeLocations?.Where(q => (!session.LogicSettings.UseTransferIvForSnipe || (q.IV == 0 && !session.LogicSettings.SnipeIgnoreUnknownIv) || (q.IV >= session.Inventory.GetPokemonTransferFilter(q.Id).KeepMinIvPercentage)) && !LocsVisited.Contains(new PokemonLocation(q.Latitude, q.Longitude)) && !(q.ExpirationTimestamp != default(DateTime) && q.ExpirationTimestamp > new DateTime(2016) && // make absolutely sure that the server sent a correct datetime q.ExpirationTimestamp < DateTime.Now) && (q.Id == PokemonId.Missingno || pokemonIds.Contains(q.Id))).ToList() ?? new List<SniperInfo>(); return locationsToSnipe; } return new List<SniperInfo>(); }
public static async Task Start(Session session, CancellationToken cancellationToken) { while (true) { if (session.LogicSettings.UseSnipeOnlineLocationServer) { try { using (var httpClient = new HttpClient()) { httpClient.DefaultRequestHeaders.Accept.Add( new MediaTypeWithQualityHeaderValue("application/json")); var response = await httpClient.GetAsync("http://pokesnipers.com/api/v1/pokemon.json", cancellationToken); response.EnsureSuccessStatusCode(); var json = await response.Content.ReadAsStringAsync(); dynamic pokesniper = JsonConvert.DeserializeObject(json); JArray results = pokesniper.results; SnipeLocations.Clear(); foreach (var result in results) { PokemonId id; Enum.TryParse(result.Value <string>("name"), out id); var a = new SniperInfo { Id = id, Iv = 100, Latitude = Convert.ToDouble(result.Value <string>("coords").Split(',')[0]), Longitude = Convert.ToDouble(result.Value <string>("coords").Split(',')[1]), TimeStamp = DateTime.Now }; SnipeLocations.Add(a); } } } catch (Exception e) { // ignored } } else { cancellationToken.ThrowIfCancellationRequested(); try { var lClient = new TcpClient(); lClient.Connect(session.LogicSettings.SnipeLocationServer, session.LogicSettings.SnipeLocationServerPort); var sr = new StreamReader(lClient.GetStream()); while (lClient.Connected) { var line = sr.ReadLine(); if (line == null) { throw new Exception("Unable to ReadLine from sniper socket"); } var info = JsonConvert.DeserializeObject <SniperInfo>(line); if (SnipeLocations.Any(x => Math.Abs(x.Latitude - info.Latitude) < 0.0001 && Math.Abs(x.Longitude - info.Longitude) < 0.0001)) { // we might have different precisions from other sources continue; } SnipeLocations.RemoveAll(x => DateTime.Now > x.TimeStampAdded.AddMinutes(15)); SnipeLocations.Add(info); } } catch (SocketException) { // this is spammed to often. Maybe add it to debug log later } catch (Exception ex) { // most likely System.IO.IOException session.EventDispatcher.Send(new ErrorEvent { Message = ex.ToString() }); } } await Task.Delay(5000, cancellationToken); } }
private static List<SniperInfo> GetSniperInfoFrom_pokewatchers(ISession session, List<PokemonId> pokemonIds) { var uri = $"http://pokewatchers.com/api.php?act=grab"; ScanResult_pokewatchers scanResult_pokewatchers; try { var handler = new ClearanceHandler(); // Create a HttpClient that uses the handler. var client = new HttpClient(handler); // Our new firewall requires a user agent, or you'll be blocked. client.DefaultRequestHeaders.TryAddWithoutValidation("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/511.2 (KHTML, like Gecko) Chrome/15.0.041.151 Safari/555.2"); string response = null; int retries = 0; bool retry; // Retry up to 5 times, sleeping for 1s between retries. do { // Use the HttpClient as usual. Any JS challenge will be solved automatically for you. response = client.GetStringAsync(uri).Result; if (response == "You can only request the API every 5 seconds.") { retry = true; Thread.Sleep(1000); } else { retry = false; } } while (retry && (retries++ < 5)); if (response == null || response == "You can only request the API every 5 seconds.") { response = "[]"; } var fullresp = "{ \"pokemons\":" + response + "}".Replace("Mr_mime", "MrMime"); ; scanResult_pokewatchers = JsonConvert.DeserializeObject<ScanResult_pokewatchers>(fullresp); } catch (Exception ex) { // most likely System.IO.IOException session.EventDispatcher.Send(new ErrorEvent { Message = "(PokeWatchers.com) " + ex.Message }); return null; } if (scanResult_pokewatchers.pokemons != null) { foreach (var pokemon in scanResult_pokewatchers.pokemons) { try { var SnipInfo = new SniperInfo(); SnipInfo.Id = pokemon.pokemon; string[] coordsArray = pokemon.cords.Split(','); SnipInfo.Latitude = Convert.ToDouble(coordsArray[0], CultureInfo.InvariantCulture); SnipInfo.Longitude = Convert.ToDouble(coordsArray[1], CultureInfo.InvariantCulture); SnipInfo.TimeStampAdded = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc).AddSeconds(pokemon.timeadded); SnipInfo.ExpirationTimestamp = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc).AddSeconds(pokemon.timeend); SnipeLocations.Add(SnipInfo); } catch { } } var locationsToSnipe = SnipeLocations?.Where(q => (!session.LogicSettings.UseTransferIvForSnipe || (q.IV == 0 && !session.LogicSettings.SnipeIgnoreUnknownIv) || (q.IV >= session.Inventory.GetPokemonTransferFilter(q.Id).KeepMinIvPercentage)) && !LocsVisited.Contains(new PokemonLocation(q.Latitude, q.Longitude)) && !(q.ExpirationTimestamp != default(DateTime) && q.ExpirationTimestamp > new DateTime(2016) && // make absolutely sure that the server sent a correct datetime q.ExpirationTimestamp < DateTime.Now) && (q.Id == PokemonId.Missingno || pokemonIds.Contains(q.Id))).ToList() ?? new List<SniperInfo>(); return locationsToSnipe.OrderBy(q => q.ExpirationTimestamp).ToList(); } else return null; }
private static List<SniperInfo> GetSniperInfoFrom_pokezz(ISession session, List<PokemonId> pokemonIds) { var options = new IO.Options(); options.Transports = Quobject.Collections.Immutable.ImmutableList.Create<string>("websocket"); var socket = IO.Socket("http://pokezz.com", options); var hasError = true; ManualResetEventSlim waitforbroadcast = new ManualResetEventSlim(false); List<PokemonLocation_pokezz> pokemons = new List<PokemonLocation_pokezz>(); socket.On("a", (msg) => { hasError = false; socket.Close(); string[] pokemonDefinitions = ((String)msg).Split('~'); foreach (var pokemonDefinition in pokemonDefinitions) { try { string[] pokemonDefinitionElements = pokemonDefinition.Split('|'); PokemonLocation_pokezz pokezzElement = new PokemonLocation_pokezz(); pokezzElement.name = (PokemonId)Convert.ToInt32(pokemonDefinitionElements[0], CultureInfo.InvariantCulture); pokezzElement.lat = Convert.ToDouble(pokemonDefinitionElements[1], CultureInfo.InvariantCulture); pokezzElement.lng = Convert.ToDouble(pokemonDefinitionElements[2], CultureInfo.InvariantCulture); pokezzElement.time = Convert.ToDouble(pokemonDefinitionElements[3], CultureInfo.InvariantCulture); pokezzElement.verified = (pokemonDefinitionElements[4] == "0") ? false : true; pokezzElement.iv = pokemonDefinitionElements[5]; pokemons.Add(pokezzElement); } catch(Exception) { // Just in case Pokezz changes their implementation, let's catch the error and set the error flag. hasError = true; } } waitforbroadcast.Set(); }); socket.On(Quobject.SocketIoClientDotNet.Client.Socket.EVENT_ERROR, () => { socket.Close(); waitforbroadcast.Set(); }); socket.On(Quobject.SocketIoClientDotNet.Client.Socket.EVENT_CONNECT_ERROR, () => { socket.Close(); waitforbroadcast.Set(); }); waitforbroadcast.Wait(5000); // Wait a maximum of 5 seconds for Pokezz to respond. socket.Close(); if (!hasError) { foreach (var pokemon in pokemons) { var SnipInfo = new SniperInfo(); SnipInfo.Id = pokemon.name; SnipInfo.Latitude = pokemon.lat; SnipInfo.Longitude = pokemon.lng; SnipInfo.TimeStampAdded = DateTime.Now; SnipInfo.ExpirationTimestamp = new DateTime(1970, 1, 1, 0, 0, 0, 0).AddSeconds(pokemon.time).ToLocalTime(); SnipInfo.IV = pokemon._iv; if (pokemon.verified || !session.LogicSettings.GetOnlyVerifiedSniperInfoFromPokezz) SnipeLocations.Add(SnipInfo); } var locationsToSnipe = SnipeLocations?.Where(q => (!session.LogicSettings.UseTransferIvForSnipe || (q.IV == 0 && !session.LogicSettings.SnipeIgnoreUnknownIv) || (q.IV >= session.Inventory.GetPokemonTransferFilter(q.Id).KeepMinIvPercentage)) && !LocsVisited.Contains(new PokemonLocation(q.Latitude, q.Longitude)) && !(q.ExpirationTimestamp != default(DateTime) && q.ExpirationTimestamp > new DateTime(2016) && // make absolutely sure that the server sent a correct datetime q.ExpirationTimestamp < DateTime.Now) && (q.Id == PokemonId.Missingno || pokemonIds.Contains(q.Id))).ToList() ?? new List<SniperInfo>(); return locationsToSnipe.OrderBy(q => q.ExpirationTimestamp).ToList(); } else { session.EventDispatcher.Send(new ErrorEvent {Message = "(Pokezz.com) Connection Error"}); return null; } }