Exemple #1
0
        public Result <IBotMessage> Execute(CommandArgumentContainer args)
        {
            //TODO: it's temp solution
            string message = string.Join(", ", _context.Queams.ToList().Select(q => q.Name));

            return(Result.Ok <IBotMessage>(new BotTextMessage($"Queams: {message}")));
        }
Exemple #2
0
        public void PingCommand_ShouldReturnPong()
        {
            PingCommand pingCommand = new PingCommand();
            CommandArgumentContainer fakeContainer = A.Fake <CommandArgumentContainer>();

            pingCommand.Execute(fakeContainer).Result.IsSuccess.Should().Be(true);
        }
Exemple #3
0
        public Result Execute(CommandArgumentContainer args)
        {
            try
            {
                var parseResult = ParseArguments(args, out string groupName, out DateTime dateTime);

                if (!parseResult.IsSuccess)
                {
                    return(parseResult);
                }

                Task <GroupScheduleModel> scheduleTask = _itmoProvider.ScheduleApi.GetGroupSchedule(groupName);
                scheduleTask.WaitSafe();

                if (scheduleTask.IsFaulted)
                {
                    return(new Result(false, $"{groupName} from {args.Sender.GroupId} is invalid"));
                }

                string result = FormatResult(scheduleTask.Result, dateTime);
                return(new Result(true, result));
            }
            catch (Exception e)
            {
                return(new Result(false, $"ScheduleCommand from {args.Sender.GroupId} was failed with exception {e.Message}").WithException(e));
            }
        }
Exemple #4
0
        private Result ParseArguments(CommandArgumentContainer args, out string groupName, out DateTime date)
        {
            try
            {
                using var dbContext = new DatabaseContext();

                if (args.Arguments.Count == 0)
                {
                    groupName = dbContext.GroupSettings.Find(args.Sender.GroupId.ToString()).GroupNumber;
                    date      = DateTime.Today;
                    return(new Result(true));
                }

                if (args.Arguments.Count == 1)
                {
                    string dateAsString = args.Arguments.FirstOrDefault();
                    bool   result       = DateTime.TryParse(dateAsString, out date);
                    if (result)
                    {
                        groupName = dbContext.GroupSettings.Find(args.Sender.GroupId.ToString()).GroupNumber;
                        return(new Result(true));
                    }
                    else
                    {
                        groupName = null;
                        return(new Result(false, $"dateTime {dateAsString} from {args.Sender.GroupId} is invalid"));
                    }
                }

                if (args.Arguments.Count == 2)
                {
                    groupName = args.Arguments.FirstOrDefault();
                    bool dateTimeResult = DateTime.TryParse(args.Arguments.Last(), out date);
                    if (dateTimeResult == false)
                    {
                        return(new Result(false,
                                          $"dateTime {args.Arguments.Last()} from {args.Sender.GroupId} is invalid"));
                    }

                    LoggerHolder.Log.Information(date.ToShortDateString());
                    return(new Result(true));
                }

                groupName = null;
                date      = DateTime.MinValue;
                return(new Result(false, $"{args.Sender.GroupId}, invalid arguments"));
            }
            catch (Exception e)
            {
                groupName = string.Empty;
                date      = DateTime.MinValue;

                return(new Result(false, $"Parse argument from {args.Sender.GroupId} was failed with exception {e.Message}").WithException(e));
            }
        }
        public Result ExecuteCommand(CommandArgumentContainer args)
        {
            Result <IBotCommand> commandTask = _commands.GetCommand(args.CommandName);

            if (!commandTask.IsSuccess)
            {
                return(commandTask);
            }

            var command = commandTask.Value;
            var commandExecuteResult = command.Execute(args);

            return(commandExecuteResult);
        }
Exemple #6
0
        public Result <IBotMessage> Execute(CommandArgumentContainer args)
        {
            //TODO: HACK
            Queser queser = _context.Quesers.Find(TempKey);

            if (queser is null)
            {
                EntityEntry <Queser> entityEntry = _context.Quesers.Add(Queser.Create("Fake"));
                queser = entityEntry.Entity;
            }

            _context.Queams.Add(Queam.Create(args.Arguments[0], queser));
            _context.SaveChanges();

            return(Result.Ok <IBotMessage>(new BotTextMessage($"Created new queam: {args.Arguments[0]}")));
        }
Exemple #7
0
        public Result Execute(CommandArgumentContainer args)
        {
            try
            {
                var result = string.Join(Environment.NewLine + Environment.NewLine,
                                         _commandList.Commands.ToList()
                                         .Select(commands =>
                                                 $"{commands.Value.CommandName} : {commands.Value.Description}, {Environment.NewLine}args: " +
                                                 $"{string.Join(", ", commands.Value.Args.Select(s => s))}"));

                return(new Result(true, result));
            }
            catch (Exception e)
            {
                return(new Result(false, $"HelpCommand from {args.Sender.GroupId} was failed with exception {e.Message}").WithException(e));
            }
        }
Exemple #8
0
        private void ApiProviderOnMessage(object sender, BotEventArgs e)
        {
            try
            {
                CommandArgumentContainer commandWithArgs = Utilities.ParseCommand(e);

                var commandTaskResult = _commandHandler.IsCommandCorrect(commandWithArgs);

                LoggerHolder.Log.Verbose(commandTaskResult.ExecuteMessage);

                if (!commandTaskResult.IsSuccess)
                {
                    return;
                }

                var commandExecuteResult = _commandHandler.ExecuteCommand(commandWithArgs);

                if (!commandExecuteResult.IsSuccess)
                {
                    LoggerHolder.Log.Warning(commandExecuteResult.ExecuteMessage);
                }

                var writeMessageResult =
                    _botProvider.WriteMessage(new SenderData(e.GroupId), commandExecuteResult.ExecuteMessage);

                LoggerHolder.Log.Verbose(writeMessageResult.ExecuteMessage);
            }
            catch (Exception error)
            {
                LoggerHolder.Log.Error(error.Message);
                _botProvider.Dispose();
                var result = _botProvider.Initialize();
                if (result.Exception != null)
                {
                    LoggerHolder.Log.Verbose(result.ExecuteMessage);
                }

                LoggerHolder.Log.Verbose(result.ExecuteMessage);
            }
        }
        public Result IsCommandCorrect(CommandArgumentContainer args)
        {
            var commandTask = _commands.GetCommand(args.CommandName);

            if (!commandTask.IsSuccess)
            {
                return(commandTask);
            }

            var command = commandTask.Value;

            if (command.CanExecute(args))
            {
                return(new Result(true, $"command {args.CommandName} can be executable with args {string.Join(' ', args.Arguments.Select(x => x))}"));
            }

            var loggerMessage = $"command {command.CommandName} not executable with args {string.Join(' ', args.Arguments.Select(x=>x))}";

            //loggerMessage = args.Arguments.Aggregate(loggerMessage, (current, t) => current + (t + " "));

            return(new Result(false, loggerMessage));
        }
        public Result Execute(CommandArgumentContainer args)
        {
            try
            {
                using var dbContext = new DatabaseContext();

                var oldSetting = dbContext.GroupSettings.Find(args.Sender.GroupId.ToString());

                if (oldSetting != null)
                {
                    dbContext.GroupSettings.Remove(oldSetting);
                }

                dbContext.GroupSettings.Add(new GroupSettings(args.Sender.GroupId.ToString(), args.Arguments.FirstOrDefault()));
                dbContext.SaveChanges();

                return(new Result(true, $"SetGroup from {args.Sender.GroupId} with {args.Arguments.FirstOrDefault()} was successfully"));
            }
            catch (Exception e)
            {
                return(new Result(false, $"SetGroup from {args.Sender.GroupId} was with exception {e.Message}").WithException(e));
            }
        }
Exemple #11
0
 public Result CanExecute(CommandArgumentContainer args)
 {
     return(Result.Ok(true));
 }
Exemple #12
0
 public BotEventArgs(IBotMessage message, CommandArgumentContainer commandWithArgs) : this(message, commandWithArgs.Sender)
 {
 }
 public bool CanExecute(CommandArgumentContainer args)
 {
     return(true);
 }
Exemple #14
0
 public Result CanExecute(CommandArgumentContainer args)
 {
     throw new System.NotImplementedException();
 }
Exemple #15
0
        public Task <Result <IBotMessage> > Execute(CommandArgumentContainer args)
        {
            IBotMessage message = new BotTextMessage("Pong!");

            return(Task.FromResult(Result.Ok(message)));
        }
Exemple #16
0
 public Task <Result <string> > ExecuteAsync(CommandArgumentContainer args)
 {
     throw new System.NotImplementedException();
 }
Exemple #17
0
 public Result Execute(CommandArgumentContainer args)
 {
     return(new Result(true, "Pong"));
 }