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); }