public static BaseBotCommand ParseCommand(Update update) { BaseBotCommand command; var args = string.Empty; var tokens = Regex.Split(update.Message.Text.Trim(), @"\s"); var minCommandLength = CommandNames.Select(commandName => commandName.Length).Min(); if (!tokens.Any() || tokens[0].Length < minCommandLength) { return(null); } var commandText = tokens[0].Substring(1); if (commandText.IndexOf('@') != -1) { commandText = commandText.Substring(0, commandText.IndexOf('@')); } if (tokens.Length > 1) { args = tokens.Skip(1).Aggregate((s1, s2) => $"{s1} {s2}"); } switch (commandText.ToLower()) { case "mybd": command = new MyBdCommand(update, args); break; case "bdz": command = new BdzCommand(update); break; default: command = null; break; } return(command); }