public Task <CommandHandlerResult> ProcessCommand(BotCommand command, TwitchChannel channel) { switch (command.Command) { case "!poll": if (AuthorizeCommand(command.Sender, channel)) { if (!_activePolls.ContainsKey(channel.Name)) { string[] optionArray = command.Arguments.Split(new char[] { '!' }, StringSplitOptions.RemoveEmptyEntries); optionArray = optionArray.Select(x => x.Trim()).ToArray(); IPoll poll = _pollFactory.CreatePoll(optionArray); _activePolls.Add(channel.Name, poll); return(Task.FromResult(new CommandHandlerResult(ResultType.HandledWithMessage, $"Poll started! use !vote <number> to case your vote. {poll.PrintPoll()}", $"#{channel.Name}"))); } else { IPoll poll = _activePolls[channel.Name]; string pollResult = poll.EndPoll(); _activePolls.Remove(channel.Name); return(Task.FromResult(new CommandHandlerResult(ResultType.HandledWithMessage, pollResult, $"#{channel.Name}"))); } } else { //Even if we've done nothing, the poll command has been handled. return(Task.FromResult(new CommandHandlerResult(ResultType.Handled))); } case "!vote": if (_activePolls.ContainsKey(channel.Name)) { if (Int32.TryParse(command.SplitArgumentsOnSpaces(1)[0], out int votersChoice)) { _activePolls[channel.Name].CastVote(command.Sender, votersChoice); } } //Even if we've done nothing, the vote command has been handled. return(Task.FromResult(new CommandHandlerResult(ResultType.Handled))); default: return(Task.FromResult(new CommandHandlerResult(ResultType.NotHandled))); } }