private static void Main(string[] args) { var subPath = ""; if (args.Length > 0) subPath = Path.DirectorySeparatorChar + args[0]; Logger.SetLogger(new ConsoleLogger(LogLevel.Info), subPath); GlobalSettings settings = GlobalSettings.Load(subPath); var machine = new StateMachine(); var stats = new Statistics(); stats.DirtyEvent += () => Console.Title = stats.ToString(); var aggregator = new StatisticsAggregator(stats); var listener = new ConsoleEventListener(); var websocket = new WebSocketInterface(settings.WebSocketPort); machine.EventListener += listener.Listen; machine.EventListener += aggregator.Listen; machine.EventListener += websocket.Listen; machine.SetFailureState(new LoginState()); var context = new Context(new ClientSettings(settings), new LogicSettings(settings)); context.Navigation.UpdatePositionEvent += (lat, lng) => machine.Fire(new UpdatePositionEvent { Latitude = lat, Longitude = lng }); context.Client.Login.GoogleDeviceCodeEvent += LoginWithGoogle; machine.AsyncStart(new VersionCheckState(), context); Console.ReadLine(); }
private static void Main() { Logger.SetLogger(new ConsoleLogger(LogLevel.Info)); var machine = new StateMachine(); var stats = new Statistics(); stats.DirtyEvent += () => Console.Title = stats.ToString(); var aggregator = new StatisticsAggregator(stats); var listener = new ConsoleEventListener(); machine.EventListener += listener.Listen; machine.EventListener += aggregator.Listen; machine.SetFailureState(new LoginState()); SettingsUtil.Load(); var context = new Context(new ClientSettings(), new LogicSettings()); context.Client.Login.GoogleDeviceCodeEvent += LoginWithGoogle; machine.AsyncStart(new VersionCheckState(), context); Console.ReadLine(); }
private static void Main(string[] args) { AppDomain.CurrentDomain.UnhandledException += UnhandledExceptionEventHandler; Console.Title = "NecroBot starting"; Console.CancelKeyPress += (sender, eArgs) => { QuitEvent.Set(); eArgs.Cancel = true; }; var culture = CultureInfo.CreateSpecificCulture("en-US"); CultureInfo.DefaultThreadCurrentCulture = culture; Thread.CurrentThread.CurrentCulture = culture; if (args.Length > 0) subPath = args[0]; Logger.SetLogger(new ConsoleLogger(LogLevel.Info), subPath); var settings = GlobalSettings.Load(subPath); if (settings == null) { Logger.Write("Press a Key to continue...", LogLevel.Warning); Console.ReadKey(); return; } var session = new Session(new ClientSettings(settings), new LogicSettings(settings)); 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(); stats.DirtyEvent += () => Console.Title = stats.GetTemplatedStats( session.Translation.GetTranslation(TranslationString.StatsTemplateString), session.Translation.GetTranslation(TranslationString.StatsXpTemplateString)); var aggregator = new StatisticsAggregator(stats); var listener = new ConsoleEventListener(); var websocket = new WebSocketInterface(settings.WebSocketPort, session); session.EventDispatcher.EventReceived += evt => listener.Listen(evt, session); session.EventDispatcher.EventReceived += evt => aggregator.Listen(evt, session); session.EventDispatcher.EventReceived += evt => websocket.Listen(evt, session); machine.SetFailureState(new LoginState()); Logger.SetLoggerContext(session); session.Navigation.UpdatePositionEvent += (lat, lng) => session.EventDispatcher.Send(new UpdatePositionEvent {Latitude = lat, Longitude = lng}); session.Navigation.UpdatePositionEvent += Navigation_UpdatePositionEvent; machine.AsyncStart(new VersionCheckState(), session); if (session.LogicSettings.UseSnipeLocationServer) SnipePokemonTask.AsyncStart(session); QuitEvent.WaitOne(); }
public StatisticsAggregator(Statistics stats) { _stats = stats; }
private static void Main(string[] args) { var subPath = ""; if (args.Length > 0) subPath = args[0]; Logger.SetLogger(new ConsoleLogger(LogLevel.Info), subPath); var settings = GlobalSettings.Load(subPath); if (settings == null) { Logger.Write("This is your first start and the bot will use the default config!", LogLevel.Warning); Logger.Write("Continue? (y/n)", LogLevel.Warning); if (!Console.ReadLine().ToUpper().Equals("Y")) return; settings = GlobalSettings.Load(subPath); } var session = new Session(new ClientSettings(settings), new LogicSettings(settings)); /*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(); stats.DirtyEvent += () => Console.Title = stats.ToString(); var aggregator = new StatisticsAggregator(stats); var listener = new ConsoleEventListener(); var websocket = new WebSocketInterface(settings.WebSocketPort); session.EventDispatcher.EventReceived += (IEvent evt) => listener.Listen(evt, session); session.EventDispatcher.EventReceived += (IEvent evt) => aggregator.Listen(evt, session); session.EventDispatcher.EventReceived += (IEvent evt) => websocket.Listen(evt, session); machine.SetFailureState(new LoginState()); Logger.SetLoggerContext(session); session.Navigation.UpdatePositionEvent += (lat, lng) => session.EventDispatcher.Send(new UpdatePositionEvent {Latitude = lat, Longitude = lng}); session.Client.Login.GoogleDeviceCodeEvent += (usercode, uri) => { try { Logger.Write(session.Translations.GetTranslation(Logic.Common.TranslationString.OpeningGoogleDevicePage), LogLevel.Warning); Thread.Sleep(5000); Process.Start(uri); var thread = new Thread(() => Clipboard.SetText(usercode)); //Copy device code thread.SetApartmentState(ApartmentState.STA); //Set the thread to STA thread.Start(); thread.Join(); } catch (Exception) { Logger.Write(session.Translations.GetTranslation(Logic.Common.TranslationString.CouldntCopyToClipboard), LogLevel.Error); Logger.Write(session.Translations.GetTranslation(Logic.Common.TranslationString.CouldntCopyToClipboard2, uri, usercode), LogLevel.Error); } }; machine.AsyncStart(new VersionCheckState(), session); Console.ReadLine(); }
private static void Main(string[] args) { var subPath = ""; if (args.Length > 0) subPath = args[0]; Logger.SetLogger(new ConsoleLogger(LogLevel.Info), subPath); var settings = GlobalSettings.Load(subPath); if (settings == null) { Logger.Write("This is your first start and the bot has generated the default config!", LogLevel.Warning); Logger.Write("We will now shutdown to let you configure the bot and then launch it again.", LogLevel.Warning); Thread.Sleep(2000); Environment.Exit(0); return; } var session = new Session(new ClientSettings(settings), new LogicSettings(settings)); /*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(); stats.DirtyEvent += () => Console.Title = stats.GetTemplatedStats(session.Translation.GetTranslation(Logic.Common.TranslationString.StatsTemplateString), session.Translation.GetTranslation(Logic.Common.TranslationString.StatsXpTemplateString)); var aggregator = new StatisticsAggregator(stats); var listener = new ConsoleEventListener(); var websocket = new WebSocketInterface(settings.WebSocketPort, session.Translation); session.EventDispatcher.EventReceived += (IEvent evt) => listener.Listen(evt, session); session.EventDispatcher.EventReceived += (IEvent evt) => aggregator.Listen(evt, session); session.EventDispatcher.EventReceived += (IEvent evt) => websocket.Listen(evt, session); machine.SetFailureState(new LoginState()); Logger.SetLoggerContext(session); session.Navigation.UpdatePositionEvent += (lat, lng) => session.EventDispatcher.Send(new UpdatePositionEvent {Latitude = lat, Longitude = lng}); machine.AsyncStart(new VersionCheckState(), session); //Non-blocking key reader //This will allow to process console key presses in another code parts while (true) { if (Console.KeyAvailable) { var info = Console.ReadKey(); if (info.Key == ConsoleKey.Enter) break; } Thread.Sleep(5); } }
public async Task <StatsExport> GetCurrentInfo(ISession session, Inventory inventory) { var stats = await inventory.GetPlayerStats().ConfigureAwait(false); StatsExport output = null; var stat = stats.FirstOrDefault(); if (stat != null) { var ep = stat.NextLevelXp - stat.Experience; var time = Math.Round(ep / (TotalExperience / GetRuntime()), 2); var hours = 0.00; var minutes = 0.00; var TotXP = 0; for (int i = 0; i < stat.Level + 1; i++) { TotXP = TotXP + Statistics.GetXpDiff(i); } if (double.IsInfinity(time) == false && time > 0) { hours = Math.Truncate(TimeSpan.FromHours(time).TotalHours); minutes = TimeSpan.FromHours(time).Minutes; } if (LevelForRewards == -1 || stat.Level >= LevelForRewards) { if (session.LogicSettings.SkipCollectingLevelUpRewards) { Logger.Write("Current Lvl: " + stat.Level + ". Skipped collecting level up rewards.", LogLevel.Info); } else { LevelUpRewardsResponse Result = await inventory.GetLevelUpRewards(stat.Level).ConfigureAwait(false); if (Result.ToString().ToLower().Contains("awarded_already")) { LevelForRewards = stat.Level + 1; } if (Result.ToString().ToLower().Contains("success")) { Logger.Write($"{session.Profile.PlayerData.Username} has leveled up: " + stat.Level, LogLevel.Info); LevelForRewards = stat.Level + 1; RepeatedField <ItemAward> items = Result.ItemsAwarded; string Rewards = ""; if (items.Any <ItemAward>()) { Logger.Write("- Received Items -", LogLevel.Info); Rewards = "\nItems Recieved:"; foreach (ItemAward item in items) { Logger.Write($"{item.ItemCount,2:#0}x {item.ItemId}'s", LogLevel.Info); Rewards += $"\n{item.ItemCount,2:#0}x {item.ItemId}'s"; } } if (session.LogicSettings.NotificationConfig.EnablePushBulletNotification == true) { await PushNotificationClient.SendNotification(session, $"{session.Profile.PlayerData.Username} has leveled up.", $"Trainer just reached level {stat.Level}{Rewards}", true).ConfigureAwait(false); } } } } output = new StatsExport { Level = stat.Level, HoursUntilLvl = hours, MinutesUntilLevel = minutes, LevelXp = TotXP, CurrentXp = stat.Experience, PreviousXp = stat.PrevLevelXp, LevelupXp = stat.NextLevelXp }; } return(output); }
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); /*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); if (settings.UseTelegramAPI) { session.Telegram = new Logic.Service.TelegramService(settings.TelegramAPIKey, session); } if (session.LogicSettings.UseSnipeLocationServer) SnipePokemonTask.AsyncStart(session); try { Console.Clear(); } catch (IOException) { } settings.checkProxy(); QuitEvent.WaitOne(); }
private static void Main(string[] args) { var culture = CultureInfo.CreateSpecificCulture("en-US"); CultureInfo.DefaultThreadCurrentCulture = culture; Thread.CurrentThread.CurrentCulture = culture; var subPath = ""; if (args.Length > 0) subPath = args[0]; Logger.SetLogger(new ConsoleLogger(LogLevel.Info), subPath); var settings = GlobalSettings.Load(subPath); if (settings == null) { Logger.Write("This is your first start and the bot has generated the default config!", LogLevel.Warning); Logger.Write("Press a Key to continue...", LogLevel.Warning); Console.ReadKey(); } var session = new Session(new ClientSettings(settings), new LogicSettings(settings)); 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(); stats.DirtyEvent += () => Console.Title = stats.GetTemplatedStats( session.Translation.GetTranslation(TranslationString.StatsTemplateString), session.Translation.GetTranslation(TranslationString.StatsXpTemplateString)); var aggregator = new StatisticsAggregator(stats); var listener = new ConsoleEventListener(); var websocket = new WebSocketInterface(settings.WebSocketPort, session); session.EventDispatcher.EventReceived += evt => listener.Listen(evt, session); session.EventDispatcher.EventReceived += evt => aggregator.Listen(evt, session); session.EventDispatcher.EventReceived += evt => websocket.Listen(evt, session); machine.SetFailureState(new LoginState()); Logger.SetLoggerContext(session); session.Navigation.UpdatePositionEvent += (lat, lng) => session.EventDispatcher.Send(new UpdatePositionEvent {Latitude = lat, Longitude = lng}); machine.AsyncStart(new VersionCheckState(), session); if (session.LogicSettings.UseSnipeLocationServer) SnipePokemonTask.AsyncStart(session); //Non-blocking key reader //This will allow to process console key presses in another code parts while (true) { if (Console.KeyAvailable && Console.ReadKey(true).Key == ConsoleKey.Enter) { break; } Thread.Sleep(5); } }