public static Message SendInvoice(this BotClient api, long chatId, string title, string description, string payload, string providerToken, string currency, IEnumerable <LabeledPrice> prices, [Optional] uint?maxTipAmount, [Optional] IEnumerable <uint>?suggestedTipAmounts, [Optional] string?startParameter, [Optional] string?providerData, [Optional] string?photoUrl, [Optional] uint?photoSize, [Optional] uint?photoWidth, [Optional] uint?photoHeight, [Optional] bool?needName, [Optional] bool?needPhoneNumber, [Optional] bool?needEmail, [Optional] bool?needShippingAddress, [Optional] bool?sendPhoneNumberToProvider, [Optional] bool?sendEmailToProvider, [Optional] bool?isFlexible, [Optional] bool?disableNotification, [Optional] bool?protectContent, [Optional] int?replyToMessageId, [Optional] bool?allowSendingWithoutReply, [Optional] InlineKeyboardMarkup?replyMarkup)
        {
            if (api == null)
            {
                throw new ArgumentNullException(nameof(api));
            }
            var args = new SendInvoiceArgs(chatId, title, description, payload, providerToken, currency, prices)
            {
                MaxTipAmount              = maxTipAmount,
                SuggestedTipAmounts       = suggestedTipAmounts,
                StartParameter            = startParameter,
                ProviderData              = providerData,
                PhotoUrl                  = photoUrl,
                PhotoSize                 = photoSize,
                PhotoWidth                = photoWidth,
                PhotoHeight               = photoHeight,
                NeedName                  = needName,
                NeedPhoneNumber           = needPhoneNumber,
                NeedEmail                 = needEmail,
                NeedShippingAddress       = needShippingAddress,
                SendPhoneNumberToProvider = sendPhoneNumberToProvider,
                SendEmailToProvider       = sendEmailToProvider,
                IsFlexible                = isFlexible,
                DisableNotification       = disableNotification,
                ProtectContent            = protectContent,
                ReplyToMessageId          = replyToMessageId,
                AllowSendingWithoutReply  = allowSendingWithoutReply,
                ReplyMarkup               = replyMarkup
            };

            return(api.RPC <Message>(MethodNames.SendInvoice, args));
        }
        public static async Task <Message> SendInvoiceAsync(this BotClient bot, SendInvoiceArgs args, [Optional] CancellationToken cancellationToken)
        {
            if (bot == default)
            {
                throw new ArgumentNullException(nameof(bot));
            }

            if (args == default)
            {
                throw new ArgumentNullException(nameof(args));
            }

            return(await bot.RPCA <Message>(MethodNames.SendInvoice, args, cancellationToken : cancellationToken).ConfigureAwait(false));
        }
        public static Message SendInvoice(this BotClient bot, SendInvoiceArgs args)
        {
            if (bot == default)
            {
                throw new ArgumentNullException(nameof(bot));
            }

            if (args == default)
            {
                throw new ArgumentNullException(nameof(args));
            }

            return(bot.RPC <Message>(MethodNames.SendInvoice, args));
        }