/// <summary>
        /// Sends a HTTP GET request with query params attached to the query. There is no need to include '?query-data' in the uri
        /// </summary>
        /// <typeparam name="TRequest"></typeparam>
        /// <typeparam name="TResult"></typeparam>
        /// <param name="queryParams"></param>
        /// <param name="uri"></param>
        /// <param name="requiredPermissions"></param>
        /// <param name="cancellationToken"></param>
        /// <returns></returns>
        protected async Task <TResult> GetAsync <TRequest, TResult>(TRequest queryParams, string uri, CancellationToken cancellationToken)
            where TRequest : BotRequest
            where TResult : BotResponse, new()
        {
            string requestQuery = ModelConverter.ToHttpQuery(queryParams);

            // if the query char (?) included, then don't add it again.
            string requestUri = uri.Contains('?') ? uri + requestQuery : $"{uri}?{requestQuery}";

            using (var request = new HttpRequestMessage(HttpMethod.Get, requestUri))
            {
                request.Content = new StringContent("", Encoding.UTF8, MediaType);

                return(await this.HandleResponse <TResult>(request, cancellationToken).ConfigureAwait(false));
            }
        }