Exemple #1
0
        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();
        }
Exemple #2
0
        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
        }
Exemple #3
0
        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();
        }