private static void Run() { while (!HasInternet()) { } var config = JsonConvert.DeserializeObject <Configuration>(File.ReadAllText("conf.json")); _discord = new Discord(); _discord.OnClosed += DiscordClosed; var result = _discord.Connect(config); result.Wait(); //Instantiate this so that the static 'Instance' field is set. var roundService = new RoundService(_discord); var subService = new SubService(); subService.Init(_discord); _discord.AddCommand(new UptimeCommand()); _discord.AddCommand(new BreakLengthCommand()); _discord.AddCommand(new HelpCommand()); _discord.AddCommand(new RoundLengthCommand()); _discord.AddCommand(new StartCommand()); _discord.AddCommand(new StopCommand()); _discord.AddCommand(new TimeoutCommand()); Repl(); }
private static void Evaluate(string[] input) { if (input[0] == "exit") { _exiting = true; } else if (input[0] == "saveconf") { File.WriteAllText("conf.json", JsonConvert.SerializeObject(_discord.DiscordConfig)); } else if (input[0] == "loadconf") { if (RoundService.Instance != null && RoundService.Instance.IsRunning) { _discord.SendMessage("Ending rounds to reload bot configuration..."); RoundService.Instance.StopRounds(); } SubService.Instance.Close(); var configContents = File.ReadAllText("conf.json"); var config = JsonConvert.DeserializeObject <Configuration>(configContents); _discord.SetConfig(config); SubService.Instance.Init(_discord); } else if (input[0] == "close") { _discord.SendMessage("Host is forcing closure of the bot."); if (RoundService.Instance != null && RoundService.Instance.IsRunning) { RoundService.Instance.StopRounds(); } SubService.Instance.Close(); _discord.Close(); var configContents = File.ReadAllText("conf.json"); var config = JsonConvert.DeserializeObject <Configuration>(configContents); _discord.SetConfig(config); SubService.Instance.Init(_discord); } else if (input[0] == "open") { var discordConfigContents = File.ReadAllText("conf.json"); var discordConfig = JsonConvert.DeserializeObject <Configuration>(discordConfigContents); _discord = new Discord(); _discord.SetConfig(discordConfig); _discord.Connect(discordConfig); var rounds = new RoundService(_discord); var sub = new SubService(); SubService.Instance.Init(_discord); } else if (input[0] == "cmd") { EvaluateDiscordCommand(input); } else if (input[0] == "msg") { _discord.SendMessage(input[1]); } else if (input[0] == "channel") { Console.WriteLine(string.Format("[{0}] {1}", _discord.Channel.Id, _discord.Channel.Name)); } else if (input[0] == "uptime") { var difference = TimeSpan.FromTicks(DateTime.UtcNow.Ticks - _discord.StartTime.Ticks); Console.WriteLine($"{_discord.StartTime} (UTC); {difference.TotalDays:0.00} days."); } #if DEBUG else if (input[0] == "throw") { throw new Exception("Controlled exception"); } #endif }
private void Run() { int roundCounter = 1; var startTime = FindNextStartTime(Discord.DiscordConfig.RoundLength, Discord.DiscordConfig.BreakLength); Discord.SendMessage($"Round {roundCounter} is starting at XX:{startTime.Minute:00}!"); SubService.AddReactions(Discord); Sleep((long)startTime.Subtract(DateTime.Now).TotalMilliseconds); var roundLength = Discord.DiscordConfig.RoundLength; var breakLength = Discord.DiscordConfig.BreakLength; while (!_cancelSource.IsCancellationRequested) { var endTime = startTime.AddMinutes(roundLength); SubService.Instance.SendMessage("{0} Attention: *{1}* {0}"); Discord.SendMessage($"Round {roundCounter} is starting! {Emojies.TIMER}" + $"{Environment.NewLine}*Break at XX:{endTime.Minute:00}.*"); SubService.AddReactions(Discord); if (!SleepAndStatus(ref startTime, endTime, "Rounds for {0} more minute(s)")) { break; } var breakEndTime = endTime.AddMinutes(breakLength); var foodEmojie = Emojies.GetRandomFoodEmojie(); SubService.Instance.SendMessage("{0} Attention: *{1}* {0}"); Discord.SendMessage($"{foodEmojie} Round over! Break until **XX:{breakEndTime.Minute:00}**! {foodEmojie}"); SubService.AddReactions(Discord); if (!SleepAndStatus(ref startTime, breakEndTime, "Break for {0} more minute(s)")) { break; } if (Activity) { _timeoutCounter = 0; } else { _timeoutCounter++; } if (_timeoutCounter >= Discord.DiscordConfig.TimeoutCount) { SubService.Instance.SendMessage("{0} Attention: *{1}* {0}"); Discord.SendMessage("**Ending rounds due to inactivity.**"); break; } Activity = false; roundCounter++; } Discord.SetStatus("Nothing"); _cancelSource.Cancel(); }