Example #1
0
 public async Task Init()
 {
     _textCommandHandlers = _factory.CreateTextCommandHandler();
     await _botClient.SetMyCommandsAsync(new List <BotCommand>
     {
         new()
         {
             Command     = "/start",
             Description = "Start bot"
         }
     }).ConfigureAwait(false);
        public ITextCommandHandler CreateTextCommandHandler()
        {
            LoadReaders();

            var bankSettings = _appSettings.BankSettings
                               .Where(x => x.Enabled)
                               .Select(x => x.Name).ToList();

            ITextCommandHandler root = null;
            ITextCommandHandler last = null;

            foreach (var type in GetFilesStartsWith("CommandHandler.", typeof(TextCommandHandler))
                     .OrderBy(x => bankSettings.IndexOf(GetName(x))))
            {
                try
                {
                    var name = GetName(type);

                    var reader = _rateReaders.SingleOrDefault(x =>
                                                              string.Equals(x.Name, name, StringComparison.OrdinalIgnoreCase));

                    if (reader == null)
                    {
                        throw new Exception($"There is no reader for '{name}'");
                    }

                    ITextCommandHandler instance = (ITextCommandHandler)Activator.CreateInstance(type, _logger, reader);
                    if (root == null)
                    {
                        root = last = instance;
                    }
                    else
                    {
                        last = last.SetNext(instance);
                    }
                }
                catch (Exception e)
                {
                    _logger.LogError(e.ToString());
                }
            }

            return(root);
        }
Example #3
0
 public LionCommandHandler(ILogger logger, IExchangeRateReader exchangeRateReader, ITextCommandHandler handler) : this(logger, exchangeRateReader)
 {
     base.SetNext(handler);
 }
 public ITextCommandHandler SetNext(ITextCommandHandler handler)
 {
     return(_nextHandler = handler);
 }