private static void Main(string[] args) { var strCulture = Thread.CurrentThread.CurrentCulture.TwoLetterISOLanguageName; var culture = CultureInfo.CreateSpecificCulture("en"); CultureInfo.DefaultThreadCurrentCulture = culture; Thread.CurrentThread.CurrentCulture = culture; AppDomain.CurrentDomain.UnhandledException += UnhandledExceptionEventHandler; Console.Title = @"NecroBot2"; Console.CancelKeyPress += (sender, eArgs) => { QuitEvent.Set(); eArgs.Cancel = true; }; if (args.Length > 0) { _subPath = args[0]; } Logger.SetLogger(new ConsoleLogger(LogLevel.LevelUp), _subPath); if (CheckKillSwitch()) { return; } var profilePath = Path.Combine(Directory.GetCurrentDirectory(), _subPath); var profileConfigPath = Path.Combine(profilePath, "config"); var configFile = Path.Combine(profileConfigPath, "config.json"); GlobalSettings settings; var boolNeedsSetup = false; if (File.Exists(configFile)) { // Load the settings from the config file // If the current program is not the latest version, ensure we skip saving the file after loading // This is to prevent saving the file with new options at their default values so we can check for differences settings = GlobalSettings.Load(_subPath, !VersionCheckState.IsLatest()); } else { settings = new GlobalSettings { ProfilePath = profilePath, ProfileConfigPath = profileConfigPath, GeneralConfigPath = Path.Combine(Directory.GetCurrentDirectory(), "config"), ConsoleConfig = { TranslationLanguageCode = strCulture } }; boolNeedsSetup = true; } if (args.Length > 1) { var crds = args[1].Split(','); try { var lat = double.Parse(crds[0]); var lng = double.Parse(crds[1]); settings.LocationConfig.DefaultLatitude = lat; settings.LocationConfig.DefaultLongitude = lng; } catch (Exception) { // ignored } } var lastPosFile = Path.Combine(profileConfigPath, "LastPos.ini"); if (File.Exists(lastPosFile) && settings.LocationConfig.StartFromLastPosition) { var text = File.ReadAllText(lastPosFile); var crds = text.Split(':'); try { var lat = double.Parse(crds[0]); var lng = double.Parse(crds[1]); settings.LocationConfig.DefaultLatitude = lat; settings.LocationConfig.DefaultLongitude = lng; } catch (Exception) { // ignored } } var logicSettings = new LogicSettings(settings); var translation = Translation.Load(logicSettings); if (settings.GPXConfig.UseGpxPathing) { var xmlString = File.ReadAllText(settings.GPXConfig.GpxFile); var readgpx = new GpxReader(xmlString, translation); var nearestPt = readgpx.Tracks.SelectMany( (trk, trkindex) => trk.Segments.SelectMany( (seg, segindex) => seg.TrackPoints.Select( (pt, ptindex) => new { TrackPoint = pt, TrackIndex = trkindex, SegIndex = segindex, PtIndex = ptindex, Latitude = Convert.ToDouble(pt.Lat, CultureInfo.InvariantCulture), Longitude = Convert.ToDouble(pt.Lon, CultureInfo.InvariantCulture), Distance = LocationUtils.CalculateDistanceInMeters( settings.LocationConfig.DefaultLatitude, settings.LocationConfig.DefaultLongitude, Convert.ToDouble(pt.Lat, CultureInfo.InvariantCulture), Convert.ToDouble(pt.Lon, CultureInfo.InvariantCulture) ) } ) ) ).OrderBy(pt => pt.Distance).FirstOrDefault(pt => pt.Distance <= 5000); if (nearestPt != null) { settings.LocationConfig.DefaultLatitude = nearestPt.Latitude; settings.LocationConfig.DefaultLongitude = nearestPt.Longitude; settings.LocationConfig.ResumeTrack = nearestPt.TrackIndex; settings.LocationConfig.ResumeTrackSeg = nearestPt.SegIndex; settings.LocationConfig.ResumeTrackPt = nearestPt.PtIndex; } } _session = new Session(new ClientSettings(settings), logicSettings, translation); if (boolNeedsSetup) { Logger.SetLoggerContext(_session); if (GlobalSettings.PromptForSetup(_session.Translation)) { _session = GlobalSettings.SetupSettings(_session, settings, configFile); var fileName = Assembly.GetExecutingAssembly().Location; Process.Start(fileName); Environment.Exit(0); } else { GlobalSettings.Load(_subPath); Logger.Write("Press a Key to continue...", LogLevel.Warning); Console.ReadKey(); return; } } ProgressBar.Start("NecroBot2 is starting up", 10); _session.Client.ApiFailure = new ApiFailureStrategy(_session); ProgressBar.Fill(20); var machine = new StateMachine(); var stats = new Statistics(); ProgressBar.Fill(30); var strVersion = Assembly.GetExecutingAssembly().GetName().Version.ToString(3); stats.DirtyEvent += () => Console.Title = $"[Necrobot2 v{strVersion}] " + stats.GetTemplatedStats( _session.Translation.GetTranslation(TranslationString.StatsTemplateString), _session.Translation.GetTranslation(TranslationString.StatsXpTemplateString)); ProgressBar.Fill(40); var aggregator = new StatisticsAggregator(stats); ProgressBar.Fill(50); var listener = new ConsoleEventListener(); ProgressBar.Fill(60); var snipeEventListener = new SniperEventListener(); _session.EventDispatcher.EventReceived += evt => listener.Listen(evt, _session); _session.EventDispatcher.EventReceived += evt => aggregator.Listen(evt, _session); _session.EventDispatcher.EventReceived += evt => snipeEventListener.Listen(evt, _session); if (settings.WebsocketsConfig.UseWebsocket) { var websocket = new WebSocketInterface(settings.WebsocketsConfig.WebSocketPort, _session); _session.EventDispatcher.EventReceived += evt => websocket.Listen(evt, _session); } ProgressBar.Fill(70); machine.SetFailureState(new LoginState()); ProgressBar.Fill(80); Logger.SetLoggerContext(_session); ProgressBar.Fill(90); _session.Navigation.WalkStrategy.UpdatePositionEvent += (lat, lng) => _session.EventDispatcher.Send(new UpdatePositionEvent { Latitude = lat, Longitude = lng }); _session.Navigation.WalkStrategy.UpdatePositionEvent += SaveLocationToDisk; UseNearbyPokestopsTask.UpdateTimeStampsPokestop += SaveTimeStampsPokestopToDisk; CatchPokemonTask.UpdateTimeStampsPokemon += SaveTimeStampsPokemonToDisk; ProgressBar.Fill(100); machine.AsyncStart(new VersionCheckState(), _session, _subPath); try { Console.Clear(); } catch (IOException) { } if (settings.TelegramConfig.UseTelegramAPI) { _session.Telegram = new TelegramService(settings.TelegramConfig.TelegramAPIKey, _session); } if (_session.LogicSettings.UseSnipeLocationServer || _session.LogicSettings.HumanWalkingSnipeUsePogoLocationFeeder) { SnipePokemonTask.AsyncStart(_session); } settings.checkProxy(_session.Translation); QuitEvent.WaitOne(); }
private static void Main(string[] args) { var strCulture = Thread.CurrentThread.CurrentCulture.TwoLetterISOLanguageName; var culture = CultureInfo.CreateSpecificCulture("en"); CultureInfo.DefaultThreadCurrentCulture = culture; Thread.CurrentThread.CurrentCulture = culture; AppDomain.CurrentDomain.UnhandledException += UnhandledExceptionEventHandler; Console.Title = @"NecroBot2"; Console.CancelKeyPress += (sender, eArgs) => { QuitEvent.Set(); eArgs.Cancel = true; }; // Command line parsing var commandLine = new Arguments(args); // Look for specific arguments values if (commandLine["subpath"] != null && commandLine["subpath"].Length > 0) { _subPath = commandLine["subpath"]; } if (commandLine["jsonvalid"] != null && commandLine["jsonvalid"].Length > 0) { switch (commandLine["jsonvalid"]) { case "true": _enableJsonValidation = true; break; case "false": _enableJsonValidation = false; break; } } if (commandLine["killswitch"] != null && commandLine["killswitch"].Length > 0) { switch (commandLine["killswitch"]) { case "true": _ignoreKillSwitch = false; break; case "false": _ignoreKillSwitch = true; break; } } bool excelConfigAllow = false; if (commandLine["provider"] != null && commandLine["provider"] == "excel") { excelConfigAllow = true; } Logger.AddLogger(new ConsoleLogger(LogLevel.Service), _subPath); Logger.AddLogger(new FileLogger(LogLevel.Service), _subPath); Logger.AddLogger(new WebSocketLogger(LogLevel.Service), _subPath); if (!_ignoreKillSwitch && CheckKillSwitch() || CheckMKillSwitch()) { return; } var profilePath = Path.Combine(Directory.GetCurrentDirectory(), _subPath); var profileConfigPath = Path.Combine(profilePath, "config"); var configFile = Path.Combine(profileConfigPath, "config.json"); var excelConfigFile = Path.Combine(profileConfigPath, "config.xlsm"); GlobalSettings settings; var boolNeedsSetup = false; if (File.Exists(configFile)) { // Load the settings from the config file settings = GlobalSettings.Load(_subPath, _enableJsonValidation); if (excelConfigAllow) { if (!File.Exists(excelConfigFile)) { Logger.Write("Migrating existing json confix to excel config, please check the config.xlsm in your config folder"); ExcelConfigHelper.MigrateFromObject(settings, excelConfigFile); } else { settings = ExcelConfigHelper.ReadExcel(settings, excelConfigFile); } Logger.Write("Bot will run with your excel config, loading excel config"); } } else { settings = new GlobalSettings { ProfilePath = profilePath, ProfileConfigPath = profileConfigPath, GeneralConfigPath = Path.Combine(Directory.GetCurrentDirectory(), "config"), ConsoleConfig = { TranslationLanguageCode = strCulture } }; boolNeedsSetup = true; } if (commandLine["latlng"] != null && commandLine["latlng"].Length > 0) { var crds = commandLine["latlng"].Split(','); try { var lat = double.Parse(crds[0]); var lng = double.Parse(crds[1]); settings.LocationConfig.DefaultLatitude = lat; settings.LocationConfig.DefaultLongitude = lng; } catch (Exception) { // ignored } } var lastPosFile = Path.Combine(profileConfigPath, "LastPos.ini"); if (File.Exists(lastPosFile) && settings.LocationConfig.StartFromLastPosition) { var text = File.ReadAllText(lastPosFile); var crds = text.Split(':'); try { var lat = double.Parse(crds[0]); var lng = double.Parse(crds[1]); settings.LocationConfig.DefaultLatitude = lat; settings.LocationConfig.DefaultLongitude = lng; } catch (Exception) { // ignored } } var logicSettings = new LogicSettings(settings); var translation = Translation.Load(logicSettings); if (settings.GPXConfig.UseGpxPathing) { var xmlString = File.ReadAllText(settings.GPXConfig.GpxFile); var readgpx = new GpxReader(xmlString, translation); var nearestPt = readgpx.Tracks.SelectMany( (trk, trkindex) => trk.Segments.SelectMany( (seg, segindex) => seg.TrackPoints.Select( (pt, ptindex) => new { TrackPoint = pt, TrackIndex = trkindex, SegIndex = segindex, PtIndex = ptindex, Latitude = Convert.ToDouble(pt.Lat, CultureInfo.InvariantCulture), Longitude = Convert.ToDouble(pt.Lon, CultureInfo.InvariantCulture), Distance = LocationUtils.CalculateDistanceInMeters( settings.LocationConfig.DefaultLatitude, settings.LocationConfig.DefaultLongitude, Convert.ToDouble(pt.Lat, CultureInfo.InvariantCulture), Convert.ToDouble(pt.Lon, CultureInfo.InvariantCulture) ) } ) ) ).OrderBy(pt => pt.Distance).FirstOrDefault(pt => pt.Distance <= 5000); if (nearestPt != null) { settings.LocationConfig.DefaultLatitude = nearestPt.Latitude; settings.LocationConfig.DefaultLongitude = nearestPt.Longitude; settings.LocationConfig.ResumeTrack = nearestPt.TrackIndex; settings.LocationConfig.ResumeTrackSeg = nearestPt.SegIndex; settings.LocationConfig.ResumeTrackPt = nearestPt.PtIndex; } } IElevationService elevationService = new ElevationService(settings); _session = new Session(new ClientSettings(settings, elevationService), logicSettings, elevationService, translation); Logger.SetLoggerContext(_session); if (boolNeedsSetup) { if (GlobalSettings.PromptForSetup(_session.Translation)) { _session = GlobalSettings.SetupSettings(_session, settings, elevationService, configFile); var fileName = Assembly.GetExecutingAssembly().Location; Process.Start(fileName); Environment.Exit(0); } else { GlobalSettings.Load(_subPath, _enableJsonValidation); Logger.Write("Press a Key to continue...", LogLevel.Warning); Console.ReadKey(); return; } if (excelConfigAllow) { ExcelConfigHelper.MigrateFromObject(settings, excelConfigFile); } } ProgressBar.Start("NecroBot2 is starting up", 10); if (settings.WebsocketsConfig.UseWebsocket) { var websocket = new WebSocketInterface(settings.WebsocketsConfig.WebSocketPort, _session); _session.EventDispatcher.EventReceived += evt => websocket.Listen(evt, _session); } ProgressBar.Fill(20); var machine = new StateMachine(); var stats = new Statistics(); ProgressBar.Fill(30); var strVersion = Assembly.GetExecutingAssembly().GetName().Version.ToString(4); stats.DirtyEvent += () => Console.Title = $"[Necrobot2 v{strVersion}] " + stats.GetTemplatedStats( _session.Translation.GetTranslation(TranslationString.StatsTemplateString), _session.Translation.GetTranslation(TranslationString.StatsXpTemplateString)); ProgressBar.Fill(40); var aggregator = new StatisticsAggregator(stats); ProgressBar.Fill(50); var listener = new ConsoleEventListener(); ProgressBar.Fill(60); var snipeEventListener = new SniperEventListener(); _session.EventDispatcher.EventReceived += evt => listener.Listen(evt, _session); _session.EventDispatcher.EventReceived += evt => aggregator.Listen(evt, _session); _session.EventDispatcher.EventReceived += evt => snipeEventListener.Listen(evt, _session); ProgressBar.Fill(70); machine.SetFailureState(new LoginState()); ProgressBar.Fill(80); ProgressBar.Fill(90); _session.Navigation.WalkStrategy.UpdatePositionEvent += (lat, lng) => _session.EventDispatcher.Send(new UpdatePositionEvent { Latitude = lat, Longitude = lng }); _session.Navigation.WalkStrategy.UpdatePositionEvent += SaveLocationToDisk; ProgressBar.Fill(100); if (_session.LogicSettings.AllowMultipleBot && _session.LogicSettings.MultipleBotConfig.SelectAccountOnStartUp) { byte index = 0; Console.WriteLine(); Console.WriteLine(); Logger.Write("PLEASE SELECT AN ACCOUNT TO START."); List <Char> availableOption = new List <char>(); foreach (var item in _session.Accounts) { var ch = (char)(index + 65); availableOption.Add(ch); Logger.Write($"{ch}. {item.GoogleUsername}{item.PtcUsername}"); index++; } ; char select = ' '; do { select = Console.ReadKey(true).KeyChar; Console.WriteLine(select); select = Char.ToUpper(select); }while (!availableOption.Contains(select)); var bot = _session.Accounts[select - 65]; _session.ResetSessionToWithNextBot(bot); } machine.AsyncStart(new VersionCheckState(), _session, _subPath, excelConfigAllow); try { Console.Clear(); } catch (IOException) { } if (settings.TelegramConfig.UseTelegramAPI) { _session.Telegram = new TelegramService(settings.TelegramConfig.TelegramAPIKey, _session); } if (_session.LogicSettings.UseSnipeLocationServer || _session.LogicSettings.HumanWalkingSnipeUsePogoLocationFeeder) { SnipePokemonTask.AsyncStart(_session); } if (_session.LogicSettings.EnableHumanWalkingSnipe && _session.LogicSettings.HumanWalkingSnipeUseFastPokemap) { HumanWalkSnipeTask.StartFastPokemapAsync(_session, _session.CancellationTokenSource.Token);// that need to keep data live } if (_session.LogicSettings.DataSharingEnable) { BotDataSocketClient.StartAsync(_session); _session.EventDispatcher.EventReceived += evt => BotDataSocketClient.Listen(evt, _session); } settings.CheckProxy(_session.Translation); if (_session.LogicSettings.ActivateMSniper) { MSniperServiceTask.ConnectToService(); _session.EventDispatcher.EventReceived += evt => MSniperServiceTask.AddToList(evt); } QuitEvent.WaitOne(); }
private static void Main(string[] args) { if (args.Length == 1) { _workingFolder = Path.Combine(Directory.GetCurrentDirectory(), args[0]); } SetupFolders(); // Sets the logger and the minimum log level Logger.SetLogger(new ConsoleLogger(LogLevel.LevelUp), _workingFolder); AppDomain.CurrentDomain.UnhandledException += UnhandledExceptionEventHandler; AppDomain.CurrentDomain.ProcessExit += OnExitHandler; _handler += new EventHandler(OnExit); SetConsoleCtrlHandler(_handler, true); Console.Title = "NecroBot"; Console.CancelKeyPress += (sender, eArgs) => { QuitEvent.Set(); eArgs.Cancel = true; }; bool isKillSwitchActive = KillSwitch.IsKillSwitchActive(); if (isKillSwitchActive) { return; } CultureInfo culture = CultureInfo.CreateSpecificCulture("en"); CultureInfo.DefaultThreadCurrentCulture = culture; Thread.CurrentThread.CurrentCulture = culture; GlobalSettings settings; bool boolNeedsSetup = false; string configurationDirectory = Path.Combine(_workingFolder, "Config"); string configFilePath = Path.Combine(configurationDirectory, "config.json"); if (File.Exists(configFilePath)) { // Load the settings from the config file // If the current program is not the latest version, ensure we skip saving the file after loading // This is to prevent saving the file with new options at their default values so we can check for differences settings = GlobalSettings.Load(_workingFolder, !VersionCheckState.IsLatest()); } else { settings = new GlobalSettings(); settings.ConfigurationDirectory = configurationDirectory; settings.WorkingDirectory = _workingFolder; settings.TempDataDirectory = Path.Combine(_workingFolder, "temp"); //settings.ProfilePath = "LOL#1"; //settings.ProfileConfigPath = "LOL#2"; settings.ConsoleConfig.TranslationLanguageCode = Thread.CurrentThread.CurrentCulture.TwoLetterISOLanguageName; boolNeedsSetup = true; } //if (args.Length > 1) //{ // string[] crds = args[1].Split(','); // double lat, lng; // try // { // lat = Double.Parse(crds[0]); // lng = Double.Parse(crds[1]); // settings.LocationConfig.DefaultLatitude = lat; // settings.LocationConfig.DefaultLongitude = lng; // } // catch (Exception) { } //} string lastPosFile = Path.Combine(configurationDirectory, "LastPos.ini"); if (File.Exists(lastPosFile) && settings.LocationConfig.StartFromLastPosition) { var text = File.ReadAllText(lastPosFile); string[] crds = text.Split(':'); double lat, lng; try { lat = Double.Parse(crds[0]); lng = Double.Parse(crds[1]); settings.LocationConfig.DefaultLatitude = lat; settings.LocationConfig.DefaultLongitude = lng; } catch (Exception) { } } LogicSettings logicSettings = new LogicSettings(settings); Translation translation = Translation.Load(logicSettings); if (settings.GPXConfig.UseGpxPathing) { var xmlString = File.ReadAllText(settings.GPXConfig.GpxFile); var readgpx = new GpxReader(xmlString, translation); var nearestPt = readgpx.Tracks.SelectMany( (trk, trkindex) => trk.Segments.SelectMany( (seg, segindex) => seg.TrackPoints.Select( (pt, ptindex) => new { TrackPoint = pt, TrackIndex = trkindex, SegIndex = segindex, PtIndex = ptindex, Latitude = Convert.ToDouble(pt.Lat, CultureInfo.InvariantCulture), Longitude = Convert.ToDouble(pt.Lon, CultureInfo.InvariantCulture), Distance = LocationUtils.CalculateDistanceInMeters( settings.LocationConfig.DefaultLatitude, settings.LocationConfig.DefaultLongitude, Convert.ToDouble(pt.Lat, CultureInfo.InvariantCulture), Convert.ToDouble(pt.Lon, CultureInfo.InvariantCulture) ) } ) ) ).OrderBy(pt => pt.Distance).FirstOrDefault(pt => pt.Distance <= 5000); if (nearestPt != null) { settings.LocationConfig.DefaultLatitude = nearestPt.Latitude; settings.LocationConfig.DefaultLongitude = nearestPt.Longitude; settings.LocationConfig.ResumeTrack = nearestPt.TrackIndex; settings.LocationConfig.ResumeTrackSeg = nearestPt.SegIndex; settings.LocationConfig.ResumeTrackPt = nearestPt.PtIndex; } } session = new Session(new ClientSettings(settings), logicSettings, translation); //Teste.Testar(session); if (boolNeedsSetup) { if (GlobalSettings.PromptForSetup(session.Translation)) { session = GlobalSettings.SetupSettings(session, settings, configFilePath); var fileName = Assembly.GetExecutingAssembly().Location; System.Diagnostics.Process.Start(fileName); Environment.Exit(0); } else { // do we have "settings" here? GlobalSettings.Load(_workingFolder); Logger.Write("Press a Key to continue...", LogLevel.Warning); Console.ReadKey(); return; } } session.Client.ApiFailure = new ApiFailureStrategy(session); /*SimpleSession session = new SimpleSession * { * _client = new PokemonGo.RocketAPI.Client(new ClientSettings(settings)), * _dispatcher = new EventDispatcher(), * _localizer = new Localizer() * }; * * BotService service = new BotService * { * _session = session, * _loginTask = new Login(session) * }; * * service.Run(); */ var machine = new StateMachine(); var stats = new Statistics(); string strVersion = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString(3); stats.DirtyEvent += () => Console.Title = $"[Necrobot v{strVersion}] " + stats.GetTemplatedStats( session.Translation.GetTranslation(TranslationString.StatsTemplateString), session.Translation.GetTranslation(TranslationString.StatsXpTemplateString)); StatisticsAggregatorEventListener statisticsAggregatorEventListenerEventListener = new StatisticsAggregatorEventListener(stats); ConsoleEventListener consoleEventListener = new ConsoleEventListener(); SniperEventListener snipeEventListener = new SniperEventListener(); session.EventDispatcher.EventReceived += evt => consoleEventListener.Listen(evt, session); session.EventDispatcher.EventReceived += evt => statisticsAggregatorEventListenerEventListener.Listen(evt, session); session.EventDispatcher.EventReceived += evt => snipeEventListener.Listen(evt, session); if (settings.WebsocketsConfig.UseWebsocket) { var websocket = new WebSocketInterface(settings.WebsocketsConfig.WebSocketIpAddress, settings.WebsocketsConfig.WebSocketPort, session); session.EventDispatcher.EventReceived += evt => websocket.Listen(evt, session); } machine.SetFailureState(new LoginState()); Logger.SetLoggerContext(session); session.Navigation.WalkStrategy.UpdatePositionEvent += (lat, lng) => session.EventDispatcher.Send(new UpdatePositionEvent { Latitude = lat, Longitude = lng }); session.Navigation.WalkStrategy.UpdatePositionEvent += (lat, lng) => { LocUpdate = true; Lat = lat; Lng = lng; }; machine.AsyncStart(new VersionCheckState(), session); try { Console.Clear(); } catch (IOException) { } if (settings.TelegramConfig.UseTelegramAPI) { session.Telegram = new Logic.Service.TelegramService(settings.TelegramConfig.TelegramAPIKey, session); } if (session.LogicSettings.UseSnipeLocationServer) { SnipePokemonTask.AsyncStart(session); } settings.checkProxy(session.Translation); QuitEvent.WaitOne(); }
private static void Main(string[] args) { string strCulture = Thread.CurrentThread.CurrentCulture.TwoLetterISOLanguageName; var culture = CultureInfo.CreateSpecificCulture("en"); CultureInfo.DefaultThreadCurrentCulture = culture; Thread.CurrentThread.CurrentCulture = culture; AppDomain.CurrentDomain.UnhandledException += UnhandledExceptionEventHandler; Console.Title = "NecroBot"; Console.CancelKeyPress += (sender, eArgs) => { QuitEvent.Set(); eArgs.Cancel = true; }; if (args.Length > 0) { subPath = args[0]; } Logger.SetLogger(new ConsoleLogger(LogLevel.LevelUp), subPath); if (CheckKillSwitch()) { return; } var profilePath = Path.Combine(Directory.GetCurrentDirectory(), subPath); var profileConfigPath = Path.Combine(profilePath, "config"); var configFile = Path.Combine(profileConfigPath, "config.json"); GlobalSettings settings; Boolean boolNeedsSetup = false; if (File.Exists(configFile)) { // Load the settings from the config file // If the current program is not the latest version, ensure we skip saving the file after loading // This is to prevent saving the file with new options at their default values so we can check for differences settings = GlobalSettings.Load(subPath, !VersionCheckState.IsLatest()); } else { settings = new GlobalSettings(); settings.ProfilePath = profilePath; settings.ProfileConfigPath = profileConfigPath; settings.GeneralConfigPath = Path.Combine(Directory.GetCurrentDirectory(), "config"); settings.TranslationLanguageCode = strCulture; boolNeedsSetup = true; } if (args.Length > 1) { string[] crds = args[1].Split(','); double lat, lng; try { lat = Double.Parse(crds[0]); lng = Double.Parse(crds[1]); settings.DefaultLatitude = lat; settings.DefaultLongitude = lng; } catch (Exception) { } } var session = new Session(new ClientSettings(settings), new LogicSettings(settings)); if (boolNeedsSetup) { if (GlobalSettings.PromptForSetup(session.Translation) && !settings.isGui) { session = GlobalSettings.SetupSettings(session, settings, configFile); if (!settings.isGui) { var fileName = Assembly.GetExecutingAssembly().Location; System.Diagnostics.Process.Start(fileName); Environment.Exit(0); } } else { GlobalSettings.Load(subPath); Logger.Write("Press a Key to continue...", LogLevel.Warning); Console.ReadKey(); return; } } ProgressBar.start("NecroBot is starting up", 10); session.Client.ApiFailure = new ApiFailureStrategy(session); ProgressBar.fill(20); //Initialize Encryption-Service NecroBot_Network_Logic.Encryption.InitializeEncryption(); /*SimpleSession session = new SimpleSession * { * _client = new PokemonGo.RocketAPI.Client(new ClientSettings(settings)), * _dispatcher = new EventDispatcher(), * _localizer = new Localizer() * }; * * BotService service = new BotService * { * _session = session, * _loginTask = new Login(session) * }; * * service.Run(); */ var machine = new StateMachine(); var stats = new Statistics(); ProgressBar.fill(30); string strVersion = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString(3); stats.DirtyEvent += () => Console.Title = $"[Necrobot v{strVersion}] " + stats.GetTemplatedStats( session.Translation.GetTranslation(TranslationString.StatsTemplateString), session.Translation.GetTranslation(TranslationString.StatsXpTemplateString)); ProgressBar.fill(40); var aggregator = new StatisticsAggregator(stats); ProgressBar.fill(50); var listener = new ConsoleEventListener(); ProgressBar.fill(60); session.EventDispatcher.EventReceived += evt => listener.Listen(evt, session); session.EventDispatcher.EventReceived += evt => aggregator.Listen(evt, session); if (settings.UseWebsocket) { var websocket = new WebSocketInterface(settings.WebSocketPort, session); session.EventDispatcher.EventReceived += evt => websocket.Listen(evt, session); } ProgressBar.fill(70); machine.SetFailureState(new LoginState()); ProgressBar.fill(80); Logger.SetLoggerContext(session); ProgressBar.fill(90); session.Navigation.UpdatePositionEvent += (lat, lng) => session.EventDispatcher.Send(new UpdatePositionEvent { Latitude = lat, Longitude = lng }); session.Navigation.UpdatePositionEvent += Navigation_UpdatePositionEvent; ProgressBar.fill(100); machine.AsyncStart(new VersionCheckState(), session); try { Console.Clear(); } catch (IOException) { } if (settings.UseTelegramAPI) { session.Telegram = new Logic.Service.TelegramService(settings.TelegramAPIKey, session); } if (session.LogicSettings.UseSnipeLocationServer) { SnipePokemonTask.AsyncStart(session); } settings.checkProxy(session.Translation); QuitEvent.WaitOne(); }
private static void Main(string[] args) { System.Windows.Forms.Application.EnableVisualStyles(); var strCulture = Thread.CurrentThread.CurrentCulture.TwoLetterISOLanguageName; var culture = CultureInfo.CreateSpecificCulture("en"); CultureInfo.DefaultThreadCurrentCulture = culture; Thread.CurrentThread.CurrentCulture = culture; AppDomain.CurrentDomain.UnhandledException += UnhandledExceptionEventHandler; Console.Title = @"NecroBot2"; Console.CancelKeyPress += (sender, eArgs) => { QuitEvent.Set(); eArgs.Cancel = true; }; // Command line parsing var commandLine = new Arguments(args); // Look for specific arguments values if (commandLine["subpath"] != null && commandLine["subpath"].Length > 0) { _subPath = commandLine["subpath"]; } if (commandLine["jsonvalid"] != null && commandLine["jsonvalid"].Length > 0) { switch (commandLine["jsonvalid"]) { case "true": _enableJsonValidation = true; break; case "false": _enableJsonValidation = false; break; } } if (commandLine["killswitch"] != null && commandLine["killswitch"].Length > 0) { switch (commandLine["killswitch"]) { case "true": //_ignoreKillSwitch = false; break; case "false": //_ignoreKillSwitch = true; break; } } bool excelConfigAllow = false; if (commandLine["provider"] != null && commandLine["provider"] == "excel") { excelConfigAllow = true; } Logger.AddLogger(new ConsoleLogger(LogLevel.Service), _subPath); Logger.AddLogger(new FileLogger(LogLevel.Service), _subPath); Logger.AddLogger(new WebSocketLogger(LogLevel.Service), _subPath); var profilePath = Path.Combine(Directory.GetCurrentDirectory(), _subPath); var profileConfigPath = Path.Combine(profilePath, "config"); var configFile = Path.Combine(profileConfigPath, "config.json"); var excelConfigFile = Path.Combine(profileConfigPath, "config.xlsm"); GlobalSettings settings; var boolNeedsSetup = false; if (File.Exists(configFile)) { // Load the settings from the config file settings = GlobalSettings.Load(_subPath, _enableJsonValidation); if (excelConfigAllow) { if (!File.Exists(excelConfigFile)) { Logger.Write("Migrating existing json confix to excel config, please check the config.xlsm in your config folder"); ExcelConfigHelper.MigrateFromObject(settings, excelConfigFile); } else { settings = ExcelConfigHelper.ReadExcel(settings, excelConfigFile); } Logger.Write("Bot will run with your excel config, loading excel config"); } } else { settings = new GlobalSettings { ProfilePath = profilePath, ProfileConfigPath = profileConfigPath, GeneralConfigPath = Path.Combine(Directory.GetCurrentDirectory(), "config"), ConsoleConfig = { TranslationLanguageCode = strCulture } }; boolNeedsSetup = true; } if (commandLine["latlng"] != null && commandLine["latlng"].Length > 0) { var crds = commandLine["latlng"].Split(','); try { var lat = double.Parse(crds[0]); var lng = double.Parse(crds[1]); settings.LocationConfig.DefaultLatitude = lat; settings.LocationConfig.DefaultLongitude = lng; } catch (Exception) { // ignored } } var lastPosFile = Path.Combine(profileConfigPath, "LastPos.ini"); if (File.Exists(lastPosFile) && settings.LocationConfig.StartFromLastPosition) { var text = File.ReadAllText(lastPosFile); var crds = text.Split(':'); try { var lat = double.Parse(crds[0]); var lng = double.Parse(crds[1]); settings.LocationConfig.DefaultLatitude = lat; settings.LocationConfig.DefaultLongitude = lng; } catch (Exception) { // ignored } } //Only check killswitch if use legacyAPI //if (settings.Auth.APIConfig.UseLegacyAPI && (!_ignoreKillSwitch && CheckKillSwitch() || CheckMKillSwitch())) // return; var logicSettings = new LogicSettings(settings); var translation = Translation.Load(logicSettings); if (settings.GPXConfig.UseGpxPathing) { var xmlString = File.ReadAllText(settings.GPXConfig.GpxFile); var readgpx = new GpxReader(xmlString, translation); var nearestPt = readgpx.Tracks.SelectMany( (trk, trkindex) => trk.Segments.SelectMany( (seg, segindex) => seg.TrackPoints.Select( (pt, ptindex) => new { TrackPoint = pt, TrackIndex = trkindex, SegIndex = segindex, PtIndex = ptindex, Latitude = Convert.ToDouble(pt.Lat, CultureInfo.InvariantCulture), Longitude = Convert.ToDouble(pt.Lon, CultureInfo.InvariantCulture), Distance = LocationUtils.CalculateDistanceInMeters( settings.LocationConfig.DefaultLatitude, settings.LocationConfig.DefaultLongitude, Convert.ToDouble(pt.Lat, CultureInfo.InvariantCulture), Convert.ToDouble(pt.Lon, CultureInfo.InvariantCulture) ) } ) ) ).OrderBy(pt => pt.Distance).FirstOrDefault(pt => pt.Distance <= 5000); if (nearestPt != null) { settings.LocationConfig.DefaultLatitude = nearestPt.Latitude; settings.LocationConfig.DefaultLongitude = nearestPt.Longitude; settings.LocationConfig.ResumeTrack = nearestPt.TrackIndex; settings.LocationConfig.ResumeTrackSeg = nearestPt.SegIndex; settings.LocationConfig.ResumeTrackPt = nearestPt.PtIndex; } } IElevationService elevationService = new ElevationService(settings); //validation auth.config if (boolNeedsSetup) { AuthAPIForm form = new AuthAPIForm(true); if (form.ShowDialog() == System.Windows.Forms.DialogResult.OK) { settings.Auth.APIConfig = form.Config; } } else { var apiCfg = settings.Auth.APIConfig; if (apiCfg.UsePogoDevAPI) { if (string.IsNullOrEmpty(apiCfg.AuthAPIKey)) { Logger.Write("You select pogodev API but not provide API Key, please press any key to exit and correct you auth.json, \r\n The Pogodev API key call be purchased at - https://talk.pogodev.org/d/51-api-hashing-service-by-pokefarmer", LogLevel.Error); Console.ReadKey(); Environment.Exit(0); } //TODO - test api call to valida auth key } else if (apiCfg.UseLegacyAPI) { Logger.Write("You bot will start after 15 second, You are running bot with Legacy API (0.45) it will increase your risk to be banned and trigger captcha. Config captcha in config.json to auto resolve them", LogLevel.Warning); #if RELEASE Thread.Sleep(15000); #endif } else { Logger.Write("At least 1 authentication method is selected, please correct your auth.json, ", LogLevel.Error); Console.ReadKey(); Environment.Exit(0); } } _session = new Session(new ClientSettings(settings, elevationService), logicSettings, elevationService, translation); Logger.SetLoggerContext(_session); if (boolNeedsSetup) { if (GlobalSettings.PromptForSetup(_session.Translation)) { _session = GlobalSettings.SetupSettings(_session, settings, elevationService, configFile); var fileName = Assembly.GetExecutingAssembly().Location; Process.Start(fileName); Environment.Exit(0); } else { GlobalSettings.Load(_subPath, _enableJsonValidation); Logger.Write("Press a Key to continue...", LogLevel.Warning); Console.ReadKey(); return; } if (excelConfigAllow) { ExcelConfigHelper.MigrateFromObject(settings, excelConfigFile); } } ProgressBar.Start("NecroBot2 is starting up", 10); if (settings.WebsocketsConfig.UseWebsocket) { var websocket = new WebSocketInterface(settings.WebsocketsConfig.WebSocketPort, _session); _session.EventDispatcher.EventReceived += evt => websocket.Listen(evt, _session); } ProgressBar.Fill(20); var machine = new StateMachine(); var stats = new Statistics(); ProgressBar.Fill(30); var strVersion = Assembly.GetExecutingAssembly().GetName().Version.ToString(4); stats.DirtyEvent += () => Console.Title = $"[Necrobot2 v{strVersion}] " + stats.GetTemplatedStats( _session.Translation.GetTranslation(TranslationString.StatsTemplateString), _session.Translation.GetTranslation(TranslationString.StatsXpTemplateString)); ProgressBar.Fill(40); var aggregator = new StatisticsAggregator(stats); ProgressBar.Fill(50); var listener = new ConsoleEventListener(); ProgressBar.Fill(60); var snipeEventListener = new SniperEventListener(); _session.EventDispatcher.EventReceived += evt => listener.Listen(evt, _session); _session.EventDispatcher.EventReceived += evt => aggregator.Listen(evt, _session); _session.EventDispatcher.EventReceived += evt => snipeEventListener.Listen(evt, _session); ProgressBar.Fill(70); machine.SetFailureState(new LoginState()); ProgressBar.Fill(80); ProgressBar.Fill(90); _session.Navigation.WalkStrategy.UpdatePositionEvent += (lat, lng) => _session.EventDispatcher.Send(new UpdatePositionEvent { Latitude = lat, Longitude = lng }); _session.Navigation.WalkStrategy.UpdatePositionEvent += SaveLocationToDisk; ProgressBar.Fill(100); if (_session.LogicSettings.AllowMultipleBot && _session.LogicSettings.MultipleBotConfig.SelectAccountOnStartUp) { byte index = 0; Console.WriteLine(); Console.WriteLine(); Logger.Write("PLEASE SELECT AN ACCOUNT TO START. AUTO START AFTER 30 SEC"); List <Char> availableOption = new List <char>(); foreach (var item in _session.Accounts) { var ch = (char)(index + 65); availableOption.Add(ch); int day = (int)item.RuntimeTotal / 1440; int hour = (int)(item.RuntimeTotal - (day * 1400)) / 60; int min = (int)(item.RuntimeTotal - (day * 1400) - hour * 60); var runtime = $"{day:00}:{hour:00}:{min:00}:00"; Logger.Write($"{ch}. {item.GoogleUsername}{item.PtcUsername} \t\t{runtime}"); index++; } ; char select = ' '; DateTime timeoutvalue = DateTime.Now.AddSeconds(30); while (DateTime.Now < timeoutvalue && !availableOption.Contains(select)) { if (Console.KeyAvailable) { ConsoleKeyInfo cki = Console.ReadKey(); select = cki.KeyChar; select = Char.ToUpper(select); if (!availableOption.Contains(select)) { Console.Out.WriteLine("Please select an account from list"); } } else { Thread.Sleep(100); } } if (availableOption.Contains(select)) { var bot = _session.Accounts[select - 65]; _session.ReInitSessionWithNextBot(bot); } else { var bot = _session.Accounts.OrderBy(p => p.RuntimeTotal).First(); _session.ReInitSessionWithNextBot(bot); } } machine.AsyncStart(new VersionCheckState(), _session, _subPath, excelConfigAllow); try { Console.Clear(); } catch (IOException) { } if (settings.TelegramConfig.UseTelegramAPI) { _session.Telegram = new TelegramService(settings.TelegramConfig.TelegramAPIKey, _session); } if (_session.LogicSettings.UseSnipeLocationServer || _session.LogicSettings.HumanWalkingSnipeUsePogoLocationFeeder) { SnipePokemonTask.AsyncStart(_session); } if (_session.LogicSettings.EnableHumanWalkingSnipe && _session.LogicSettings.HumanWalkingSnipeUseFastPokemap) { HumanWalkSnipeTask.StartFastPokemapAsync(_session, _session.CancellationTokenSource.Token);// that need to keep data live } if (_session.LogicSettings.DataSharingEnable) { BotDataSocketClient.StartAsync(_session); _session.EventDispatcher.EventReceived += evt => BotDataSocketClient.Listen(evt, _session); } settings.CheckProxy(_session.Translation); if (_session.LogicSettings.ActivateMSniper) { MSniperServiceTask.ConnectToService(); _session.EventDispatcher.EventReceived += evt => MSniperServiceTask.AddToList(evt); } Thread.Sleep(10000); Thread mThread = new Thread(delegate() { var infoForm = new InfoForm(); infoForm.ShowDialog(); }); mThread.SetApartmentState(ApartmentState.STA); mThread.Start(); QuitEvent.WaitOne(); }
private static void Main(string[] args) { string strCulture = Thread.CurrentThread.CurrentCulture.TwoLetterISOLanguageName; var culture = CultureInfo.CreateSpecificCulture("en-US"); CultureInfo.DefaultThreadCurrentCulture = culture; Thread.CurrentThread.CurrentCulture = culture; AppDomain.CurrentDomain.UnhandledException += UnhandledExceptionEventHandler; Console.Title = "NecroBot"; Console.CancelKeyPress += (sender, eArgs) => { QuitEvent.Set(); eArgs.Cancel = true; }; if (args.Length > 0) { subPath = args[0]; } Logger.SetLogger(new ConsoleLogger(LogLevel.New), subPath); if (CheckKillSwitch()) { return; } var profilePath = Path.Combine(Directory.GetCurrentDirectory(), subPath); var profileConfigPath = Path.Combine(profilePath, "config"); var configFile = Path.Combine(profileConfigPath, "config.json"); GlobalSettings settings; Boolean boolNeedsSetup = false; if (File.Exists(configFile)) { if (!VersionCheckState.IsLatest()) { settings = GlobalSettings.Load(subPath, true); } else { settings = GlobalSettings.Load(subPath); } } else { settings = new GlobalSettings(); settings.ProfilePath = profilePath; settings.ProfileConfigPath = profileConfigPath; settings.GeneralConfigPath = Path.Combine(Directory.GetCurrentDirectory(), "config"); settings.TranslationLanguageCode = strCulture; boolNeedsSetup = true; } var session = new Session(new ClientSettings(settings), new LogicSettings(settings)); if (boolNeedsSetup) { if (GlobalSettings.PromptForSetup(session.Translation) && !settings.isGui) { session = GlobalSettings.SetupSettings(session, settings, configFile); } else { GlobalSettings.Load(subPath); Logger.Write("Press a Key to continue...", LogLevel.Warning); Console.ReadKey(); return; } } ProgressBar.start("NecroBot is starting up", 10); session.Client.ApiFailure = new ApiFailureStrategy(session); ProgressBar.fill(20); /*SimpleSession session = new SimpleSession * { * _client = new PokemonGo.RocketAPI.Client(new ClientSettings(settings)), * _dispatcher = new EventDispatcher(), * _localizer = new Localizer() * }; * * BotService service = new BotService * { * _session = session, * _loginTask = new Login(session) * }; * * service.Run(); */ var machine = new StateMachine(); var stats = new Statistics(); ProgressBar.fill(30); string strVersion = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString(3); stats.DirtyEvent += () => Console.Title = $"[Necrobot v{strVersion}] " + stats.GetTemplatedStats( session.Translation.GetTranslation(TranslationString.StatsTemplateString), session.Translation.GetTranslation(TranslationString.StatsXpTemplateString)); ProgressBar.fill(40); var aggregator = new StatisticsAggregator(stats); ProgressBar.fill(50); var listener = new ConsoleEventListener(); ProgressBar.fill(60); session.EventDispatcher.EventReceived += evt => listener.Listen(evt, session); session.EventDispatcher.EventReceived += evt => aggregator.Listen(evt, session); if (settings.UseWebsocket) { session.EventDispatcher.EventReceived += evt => new WebSocketInterface(settings.WebSocketPort, session).Listen(evt, session); } ProgressBar.fill(70); machine.SetFailureState(new LoginState()); ProgressBar.fill(80); Logger.SetLoggerContext(session); ProgressBar.fill(90); session.Navigation.UpdatePositionEvent += (lat, lng) => session.EventDispatcher.Send(new UpdatePositionEvent { Latitude = lat, Longitude = lng }); session.Navigation.UpdatePositionEvent += Navigation_UpdatePositionEvent; ProgressBar.fill(100); machine.AsyncStart(new VersionCheckState(), session); if (session.LogicSettings.UseSnipeLocationServer) { SnipePokemonTask.AsyncStart(session); } Console.Clear(); QuitEvent.WaitOne(); }