This object represents an incoming update.
 private static bool CheckIfOccupied(IEnumerable<ITelegramCommand> telegramCommands, Update update)
 {
     return _countRunningCommands >= _maxRunningCommands ||
            telegramCommands.Any(
                c =>
                {
                    var commandName = c.Name.Trim().ToLower();
                    var updateMessage = update.Message.Text.Trim();
                    return !c.AllowParlallelExecution && updateMessage.StartsWith($"/{commandName}") && RunningCommands.Any(r => r.Contains(commandName));
                });
 }
        private void ExecuteCommands(IEnumerable<ITelegramCommand> telegramCommands, Update update)
        {
            var commands = GetCommandsFromUpdate(telegramCommands, update);

            commands.AsParallel().ForAll(command =>
            {
                try
                {
                    command.Execute(update.Message);
                }
                catch (Exception e)
                {
                    var msgError = $"Ocorreu um erro ao executar o comando: {e.Message}\r\n{e.StackTrace}";
                    Console.WriteLine(msgError);

                    command.SendToChat(update.Message.Chat.Id, $"Ocorreu um erro ao executar o comando \"/{command.Name}\"!");
                }
                finally
                {
                    RunningCommands.RemoveAll(c => c.Trim().ToLower().StartsWith($"/{command.Name}"));
                }
            });
        }
 private static IEnumerable<ITelegramCommand> GetCommandsFromUpdate(IEnumerable<ITelegramCommand> telegramCommands, Update update)
 {
     var messageText = update.Message.Text.ToLower().Trim();
     var commands = telegramCommands.Where(c => messageText.StartsWith($"/{c.Name.Trim().ToLower()}"));
     return commands;
 }
 private void SayOccupied(Update update)
 {
     var message = $"No momento estou ocupado para executar o comando \"{update.Message.Text}\". Assim que desocupar aviso.";
     _unprocessedUpdates.Add(update);
     TelegramCommand.SendMessageToChat(_telegramBot, update.Message.Chat.Id, message);
 }
 private void SayCommandReceived(Update update)
 {
     var message = $"{update.Message.From.FirstName}, recebi seu comando \"{update.Message.Text}\".\r\nPor favor, aguarde um momento enquanto processo...";
     TelegramCommand.SendMessageToChat(_telegramBot, update.Message.Chat.Id, message);
 }
 private void MarkAsRunning(Update update)
 {
     var messageText = update.Message.Text.Trim().ToLower();
     var messageTimeId = update.Message.Date.ToString("yyyyMMddHHmmssffff");
     RunningCommands.Add($"{messageText}_{messageTimeId}");
     SayCommandReceived(update);
 }