public async Task RunBotAsync() { using (var file = new StreamReader(settingsPath)) { var json = file.ReadToEnd(); EhmBotSettings = JsonConvert.DeserializeObject <EhmBotSettings>(json); } client = new DiscordSocketClient(); commands = new CommandService(); services = new ServiceCollection() .AddSingleton(client) .AddSingleton(commands) .BuildServiceProvider(); string botToken = EhmBotSettings.BotToken; client.Log += LogMessage; await RegisterCommandsAsync(); await client.LoginAsync(TokenType.Bot, botToken); await client.StartAsync(); await Task.Delay(-1); }
public async Task <RuntimeResult> DeregisterGeneralManager([Remainder] string teamName) { logger.Debug($"Attemping to deregister GM from {teamName}"); ehmBotSettings = Program.EhmBotSettings; await Task.Delay(0); var team = TeamList.GetTeam(teamName); if (team == null) { return new BotResult(CommandError.Unsuccessful, "Unrecognized team") { Action = EAction.Deregister, ResultTime = DateTime.Now } } ; var generalManager = ehmBotSettings.GetGmByTeam(team); SocketGuildUser waitingGeneralManager = null; if (!string.IsNullOrWhiteSpace(generalManager.WaitingDiscordId)) { waitingGeneralManager = Context.Guild.GetUser(Convert.ToUInt64(generalManager.WaitingDiscordId)); } DeregisterGeneralManager(generalManager); ehmBotSettings.Save(settingsPath); var nickName = Context.Guild.GetUser(Context.User.Id).Nickname; logger.Debug($"Deregistered GM from {teamName} {(waitingGeneralManager != null ? $" Replaced with {waitingGeneralManager.Nickname ?? waitingGeneralManager.Username}" : string.Empty)}"); return(new BotResult(null, $"Deregistered {nickName} from {team.FullName}" + $"{(waitingGeneralManager != null ? $" Replaced with {waitingGeneralManager.Nickname ?? waitingGeneralManager.Username}" : string.Empty)}") { Action = EAction.Deregister, ResultTime = DateTime.Now }); }
public async Task <RuntimeResult> RegisterGeneralManager([Remainder] string teamName) { logger.Debug($"Attemping to register GM to {teamName}"); ehmBotSettings = Program.EhmBotSettings; await Task.Delay(0); var team = TeamList.GetTeam(teamName); if (team == null) { return new BotResult(CommandError.Unsuccessful, "Unrecognized team") { Action = EAction.Register, ResultTime = DateTime.Now } } ; var generalManager = ehmBotSettings.GetGmByTeam(team); var currentGeneralManager = ehmBotSettings.GetGmById(Context.User.Id.ToString()); var nickName = Context.Guild.GetUser(Context.User.Id).Nickname; if (string.IsNullOrWhiteSpace(generalManager.DiscordId) || generalManager.DiscordId == Context.User.Id.ToString()) { generalManager.DiscordId = Context.User.Id.ToString(); if (currentGeneralManager != null) { DeregisterGeneralManager(currentGeneralManager); } ehmBotSettings.Save(settingsPath); logger.Debug($"Registered GM {nickName} to {teamName}"); return(new BotResult(null, $"Registered {nickName} as {team.FullName}") { Action = EAction.Register, ResultTime = DateTime.Now }); } var currentUserOnTeam = Context.Guild.GetUser(Convert.ToUInt64(generalManager.DiscordId)); if (currentUserOnTeam == null) { generalManager.DiscordId = Context.User.Id.ToString(); if (currentGeneralManager != null) { DeregisterGeneralManager(currentGeneralManager); } ehmBotSettings.Save(settingsPath); logger.Debug($"Registered GM {nickName} to {teamName}"); return(new BotResult(null, $"Registered {nickName} as {team.FullName}") { Action = EAction.Register, ResultTime = DateTime.Now }); } generalManager.WaitingDiscordId = Context.User.Id.ToString(); ehmBotSettings.Save(settingsPath); logger.Debug($"Set GM {nickName} in waiting list for {teamName}"); return(new BotResult(null, $"{nickName} will be registered as {team.FullName} when {currentUserOnTeam.Nickname ?? currentUserOnTeam.Nickname} registers as another team or deregisters.") { Action = EAction.Register, ResultTime = DateTime.Now }); }
private void ReloadSettings() { using (var file = new StreamReader(settingsPath)) { var json = file.ReadToEnd(); EhmBotSettings = JsonConvert.DeserializeObject <EhmBotSettings>(json); } }
public Register() { using (var file = new StreamReader(settingsPath)) { var json = file.ReadToEnd(); ehmBotSettings = JsonConvert.DeserializeObject <EhmBotSettings>(json); } }
public async Task <RuntimeResult> SaveAsync([Remainder] string freeText = "") { logger.Debug("Starting save task"); ehmBotSettings = Program.EhmBotSettings; Process.Start("Utilities//Save.exe"); await Task.Delay(ehmBotSettings.MillisecondsToSave); var crashed = false; var processes = Process.GetProcessesByName("ehm"); if (!processes.Any()) { logger.Debug("Process crashed"); crashed = true; } var success = false; BotResult fRes; try { logger.Debug("Getting last saved file"); var savePath = new DirectoryInfo(ehmBotSettings.SaveLocation); var lastSavedFile = savePath.GetFiles("*.sav") .Where(x => x.Name.StartsWith(ehmBotSettings.SavePrefix, StringComparison.OrdinalIgnoreCase)) .OrderByDescending(x => x.LastWriteTime).FirstOrDefault(); if (lastSavedFile == null) { throw new ArgumentNullException($"No save files with prefix {ehmBotSettings.SavePrefix} were found"); } if (lastSavedFile.LastWriteTime > DateTime.Now.AddMilliseconds(ehmBotSettings.MillisecondsToSave).AddSeconds(-5)) { logger.Debug("File was saved in the last 20 seconds"); success = true; } if (!crashed) { fRes = !success ? new BotResult(CommandError.Unsuccessful, $"Save Failed! {Context.User.Mention}") : new BotResult(null, $"Saved {Context.User.Mention}"); } else { fRes = !success ? new BotResult(CommandError.Unsuccessful, $"Game crashed, save didn't stick. {Context.User.Mention}.") : new BotResult(null, $"Saved {Context.User.Mention}, but game crashed."); } fRes.Action = EAction.Save; fRes.ResultTime = DateTime.Now; } catch (Exception e) { logger.Error(e, "Error saving game"); throw; } return(fRes); }
public async Task <RuntimeResult> SimGames([Remainder] string length) { ehmBotSettings = Program.EhmBotSettings; await Task.Delay(0); /*var process = Process.Start("Utilities//Sim.exe"); * process?.WaitForExit();*/ var fRes = true ? new BotResult(CommandError.Unsuccessful, "Can't sim yet") : new BotResult(null, "Save made"); fRes.Action = EAction.Sim; fRes.ResultTime = DateTime.Now; return(fRes); }
public async Task <RuntimeResult> FinishRestoreAsync() { logger.Debug("Finishing restore"); ehmBotSettings = Program.EhmBotSettings; var process = Process.Start("Utilities//Restore.exe"); process?.WaitForExit(); await Context.Channel.SendMessageAsync(""); return(new BotResult(null, "Restored") { Action = EAction.Restore, ResultTime = DateTime.Now }); }
public async Task <RuntimeResult> SaveAnnounce() { logger.Debug("Announcing save"); ehmBotSettings = Program.EhmBotSettings; await Task.Delay(0); var savePath = new DirectoryInfo(ehmBotSettings.SaveLocation); var lastSavedFile = savePath.GetFiles("*.sav") .Where(x => x.Name.Contains($"{ehmBotSettings.SavePrefix} ") && int.TryParse(x.Name.Split(' ')[1].Substring(0, x.Name.Split(' ')[1].Length - 4), out var saveNumber)) .OrderByDescending(x => x.LastWriteTime).First(); return(new BotResult(null, $"Last save at {lastSavedFile.LastWriteTime}") { Action = EAction.Save, ResultTime = DateTime.Now }); }
private static async Task Main(string[] args) { logger.Debug("Checking online players"); try { using (var file = new StreamReader(Path.Combine(System.AppContext.BaseDirectory, EhmBotSettings.SETTINGS_FILE_NAME))) { var json = file.ReadToEnd(); ehmBotSettings = JsonConvert.DeserializeObject <EhmBotSettings>(json); } } catch (Exception e) { logger.Error(e, "Error loading settings"); throw; } await Utilities.ActivateApp(); SendKeys.SendWait("{F11}"); await Task.Delay(1200); ReadOnline(1, 0); await Task.Delay(1800); await Utilities.Click(ehmBotSettings.ClickPositions["Scroll to middle"]); await Task.Delay(1800); ReadOnline(1, 11); await Task.Delay(1800); await Utilities.Click(ehmBotSettings.ClickPositions["Scroll to end"]); await Task.Delay(1800); ReadOnline(4, 19); await Task.Delay(1800); await CheckResponse(); responseList.Remove(ehmBotSettings.HostPosition); Console.WriteLine(string.Join(",", responseList)); }
private static void Main(string[] args) { var fileExists = File.Exists(Path.Combine(System.AppContext.BaseDirectory, EhmBotSettings.SETTINGS_FILE_NAME)); if (!fileExists) { FirstSetup(); } else { using (var file = new StreamReader(Path.Combine(System.AppContext.BaseDirectory, EhmBotSettings.SETTINGS_FILE_NAME))) { var json = file.ReadToEnd(); oldSettings = JsonConvert.DeserializeObject <EhmBotSettings>(json); ehmBotSettings = JsonConvert.DeserializeObject <EhmBotSettings>(json); } StartingMenu(); } }
private static async Task Main(string[] args) { try { using (var file = new StreamReader(Path.Combine(System.AppContext.BaseDirectory, EhmBotSettings.SETTINGS_FILE_NAME))) { var json = file.ReadToEnd(); ehmBotSettings = JsonConvert.DeserializeObject <EhmBotSettings>(json); } } catch (Exception e) { logger.Error(e, "Error loading settings"); throw; } await Utilities.ActivateApp(); await Utilities.Click(ehmBotSettings.ClickPositions["Finish"]); await Task.Delay(300); await Utilities.Click(ehmBotSettings.ClickPositions["Anywhere"]); await Task.Delay(300); await Utilities.Click(ehmBotSettings.ClickPositions["Anywhere"]); await Task.Delay(300); await Utilities.Click(ehmBotSettings.ClickPositions["Anywhere"]); await Task.Delay(300); await Utilities.Click(ehmBotSettings.ClickPositions["Anywhere"]); await Task.Delay(300); await Utilities.Click(ehmBotSettings.ClickPositions["Anywhere"]); Console.WriteLine("Done"); }
public async Task <RuntimeResult> ViewTeamsAsync([Remainder] string freeText = "") { logger.Debug("Posting GM list"); ehmBotSettings = Program.EhmBotSettings; var fRes = new StringBuilder(); foreach (var kvp in ehmBotSettings.GeneralManagers) { fRes.AppendLine( $"{kvp.Key} : {kvp.Value.Team.FullName} - " + $"{(string.IsNullOrWhiteSpace(kvp.Value.DiscordId) ? "No GM" : (Context.Guild.GetUser(Convert.ToUInt64(kvp.Value.DiscordId)).Nickname ?? Context.Guild.GetUser(Convert.ToUInt64(kvp.Value.DiscordId)).Username))}"); } await Context.Channel.SendMessageAsync(fRes.ToString()); return(new BotResult(null, "Printed GM List") { Action = EAction.ViewTeams, ResultTime = DateTime.Now }); }
private static void FirstSetup() { oldSettings = new EhmBotSettings(); ehmBotSettings = new EhmBotSettings(); Console.WriteLine("Welcome to Alain's EHM Save Bot Version 2.0 :)"); Console.WriteLine($"Looks like this is your first time starting the bot, if this is incorrect, please make sure the {EhmBotSettings.SETTINGS_FILE_NAME} file is present."); Console.WriteLine("Do you want to proceed to the initial setup? (y/n)"); var yesNo = Console.ReadLine(); if (!string.IsNullOrWhiteSpace(yesNo) && yesNo[0] == 'y') { initialSetup = true; Console.WriteLine("Please set F11 to open the General Manager Status page in EHM, and make sure F9 is 'Save Game' then press any key to continue."); Console.ReadKey(); Console.WriteLine(string.Empty); SetBotToken(); } else { StartingMenu(); } }
public async Task <RuntimeResult> RestoreAsync([Remainder] string freeText = "") { logger.Debug("Starting restore"); ehmBotSettings = Program.EhmBotSettings; if (Context.Guild.GetUser(Context.User.Id).Roles.FirstOrDefault(x => string.Equals(x.Name, ehmBotSettings.VncRoleName, StringComparison.OrdinalIgnoreCase)) == null) { return new BotResult(CommandError.UnmetPrecondition, "Insufficient permissions") { Action = EAction.Restore, ResultTime = DateTime.Now } } ; var process = Process.Start("Utilities//Restart.exe"); process?.WaitForExit(); await Context.Channel.SendMessageAsync("Ready for login as all"); return(new BotResult(null, "Ready for login as all") { Action = EAction.Restore, ResultTime = DateTime.Now }); }
private static async Task Main(string[] args) { try { using (var file = new StreamReader(Path.Combine(System.AppContext.BaseDirectory, EhmBotSettings.SETTINGS_FILE_NAME))) { var json = file.ReadToEnd(); ehmBotSettings = JsonConvert.DeserializeObject <EhmBotSettings>(json); } } catch (Exception e) { logger.Error(e, "Error loading settings file"); throw; } try { if (!await Utilities.KillAppIfRunning()) { if (!await Utilities.KillAppIfRunning()) { logger.Warn("Error killing app"); Environment.Exit(0); } } } catch (Exception e) { logger.Error(e, "Error killing app"); throw; } logger.Debug("Starting game"); Process.Start(Path.Combine(ehmBotSettings.GameLocation, "ehm.exe")); await Task.Delay(8500); await Utilities.ActivateApp(); await Utilities.Click(ehmBotSettings.ClickPositions["Load network game"]); await Task.Delay(500); logger.Debug("Getting last saved game"); var savePath = new DirectoryInfo(ehmBotSettings.SaveLocation); try { var mostRecentSaveFile = savePath.GetFiles("*.sav").Where(x => x.Name.Contains(ehmBotSettings.SavePrefix) && int.TryParse(x.Name.Split(' ')[1].Substring(0, x.Name.Split(' ')[1].Length - 4), out var saveNumber)).OrderByDescending(x => x.LastWriteTime).First(); foreach (var character in mostRecentSaveFile.Name.Substring(0, mostRecentSaveFile.Name.Length - 4)) { SendKeys.SendWait(character.ToString()); await Task.Delay(50); } } catch (Exception e) { logger.Error(e, "Error finding most recent save"); throw; } await Utilities.Click(ehmBotSettings.ClickPositions["Load game OK"]); await Task.Delay(8500); if (ehmBotSettings.ClickPositions.TryGetValue("Restore scroll", out var restoreScroll) && restoreScroll.X > 0) { await Utilities.Click(restoreScroll); await Task.Delay(950); } await Utilities.Click(ehmBotSettings.ClickPositions["Host"]); await Task.Delay(950); await Utilities.Click(ehmBotSettings.ClickPositions["Host log in yes"]); Console.WriteLine("Done"); }