Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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);
            }
        }
Esempio n. 3
0
 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();
     }
 }
Esempio n. 4
0
        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);
            }
        }
Esempio n. 5
0
 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();
     }
 }
Esempio n. 6
0
        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);
        }
Esempio n. 7
0
        private void ApiProviderOnMessage(object sender, BotEventArgs e)
        {
#pragma warning disable CS4014
            RunCommandProcessing(e);
#pragma warning restore CS4014
        }