/// <inheritdoc />
        public Task <TResult> Handle(TRequest request, CancellationToken cancellationToken, RequestHandlerDelegate <TResult> next)
        {
            if (request is IBotActionRequest botRequest)
            {
                if (_contextAccessor.Context.IsAuthorized)
                {
                    return(next());
                }

                var handlerType = _handlerFinder.FindHandlerTypeByRequest(typeof(TRequest));
                if (handlerType != null)
                {
                    var isAnonymous = handlerType.GetCustomAttribute <AllowAnonymousAttribute>(inherit: false) != null;
                    if (isAnonymous)
                    {
                        _contextAccessor.Context.IsAnonymous = true;
                        return(next());
                    }
                }

                var options = _optionsProvider.Value;
                var sender  = botRequest.Update.Message?.From;
                if (sender != null)
                {
                    var isTrusted = options.Authorization.TrustedUsers.AdministratorIds.Contains(sender.Id);
                    if (!isTrusted)
                    {
                        return(Task.FromException <TResult>(
                                   new UnauthorizedAccessException($"User '{sender}' is not trusted, command declined.")));
                    }

                    _contextAccessor.Context.IsAuthorized = true;

                    _logger.LogInformation($"Action from user '{sender}' authorized successfully");
                }
            }

            return(next());
        }