public <T extends BaseRequest<T, R>, R extends BaseResponse> R execute(BaseRequest<T, R> request) {
        return api.send(request);
    }
@Test
    public void sendMessage() {
        SendResponse sendResponse = bot.execute(new SendMessage(chatId, "reply this message").replyMarkup(
                new ForceReply().inputFieldPlaceholder("input-placeholder").selective(true)
        ));
        ForceReply f = new ForceReply().inputFieldPlaceholder("asd");
        Giveaway g = new Giveaway();
        MessageTest.checkTextMessage(sendResponse.message());
        assertNotNull(sendResponse.message().from());
        if (true) return;

        sendResponse = bot.execute(new SendMessage(chatId, "remove keyboard")
                .replyMarkup(new ReplyKeyboardRemove())
                .disableNotification(true)
                .replyToMessageId(8087)
        );
        MessageTest.checkTextMessage(sendResponse.message());
        assertNotNull(sendResponse.message().replyToMessage());

        sendResponse = bot.execute(new SendMessage(chatId, "message with keyboard")
                .parseMode(ParseMode.HTML)
                .disableWebPagePreview(false)
                .protectContent(true)
                .replyMarkup(new ReplyKeyboardMarkup(
                        new KeyboardButton("contact").requestContact(true),
                        new KeyboardButton("location").requestLocation(true),
                        new KeyboardButton("user").requestUser(
                                new KeyboardButtonRequestUser(123).userIsBot(false).userIsPremium(false)),
                        new KeyboardButton("chat").requestChat(
                                new KeyboardButtonRequestChat(321, false)
                                        .chatIsForum(false).chatHasUsername(false).chatIsCreated(true)
                                        .userAdministratorRights(new ChatAdministratorRights().canChangeInfo(true))
                                        .botAdministratorRights(new ChatAdministratorRights().canChangeInfo(true))
                                        .botIsMember(true)))
                        .oneTimeKeyboard(true)
                        .resizeKeyboard(true)
                        .inputFieldPlaceholder("input-placeholder")
                        .isPersistent(false)
                        .selective(true)));
        assertTrue(sendResponse.message().hasProtectedContent());
        MessageTest.checkTextMessage(sendResponse.message());

        sendResponse = bot.execute(new SendMessage(chatId, "simple buttons")
                .replyMarkup(new ReplyKeyboardMarkup("ok", "cancel")));
        MessageTest.checkTextMessage(sendResponse.message());
    }