Как оформить все свойства книг не через константы?
Подскажите, пожалуйста, как мне сократить код количеством констант. Они отличаются по сути только вначале имени и получается, что можно легко запутаться. Нужно ли мне создавать для них отдельные классы или что-то ещё? Я ещё новичок в данном деле не судите строго
public static final String PZV_COVER = "AgACAgIAAxkBAAIBx2KTdP4CNbqTZfv7Hm7TqGAugkdSAAKIvjEbUaqZSPwL-Up482owAQADAgADeQADJAQ";
public static final String PZV_NAME = "Параллельно задавая вопрос";
public static final String PZV_DESC = """
Сборник из пяти произведений\\. Подробные аннотации внутри\\.
*Под покровом единства*
Существует вуз, где запрещена дружба, и всех обучают рассчитывать только на себя\\.
*Корректировка*
В прошлом случайный спор друзей из компании повлиял на их судьбу в настоящем\\.
*Лунные тени*
Хождение во сне жителей общаги и кровавые истории под утро\\.
*Звезда*
Сказка о том, как на Землю упала Звезда\\.
*Понимания ноль*
Дружба между парнем и девушкой существует и поддерживается государством, давая им невероятные способности\\.""";
public static final String PZV_RIDERO = "https://ridero.ru/books/parallelno_zadavaya_vopros/";
public static final String PZV_LITRES = "https://www.litres.ru/daniil-apasov/parallelno-zadavaya-vopros-pod-pokrovom-edinstva-korrektirov/";
public static final String PZV_WILDBERRIES = "https://www.wildberries.ru/catalog/36734671/detail.aspx?targetUrl=SN";
public static final String PZV_OZON = "https://www.ozon.ru/product/parallelno-zadavaya-vopros-168137107/?sh=qwZ99MK_wQ";
public static final String PZV_ALIEXPRESS = "https://aliexpress.ru/item/1005002349414876.html?gatewayAdapt=glo2rus&sku_id=12000020229783418";
public static final String PZV_AMAZON = "https://www.amazon.com/dp/B084Q3G56J";
public static final String POD_COVER = "AgACAgIAAxkBAAICIWKV6rrWZCfAVHeZRb600fEdhUUtAALFuTEbgvKxSGOQfTzAxJOgAQADAgADeQADJAQ";
public static final String POD_NAME = "Под покровом единства";
public static final String POD_DESC = "Никогда не задумывались, что друзья — это ваша слабость? Иногда вы" +
"рискуете всем ради них\\. Государство и учебные заведения об этом не расскажут, кроме одного вуза со" +
"спецпрограммой, который сделает из каждого студента личность\\. Где все связи будут запрещены\\." +
"Самостоятельность во главе всего\\. Все ли смогут пройти такую школу жизни?";
public static final String KORR_COVER = "AgACAgIAAxkBAAICHWKV6h4KSQAB0Cw-9YYzNmKqQYlBbAACwrkxG4LysUioRIR5O_3J4wEAAwIAA3kAAyQE";
public static final String KORR_NAME = "Корректировка";
public static final String KORR_DESC = "Каждый из нас задумывается о такой штуке, как судьба\\. Что привело нас к" +
"сегодняшнему дню? Друзья, знакомые, парни и девушки\\. Все ли эти отношения образовались сами собой, или," +
"быть может, кто\\-то из твоих близких друзей всего лишь хорошо разыграл все карты несколько лет назад?";
public static final String LUNN_COVER = "AgACAgIAAxkBAAICH2KV6lrfNbsYfnqVDQwV1uhexKUGAALDuTEbgvKxSBEP75XimlVwAQADAgADeQADJAQ";
public static final String LUNN_NAME = "Лунные тени";
private static final String LUNN_DESC = "Общежитие при университете — особый период в жизни каждого человека\\." +
"Здесь происходит в основном много приятных событий, запоминающихся на всю жизнь\\. Однако судьбы трёх" +
"друзей это место однажды навсегда изменит\\. Им предстоит череда ночей, когда редко все оставались к " +
"утру живы\\. Что же делать в ситуации, когда врагом является твой спящий друг?";
public static final String ZVEZDA_COVER = "AgACAgIAAxkBAAICG2KV6b_hGJ0jk_yHtzUWmfXrs0K-AALBuTEbgvKxSE55vwxxNxcxAQADAgADeQADJAQ";
public static final String ZVEZDA_NAME = "Звезда";
private static final String ZVEZDA_DESC = "Детские мечты не всегда сбываются так, как вы того хотели\\. " +
"Кирили, обычный парень, которому предстоит испытать невероятные впечатления, когда он всё же сможет " +
"прикоснуться к своей мечте\\. Сможет ли он совладать с человеческими пороками и спасти Землю от уничтожения?";
public static final String PON_COVER = "AgACAgIAAxkBAAICI2KV6u5ALDMcSPP4WPsvdr5iBJ1hAALGuTEbgvKxSGlGhmGbA1qtAQADAgADeQADJAQ";
public static final String PON_NAME = "Понимания ноль";
private static final String PON_DESC = "Привет\\. Я тут рассказал неординарную историю нашего путешествия и " +
"немного о нашем мире\\. Представляете, у нас дружба между парнем и девушкой возможна\\. Причем на " +
"законодательном уровне\\. Мы начинаем обладать особыми силами, но это уже подробнее внутри\\. Возможно, " +
"ваша жизненная ситуация похожа на нашу, и вы являетесь таким другом противоположному себе полу, а?";
String BOOK_COVER;
String BOOK_NAME;
String BOOK_DESC;
@Override
public String getBotUsername() {
return "Magistrmate_bot";
}
@Override
public String getBotToken() {
return BotConfig.BOT_TOKEN;
}
@Override
public void onUpdateReceived(Update update) {
Message message = update.getMessage();
if (update.hasMessage()) {
if (message.getText().equals("/start")) {
createMessage(message, "Добро пожаловать " + message.getFrom().getFirstName() + "\\!\n" +
"Мы можем перейти сразу к книгам или пообщаться\\. Я пока в процессе познания вашего мира," +
" поэтому пишите и если не пойму, то выдам вам подсказки\\.");
} else if (update.getMessage().getText().toLowerCase(Locale.ROOT).contains("привет")) {
createMessage(message, "Дороу");
} else if (update.getMessage().getText().toLowerCase(Locale.ROOT).contains("книг") ||
update.getMessage().getText().toLowerCase(Locale.ROOT).contains("книж")) {
createMediaGroup(message);
createPhoto(update, message);
} else
createMessage(message, "Давайте вместе разберемся, чем я могу помочь");
} else if (update.hasCallbackQuery()) {
Message backMessage = update.getCallbackQuery().getMessage();
if (update.getCallbackQuery().getData().equals("NextBook") ||
update.getCallbackQuery().getData().equals("PreviousBook")) {
if (update.getCallbackQuery().getData().equals("NextBook")) {
if (backMessage.getCaption().contains(PZV_NAME)) {
whichBook(POD_COVER, POD_NAME, POD_DESC);
} else if (backMessage.getCaption().contains(POD_NAME)) {
whichBook(KORR_COVER, KORR_NAME, KORR_DESC);
} else if (backMessage.getCaption().contains(KORR_NAME)) {
whichBook(LUNN_COVER, LUNN_NAME, LUNN_DESC);
} else if (backMessage.getCaption().contains(LUNN_NAME)) {
whichBook(ZVEZDA_COVER, ZVEZDA_NAME, ZVEZDA_DESC);
} else if (backMessage.getCaption().contains(ZVEZDA_NAME)) {
whichBook(PON_COVER, PON_NAME, PON_DESC);
} else if (backMessage.getCaption().contains(PON_NAME)) {
whichBook(PZV_COVER, PZV_NAME, PZV_DESC);
}
} else if (update.getCallbackQuery().getData().equals("PreviousBook")) {
if (backMessage.getCaption().contains(PZV_NAME)) {
whichBook(PON_COVER, PON_NAME, PON_DESC);
} else if (backMessage.getCaption().contains(POD_NAME)) {
whichBook(PZV_COVER, PZV_NAME, PZV_DESC);
} else if (backMessage.getCaption().contains(KORR_NAME)) {
whichBook(POD_COVER, POD_NAME, POD_DESC);
} else if (backMessage.getCaption().contains(LUNN_NAME)) {
whichBook(KORR_COVER, KORR_NAME, KORR_DESC);
} else if (backMessage.getCaption().contains(ZVEZDA_NAME)) {
whichBook(LUNN_COVER, LUNN_NAME, LUNN_DESC);
} else if (backMessage.getCaption().contains(PON_NAME)) {
whichBook(ZVEZDA_COVER, ZVEZDA_NAME, ZVEZDA_DESC);
}
}
InputMedia cover = new InputMediaPhoto();
cover.setMedia(BOOK_COVER);
cover.setCaption("*" + BOOK_NAME + "*\n" + BOOK_DESC);
cover.setParseMode(ParseMode.MARKDOWNV2);
EditMessageMedia replacePhoto = new EditMessageMedia();
replacePhoto.setMedia(cover);
replacePhoto.setChatId(backMessage.getChatId().toString());
replacePhoto.setMessageId(Integer.valueOf(backMessage.getMessageId().toString()));
InlineKeyboardMarkup inlineKeyboard = new InlineKeyboardMarkup();
createFirstKeyboard(update, inlineKeyboard);
replacePhoto.setReplyMarkup(inlineKeyboard);
try {
execute(replacePhoto);
} catch (TelegramApiException e) {
e.printStackTrace();
}
} else if (update.getCallbackQuery().getData().equals("ExcerptBook")) {
System.out.println("EPUB");
System.out.println("FB2");
System.out.println("PDF");
System.out.println("Online");
System.out.println("Текст в картинках");
} else if (update.getCallbackQuery().getData().equals("ShopsBook")) {
EditMessageReplyMarkup keyboard = new EditMessageReplyMarkup();
keyboard.setChatId(backMessage.getChatId().toString());
keyboard.setMessageId(Integer.valueOf(backMessage.getMessageId().toString()));
InlineKeyboardMarkup inlineKeyboard = new InlineKeyboardMarkup();
InlineKeyboardButton RideroButton = new InlineKeyboardButton();
RideroButton.setText("Ridero");
RideroButton.setUrl(PZV_RIDERO);
InlineKeyboardButton LitResButton = new InlineKeyboardButton();
LitResButton.setText("ЛитРес");
LitResButton.setUrl(PZV_LITRES);
InlineKeyboardButton WildberriesButton = new InlineKeyboardButton();
WildberriesButton.setText("Wildberries");
WildberriesButton.setUrl(PZV_WILDBERRIES);
InlineKeyboardButton OzonButton = new InlineKeyboardButton();
OzonButton.setText("Ozon");
OzonButton.setUrl(PZV_OZON);
InlineKeyboardButton AliExpressButton = new InlineKeyboardButton();
AliExpressButton.setText("AliExpress");
AliExpressButton.setUrl(PZV_ALIEXPRESS);
InlineKeyboardButton AmazonButton = new InlineKeyboardButton();
AmazonButton.setText("Amazon");
AmazonButton.setUrl(PZV_AMAZON);
InlineKeyboardButton inlineKeyboardButton7 = new InlineKeyboardButton();
inlineKeyboardButton7.setText("Вернуться");
inlineKeyboardButton7.setCallbackData("BackShopsBook");
List<InlineKeyboardButton> row1 = new ArrayList<>();
row1.add(RideroButton);
List<InlineKeyboardButton> row2 = new ArrayList<>();
row2.add(LitResButton);
row2.add(WildberriesButton);
row2.add(OzonButton);
List<InlineKeyboardButton> row3 = new ArrayList<>();
row3.add(AliExpressButton);
row3.add(AmazonButton);
List<InlineKeyboardButton> row4 = new ArrayList<>();
row4.add(inlineKeyboardButton7);
List<List<InlineKeyboardButton>> rowList = new ArrayList<>();
rowList.add(row1);
rowList.add(row2);
rowList.add(row3);
rowList.add(row4);
inlineKeyboard.setKeyboard(rowList);
keyboard.setReplyMarkup(inlineKeyboard);
try {
execute(keyboard);
} catch (TelegramApiException e) {
e.printStackTrace();
}
} else if (update.getCallbackQuery().getData().equals("BackShopsBook")) {
EditMessageReplyMarkup backKeyboard = new EditMessageReplyMarkup();
backKeyboard.setChatId(backMessage.getChatId().toString());
backKeyboard.setMessageId(Integer.valueOf(backMessage.getMessageId().toString()));
InlineKeyboardMarkup inlineKeyboard = new InlineKeyboardMarkup();
createFirstKeyboard(update, inlineKeyboard);
backKeyboard.setReplyMarkup(inlineKeyboard);
try {
execute(backKeyboard);
} catch (TelegramApiException e) {
e.printStackTrace();
}
}
}
}
public void whichBook(String cover, String name, String describe) {
BOOK_COVER = cover;
BOOK_NAME = name;
BOOK_DESC = describe;
}
private void createMessage(Message message, String text) {
String user_first_name = message.getChat().getFirstName();
String user_last_name = message.getChat().getLastName();
String user_username = message.getChat().getUserName();
long user_id = message.getChat().getId();
String message_text = message.getText();
log(user_first_name, user_last_name, user_username, Long.toString(user_id), message_text, text);
SendMessage createMessage = new SendMessage();
createMessage.setChatId(message.getChatId().toString());
createMessage.setText(text);
createMessage.enableMarkdownV2(true);
if (text.equals("Давайте вместе разберемся, чем я могу помочь")) {
createKeyboard(createMessage);
}
try {
execute(createMessage);
} catch (TelegramApiException e) {
e.printStackTrace();
}
}
private void createKeyboard(SendMessage createMessage) {
ReplyKeyboardMarkup createKeyboard = new ReplyKeyboardMarkup();
List<KeyboardRow> keyboard = new ArrayList<>();
KeyboardRow row1 = new KeyboardRow();
row1.add("Книги");
row1.add("Аудиокниги");
keyboard.add(row1);
KeyboardRow row2 = new KeyboardRow();
row2.add("Контакты");
row2.add("Позвать оператора");
keyboard.add(row2);
createKeyboard.setKeyboard(keyboard);
createKeyboard.setResizeKeyboard(true);
createKeyboard.setOneTimeKeyboard(true);
createKeyboard.setInputFieldPlaceholder("Общение");
createKeyboard.setSelective(true); //https://core.telegram.org/bots/api#replykeyboardmarkup
createMessage.setReplyMarkup(createKeyboard);
}
private void createMediaGroup(Message message) {
List<InputMedia> media = new ArrayList<>();
InputMedia photo1 = new InputMediaPhoto();
photo1.setParseMode(ParseMode.MARKDOWNV2);
photo1.setMedia(PZV_COVER);
photo1.setCaption("*" + PZV_NAME + "*\n" + PZV_DESC);
InputMedia photo2 = new InputMediaPhoto();
photo2.setParseMode(ParseMode.MARKDOWNV2);
photo2.setMedia(KORR_COVER);
photo2.setCaption("*" + KORR_NAME + "*\n" + KORR_DESC);
InputMedia photo3 = new InputMediaPhoto();
photo3.setParseMode(ParseMode.MARKDOWNV2);
photo3.setMedia(LUNN_COVER);
photo3.setCaption("*" + LUNN_NAME + "*\n" + LUNN_DESC);
InputMedia photo4 = new InputMediaPhoto();
photo4.setParseMode(ParseMode.MARKDOWNV2);
photo4.setMedia(ZVEZDA_COVER);
photo4.setCaption("*" + ZVEZDA_NAME + "*\n" + ZVEZDA_DESC);
InputMedia photo5 = new InputMediaPhoto();
photo5.setParseMode(ParseMode.MARKDOWNV2);
photo5.setMedia(PON_COVER);
photo5.setCaption("*" + PON_NAME + "*\n" + PON_DESC);
media.add(photo1);
media.add(photo2);
media.add(photo3);
media.add(photo4);
media.add(photo5);
SendMediaGroup mediaGroup = new SendMediaGroup();
mediaGroup.setChatId(message.getChatId().toString());
mediaGroup.setMedias(media);
try {
execute(mediaGroup);
} catch (TelegramApiException e) {
e.printStackTrace();
}
}
private void createPhoto(Update update, Message message) {
SendPhoto createPhoto = new SendPhoto();
createPhoto.setParseMode(ParseMode.MARKDOWNV2);
createPhoto.setChatId(message.getChatId().toString());
createPhoto.setPhoto(new InputFile(PZV_COVER));
createPhoto.setCaption("*" + PZV_NAME + "*\n" + PZV_DESC);
InlineKeyboardMarkup inlineKeyboard = new InlineKeyboardMarkup();
createFirstKeyboard(update, inlineKeyboard);
createPhoto.setReplyMarkup(inlineKeyboard);
try {
execute(createPhoto);
} catch (TelegramApiException e) {
e.printStackTrace();
}
}
public void createFirstKeyboard(Update update, InlineKeyboardMarkup inlineKeyboard) {
InlineKeyboardButton ShopsBookButton = new InlineKeyboardButton();
ShopsBookButton.setText("Книга в магазинах");
ShopsBookButton.setCallbackData("ShopsBook");
InlineKeyboardButton NextBookButton = new InlineKeyboardButton();
NextBookButton.setText("Следующая книга");
NextBookButton.setCallbackData("NextBook");
InlineKeyboardButton ExcerptBookButton = new InlineKeyboardButton();
ExcerptBookButton.setText("Отрывок из книги");
ExcerptBookButton.setCallbackData("ExcerptBook");
List<InlineKeyboardButton> row1 = new ArrayList<>();
row1.add(ShopsBookButton);
List<InlineKeyboardButton> row2 = new ArrayList<>();
if (update.getCallbackQuery() != null) {
InlineKeyboardButton PreviousBookButton = new InlineKeyboardButton();
PreviousBookButton.setText("Предыдущая книга");
PreviousBookButton.setCallbackData("PreviousBook");
row2.add(PreviousBookButton);
}
row2.add(NextBookButton);
List<InlineKeyboardButton> row3 = new ArrayList<>();
row3.add(ExcerptBookButton);
List<List<InlineKeyboardButton>> rowList = new ArrayList<>();
rowList.add(row1);
rowList.add(row2);
rowList.add(row3);
inlineKeyboard.setKeyboard(rowList);
}