private async Task ProcessMessage(BotEventArgs e) { using var scope = _serviceProvider.CreateScope(); var commandHandler = new CommandHandler(scope.ServiceProvider); CommandContainer commandContainer = _commandParser.ParseCommand(e); if (!commandContainer.StartsWithPrefix(_prefix)) { return; } commandContainer.RemovePrefix(_prefix); Result checkResult = commandHandler.CheckArgsCount(commandContainer); if (!checkResult.IsSuccess) { throw new CommandArgumentsException(checkResult.Message); } checkResult = commandHandler.CanCommandBeExecuted(commandContainer); if (!checkResult.IsSuccess) { throw new CommandCantBeExecutedException(checkResult.Message); } IBotMessage message = await commandHandler.ExecuteCommand(commandContainer); await message.SendAsync(_apiProvider, e.SenderInfo); }
private void HandlerError(Result result, BotEventArgs botEventArgs) { LoggerHolder.Instance.Error(result.ToString()); BotTextMessage errorMessage = new BotTextMessage("Something went wrong."); errorMessage.Send(_apiProvider, botEventArgs.Sender); if (_sendErrorLogToUser) { BotTextMessage errorlogMessage = new BotTextMessage(result.ToString()); errorlogMessage.Send(_apiProvider, botEventArgs.Sender); } }
private void ApiProviderOnMessage(object sender, BotEventArgs e) { try { ProcessMessage(e); } catch (Exception exception) { LoggerHolder.Instance.Error(exception, $"Message handling from [{e.Sender.Username}] failed."); LoggerHolder.Instance.Debug($"Failed message: {e.Message.Text}"); //FYI: we do not need to restart on each exception, but probably we have case were restart must be. //_apiProvider.Restart(); } }
private async Task HandlerError(BotException exception, BotEventArgs botEventArgs) { LoggerHolder.Instance.Error(exception.Message); if (_sendErrorLogToUser) { var errorLogMessage = new BotTextMessage(exception.Message); await errorLogMessage.SendAsync(_apiProvider, botEventArgs.SenderInfo); } else { var errorMessage = new BotTextMessage("Something went wrong."); await errorMessage.SendAsync(_apiProvider, botEventArgs.SenderInfo); } }
private async Task RunCommandProcessing(BotEventArgs e) { try { await ProcessMessage(e); } catch (BotException exception) { await HandlerError(exception, e); } catch (Exception exception) { LoggerHolder.Instance.Error(exception, $"Message handling from [{e.SenderInfo.UserSenderUsername}] failed."); LoggerHolder.Instance.Debug($"Failed message: {e.Message.Text}"); //FYI: we do not need to restart on each exception, but probably we have case were restart must be. //_apiProvider.Restart(); } }
private void ProcessMessage(BotEventArgs e) { Result <CommandArgumentContainer> commandResult = _commandParser.ParseCommand(e); if (commandResult.IsFailed) { return; } if (!commandResult.Value.EnsureStartWithPrefix(_prefix)) { return; } commandResult = _commandHandler.IsCorrectArgumentCount(commandResult.Value.ApplySettings(_prefix)); if (commandResult.IsFailed) { HandlerError(commandResult, e); return; } commandResult = _commandHandler.IsCommandCanBeExecuted(commandResult.Value); if (commandResult.IsFailed) { HandlerError(commandResult, e); return; } Result <IBotMessage> executionResult = _commandHandler.ExecuteCommand(commandResult.Value); if (executionResult.IsFailed) { HandlerError(commandResult, e); return; } IBotMessage message = executionResult.Value; SenderInfo sender = commandResult.Value.Sender; //_apiProvider.WriteMessage(new BotEventArgs(executionResult.Value, commandResult.Value)); message.Send(_apiProvider, sender); }
private void ApiProviderOnMessage(object sender, BotEventArgs e) { #pragma warning disable CS4014 RunCommandProcessing(e); #pragma warning restore CS4014 }