diff options
Diffstat (limited to 'src/main/java/files')
-rw-r--r-- | src/main/java/files/Anime.java | 39 | ||||
-rw-r--r-- | src/main/java/files/Bot.java | 161 | ||||
-rw-r--r-- | src/main/java/files/MyKeyboard.java | 25 | ||||
-rw-r--r-- | src/main/java/files/Parser.java | 83 | ||||
-rw-r--r-- | src/main/java/files/UserCallbackQuery.java | 92 |
5 files changed, 302 insertions, 98 deletions
diff --git a/src/main/java/files/Anime.java b/src/main/java/files/Anime.java index db2fcbf..9dae88b 100644 --- a/src/main/java/files/Anime.java +++ b/src/main/java/files/Anime.java @@ -6,14 +6,19 @@ public class Anime { private final String[] genres; private final String year; private final String image; + private final String url; + private static Anime[] list; private static byte indexOfAnime = 0; + private static String searchedAnime; + private static boolean isSearchingAnAnime; - public Anime(String name, String description, String[] genres, String year, String image) { + public Anime(String name, String description, String[] genres, String year, String image, String url) { this.name = name; this.description = description; this.genres = genres; this.year = year; this.image = image; + this.url = url; } public String showInfo() { @@ -26,12 +31,16 @@ public class Anime { return image; } + public String getUrl() { + return url; + } + public static byte getIndexOfAnime() { return indexOfAnime; } - public static void setIndexOfAnime(byte number) { - indexOfAnime = number; + public static void setIndexOfAnime(byte indexOfAnime) { + Anime.indexOfAnime = indexOfAnime; } public static void decreaseIndexOfAnime() { @@ -41,4 +50,28 @@ public class Anime { public static void increaseIndexOfAnime() { indexOfAnime++; } + + public static String getSearchedAnime() { + return searchedAnime; + } + + public static void setSearchedAnime(String searchedAnime) { + Anime.searchedAnime = searchedAnime.replace(' ', '+'); + } + + public static boolean getIsSearchingAnAnime() { + return isSearchingAnAnime; + } + + public static void setIsSearchingAnAnime(boolean isSearchingAnAnime) { + Anime.isSearchingAnAnime = isSearchingAnAnime; + } + + public static Anime[] getList() { + return list; + } + + public static void setList(Anime[] list) { + Anime.list = list; + } } diff --git a/src/main/java/files/Bot.java b/src/main/java/files/Bot.java index 0a7975c..a533ebd 100644 --- a/src/main/java/files/Bot.java +++ b/src/main/java/files/Bot.java @@ -4,15 +4,8 @@ import com.pengrad.telegrambot.TelegramBot; import com.pengrad.telegrambot.UpdatesListener; import com.pengrad.telegrambot.model.CallbackQuery; import com.pengrad.telegrambot.model.Update; -import com.pengrad.telegrambot.model.User; -import com.pengrad.telegrambot.model.request.InlineKeyboardButton; -import com.pengrad.telegrambot.model.request.InlineKeyboardMarkup; -import com.pengrad.telegrambot.model.request.Keyboard; -import com.pengrad.telegrambot.model.request.ReplyKeyboardMarkup; -import com.pengrad.telegrambot.request.DeleteMessage; import com.pengrad.telegrambot.request.SendMessage; import com.pengrad.telegrambot.request.SendPhoto; -import com.pengrad.telegrambot.response.BaseResponse; import java.io.FileInputStream; import java.io.IOException; @@ -29,120 +22,104 @@ public class Bot { telegramBot.setUpdatesListener(updates -> { updates.forEach(update -> { - if (update.callbackQuery() != null) { - CallbackQuery callbackQuery = update.callbackQuery(); - String data = callbackQuery.data(); - User user = callbackQuery.from(); - int messageId = callbackQuery.message().messageId(); - long chatId = callbackQuery.message().chat().id(); - - if (data.equals("previousRecentlyAddedAnime")) { - if (Anime.getIndexOfAnime() == 0) { - Anime.setIndexOfAnime((byte) 19); - } else { - Anime.decreaseIndexOfAnime(); - } - Bot.showRecentlyAddedAnimeCallBackQuery(telegramBot, callbackQuery, Anime.getIndexOfAnime()); - } - if (data.equals("nextRecentlyAddedAnime")) { - if (Anime.getIndexOfAnime() == 19) { - Anime.setIndexOfAnime((byte) 0); - } else { - Anime.increaseIndexOfAnime(); - } - Bot.showRecentlyAddedAnimeCallBackQuery(telegramBot, callbackQuery, Anime.getIndexOfAnime()); - } - - if (data.equals("previousRecentlyReleasedAnime")) { - if (Anime.getIndexOfAnime() == 0) { - Anime.setIndexOfAnime((byte) 19); - } else { - Anime.decreaseIndexOfAnime(); - } - Bot.showRecentlyReleasedAnimeCallBackQuery(telegramBot, callbackQuery, Anime.getIndexOfAnime()); - } - if (data.equals("nextRecentlyReleasedAnime")) { - if (Anime.getIndexOfAnime() == 19) { - Anime.setIndexOfAnime((byte) 0); - } else { - Anime.increaseIndexOfAnime(); - } - Bot.showRecentlyReleasedAnimeCallBackQuery(telegramBot, callbackQuery, Anime.getIndexOfAnime()); - } - - DeleteMessage deleteMessage = new DeleteMessage(chatId, messageId); - BaseResponse response = telegramBot.execute(deleteMessage); + if (UserCallbackQuery.checkIfNotNull(update.callbackQuery())) { + UserCallbackQuery.setInformation(update.callbackQuery()); + UserCallbackQuery.execute(telegramBot); + } else if (update.message() != null && update.message().text().equals("Поиск аниме")) { + Anime.setIndexOfAnime((byte) 0); + Anime.setIsSearchingAnAnime(true); + telegramBot.execute(new SendMessage(update.message().chat().id(), "Введи название аниме, которое хочешь найти...")); } else if (update.message() != null && update.message().text().equals("Недавно добавленные аниме")) { Anime.setIndexOfAnime((byte) 0); - Bot.showRecentlyAddedAnime(telegramBot, update, Anime.getIndexOfAnime()); + Anime.setIsSearchingAnAnime(false); + try { + Bot.showRecentlyAddedAnime(telegramBot, update, Anime.getIndexOfAnime()); + } catch (IOException e) { + e.printStackTrace(); + } } else if (update.message() != null && update.message().text().equals("Новинки аниме")) { Anime.setIndexOfAnime((byte) 0); - Bot.showRecentlyReleasedAnime(telegramBot, update, Anime.getIndexOfAnime()); + Anime.setIsSearchingAnAnime(false); + try { + Bot.showRecentlyReleasedAnime(telegramBot, update, Anime.getIndexOfAnime()); + } catch (IOException e) { + e.printStackTrace(); + } } else if (update.message() != null && update.message().text().equals("/start")) { // DataBase.saveUser(update); - telegramBot.execute(new SendMessage(update.message().chat().id(), ("Приветики " + update.message().from().firstName() + ", меня звать AniMarfo!\nЯ помогу тебе найти аниме, скачать его или же смотреть прямо тут.")).replyMarkup(getMainKeyboard())); + Anime.setIsSearchingAnAnime(false); + telegramBot.execute(new SendMessage(update.message().chat().id(), ("Приветики " + update.message().from().firstName() + ", меня звать AniMarfo!\nЯ помогу тебе найти аниме, скачать его или же смотреть прямо тут.")).replyMarkup(MyKeyboard.getMain())); } else if (update.message() != null) { - telegramBot.execute(new SendMessage(update.message().chat().id(), "Прости, но я тебя не понимаю...\nВоспользуйся командами на твоей клавлиатуре!").replyMarkup(getMainKeyboard())); + if (Anime.getIsSearchingAnAnime()) { + Anime.setSearchedAnime(update.message().text()); + Anime.setIsSearchingAnAnime(false); + try { + Bot.showSearchedAnime(telegramBot, update, Anime.getIndexOfAnime(), Anime.getSearchedAnime()); + } catch (IOException e) { + e.printStackTrace(); + } + } else { + telegramBot.execute(new SendMessage(update.message().chat().id(), "Прости, но я тебя не понимаю...\nВоспользуйся командами на твоей клавлиатуре!").replyMarkup(MyKeyboard.getMain())); + } } }); return UpdatesListener.CONFIRMED_UPDATES_ALL; }); } - public static Keyboard getMainKeyboard() { - return new ReplyKeyboardMarkup( - new String[]{"Поиск аниме"}, - new String[]{"Недавно добавленные аниме"}, - new String[]{"Новинки аниме"}, - new String[]{"Случайное аниме"}) - .oneTimeKeyboard(true) - .resizeKeyboard(true) - .selective(true); - } - - public static Keyboard getCarouselKeyboard(String typeOfAnime) { - return new InlineKeyboardMarkup( - new InlineKeyboardButton("<").callbackData("previous" + typeOfAnime), - new InlineKeyboardButton(">").callbackData("next" + typeOfAnime)); - } - - public static void showRecentlyAddedAnime(TelegramBot telegramBot, Update update, byte index) { - Anime[] anime = new Anime[20]; + private static void showAnimeAtMainMenu(TelegramBot telegramBot, Update update, byte index, String url, String typeOfAnime) throws IOException { + Anime[] anime = new Anime[Parser.getAnimeAtSearchSize(url)]; try { - anime = Parser.getAnimeAtMainMenu("https://animego.org/anime?sort=a.createdAt&direction=desc"); + anime = Parser.getAnimeAtMainMenu(url); } catch (IOException e) { e.printStackTrace(); } - telegramBot.execute(new SendPhoto(update.message().chat().id(), anime[index].getImage()).caption(anime[index].showInfo()).replyMarkup(Bot.getCarouselKeyboard("RecentlyAddedAnime"))); + Anime.setList(anime); + telegramBot.execute(new SendPhoto(update.message().chat().id(), anime[index].getImage()).caption(anime[index].showInfo()).replyMarkup(MyKeyboard.getCarousel(typeOfAnime))); } - public static void showRecentlyAddedAnimeCallBackQuery(TelegramBot telegramBot, CallbackQuery callbackQuery, byte index) { - Anime[] anime = new Anime[20]; - try { - anime = Parser.getAnimeAtMainMenu("https://animego.org/anime?sort=a.createdAt&direction=desc"); - } catch (IOException e) { - e.printStackTrace(); + private static void showAnimeAtMainMenuCallBackQuery(TelegramBot telegramBot, CallbackQuery callbackQuery, byte index, String typeOfAnime, Anime[] list) { + telegramBot.execute(new SendPhoto(callbackQuery.message().chat().id(), list[index].getImage()).caption(list[index].showInfo()).replyMarkup(MyKeyboard.getCarousel(typeOfAnime))); + } + + public static void showSearchedAnime(TelegramBot telegramBot, Update update, byte index, String searchedAnime) throws IOException { + if (Parser.getAnimeAtSearchSize("https://animego.org/search/all?q=" + searchedAnime) > 0) { + Anime[] anime = new Anime[Parser.getAnimeAtSearchSize("https://animego.org/search/all?q=" + searchedAnime)]; + try { + anime = Parser.getAnimeAtSearch("https://animego.org/search/all?q=" + searchedAnime); + } catch (IOException e) { + e.printStackTrace(); + } + telegramBot.execute(new SendPhoto(update.message().chat().id(), anime[index].getImage()).caption(anime[index].showInfo()).replyMarkup(MyKeyboard.getCarousel("SearchedAnime"))); + } else { + telegramBot.execute(new SendMessage(update.message().chat().id(), "Прости, но я не смог найти аниме с таким названием...\nДавай поищем другое аниме!")); + Anime.setIsSearchingAnAnime(true); } - telegramBot.execute(new SendPhoto(callbackQuery.message().chat().id(), anime[index].getImage()).caption(anime[index].showInfo()).replyMarkup(Bot.getCarouselKeyboard("RecentlyAddedAnime"))); } - public static void showRecentlyReleasedAnime(TelegramBot telegramBot, Update update, byte index) { + public static void showSearchedAnimeCallBackQuery(TelegramBot telegramBot, CallbackQuery callbackQuery, byte index, String searchedAnime) { Anime[] anime = new Anime[20]; try { - anime = Parser.getAnimeAtMainMenu("https://animego.org/anime?sort=a.startDate&direction=desc"); + anime = Parser.getAnimeAtSearch("https://animego.org/search/all?q=" + searchedAnime); } catch (IOException e) { e.printStackTrace(); } - telegramBot.execute(new SendPhoto(update.message().chat().id(), anime[index].getImage()).caption(anime[index].showInfo()).replyMarkup(Bot.getCarouselKeyboard("RecentlyReleasedAnime"))); + telegramBot.execute(new SendPhoto(callbackQuery.message().chat().id(), anime[index].getImage()).caption(anime[index].showInfo()).replyMarkup(MyKeyboard.getCarousel("SearchedAnime"))); + } + + public static void showRecentlyAddedAnime(TelegramBot telegramBot, Update update, byte index) throws IOException { + showAnimeAtMainMenu(telegramBot, update, index, "https://animego.org/anime?sort=a.createdAt&direction=desc", "RecentlyAddedAnime"); + } + + public static void showRecentlyAddedAnimeCallBackQuery(TelegramBot telegramBot, CallbackQuery callbackQuery, byte index) { + showAnimeAtMainMenuCallBackQuery(telegramBot, callbackQuery, index,"RecentlyAddedAnime", Anime.getList()); + } + + public static void showRecentlyReleasedAnime(TelegramBot telegramBot, Update update, byte index) throws IOException { + showAnimeAtMainMenu(telegramBot, update, index, "https://animego.org/anime?sort=a.startDate&direction=desc", "RecentlyReleasedAnime"); } public static void showRecentlyReleasedAnimeCallBackQuery(TelegramBot telegramBot, CallbackQuery callbackQuery, byte index) { - Anime[] anime = new Anime[20]; - try { - anime = Parser.getAnimeAtMainMenu("https://animego.org/anime?sort=a.startDate&direction=desc"); - } catch (IOException e) { - e.printStackTrace(); - } - telegramBot.execute(new SendPhoto(callbackQuery.message().chat().id(), anime[index].getImage()).caption(anime[index].showInfo()).replyMarkup(Bot.getCarouselKeyboard("RecentlyReleasedAnime"))); + showAnimeAtMainMenuCallBackQuery(telegramBot, callbackQuery, index,"RecentlyReleasedAnime", Anime.getList()); } } diff --git a/src/main/java/files/MyKeyboard.java b/src/main/java/files/MyKeyboard.java new file mode 100644 index 0000000..8beb6e2 --- /dev/null +++ b/src/main/java/files/MyKeyboard.java @@ -0,0 +1,25 @@ +package files; + +import com.pengrad.telegrambot.model.request.Keyboard; +import com.pengrad.telegrambot.model.request.InlineKeyboardButton; +import com.pengrad.telegrambot.model.request.InlineKeyboardMarkup; +import com.pengrad.telegrambot.model.request.ReplyKeyboardMarkup; + +public class MyKeyboard { + public static Keyboard getMain() { + return new ReplyKeyboardMarkup( + new String[]{"Поиск аниме"}, + new String[]{"Недавно добавленные аниме"}, + new String[]{"Новинки аниме"}, + new String[]{"Случайное аниме"}) + .oneTimeKeyboard(true) + .resizeKeyboard(true) + .selective(true); + } + + public static Keyboard getCarousel(String typeOfAnime) { + return new InlineKeyboardMarkup( + new InlineKeyboardButton("<").callbackData("previous" + typeOfAnime), + new InlineKeyboardButton(">").callbackData("next" + typeOfAnime)); + } +} diff --git a/src/main/java/files/Parser.java b/src/main/java/files/Parser.java index 048b147..09dceea 100644 --- a/src/main/java/files/Parser.java +++ b/src/main/java/files/Parser.java @@ -20,9 +20,10 @@ public class Parser { assert animeList != null; Elements namesTemp = animeList.select("div[class=h5 font-weight-normal mb-1]").select("a"); Elements descriptionsTemp = animeList.select("div[class=description d-none d-sm-block]"); - Elements yearsTemp = animeList.select("span[class=anime-year mb-2]").select("a[class=text-link-gray text-underline]"); + Elements yearsTemp = animeList.select("span[class=anime-year mb-2]").select("a"); Elements genresTemp = animeList.select("span[class=anime-genre d-none d-sm-inline]").select("a[class=mb-2 text-link-gray text-underline]"); Elements imagesTemp = animeList.select("div[class=anime-list-lazy lazy]"); + Elements urlsTemp = animeList.select("div[class=h5 font-weight-normal mb-1]").select("a"); byte countOfAnime = (byte) namesTemp.size(); @@ -51,11 +52,87 @@ public class Parser { images.add(String.valueOf(dst)); } + ArrayList<String> urls = new ArrayList<>(); + for (Element url : urlsTemp) { + String text = url.toString(); + int start = text.indexOf("\"") + 1; + int end = text.indexOf(">") - 1; + char[] dst = new char[end - start]; + text.getChars(start, end, dst, 0); + urls.add(String.valueOf(dst)); + } + + Anime[] anime = new Anime[countOfAnime]; + for (int i = 0; i < countOfAnime; i++) { + anime[i] = new Anime(names.get(i), descriptions.get(i), null, years.get(i), images.get(i), urls.get(i)); + } + + return anime; + } + + public static Anime[] getAnimeAtSearch(String page) throws IOException { + Element animeList = Parser.getPage(page).select("div[class=animes-grid position-relative]").first(); + assert animeList != null; + Elements namesTemp = animeList.select("div[class=h5 font-weight-normal mb-2 card-title text-truncate]").select("a"); + Elements descriptionsTemp = animeList.select("div[class=anime-small-description read-more-container]"); + Elements yearsTemp = animeList.select("span[class=anime-year]").select("a"); + Elements imagesTemp = animeList.select("div[class=anime-grid-lazy lazy]"); + Elements urlsTemp = animeList.select("div[class=h5 font-weight-normal mb-2 card-title text-truncate]").select("a"); + + byte countOfAnime = (byte) namesTemp.size(); + + ArrayList<String> names = new ArrayList<>(); + for (Element name : namesTemp) { + names.add(Jsoup.parse(String.valueOf(name)).text()); + } + + ArrayList<String> descriptions = new ArrayList<>(); + for (Element description : descriptionsTemp) { + descriptions.add(Jsoup.parse(String.valueOf(description)).text()); + } + + ArrayList<String> years = new ArrayList<>(); + for (Element year : yearsTemp) { + years.add(Jsoup.parse(String.valueOf(year)).text()); + } + + ArrayList<String> images = new ArrayList<>(); + for (Element image : imagesTemp) { + String text = image.toString(); + int start = text.indexOf("data-original=") + 15; + int end = text.indexOf(">") - 1; + char[] dst = new char[end - start]; + text.getChars(start, end, dst, 0); + images.add(String.valueOf(dst)); + } + + ArrayList<String> urls = new ArrayList<>(); + for (Element url :urlsTemp) { + String text = url.toString(); + int start = text.indexOf("=\"") + 2; + int end = text.indexOf("\" title") - 1; + char[] dst = new char[end - start]; + text.getChars(start, end, dst, 0); + urls.add(String.valueOf(dst)); + } + Anime[] anime = new Anime[countOfAnime]; for (int i = 0; i < countOfAnime; i++) { - anime[i] = new Anime(names.get(i), descriptions.get(i), null, years.get(i), images.get(i)); + anime[i] = new Anime(names.get(i), null, null, years.get(i), images.get(i), urls.get(i)); } return anime; } -} + + public static byte getAnimeAtSearchSize(String page) throws IOException { + Element animeList = Parser.getPage(page).select("div[class=animes-grid position-relative]").first(); + assert animeList != null; + + if (animeList == null) return 0; + + Elements namesTemp = animeList.select("div[class=h5 font-weight-normal mb-2 card-title text-truncate]").select("a"); + byte countOfAnime = (byte) namesTemp.size(); + return countOfAnime; + } + + }
\ No newline at end of file diff --git a/src/main/java/files/UserCallbackQuery.java b/src/main/java/files/UserCallbackQuery.java new file mode 100644 index 0000000..92f2391 --- /dev/null +++ b/src/main/java/files/UserCallbackQuery.java @@ -0,0 +1,92 @@ +package files; + +import com.pengrad.telegrambot.TelegramBot; +import com.pengrad.telegrambot.model.CallbackQuery; +import com.pengrad.telegrambot.model.User; +import com.pengrad.telegrambot.request.DeleteMessage; + +import java.io.IOException; + +public class UserCallbackQuery extends com.pengrad.telegrambot.model.CallbackQuery { + private static CallbackQuery callbackQuery; + private static String data; + private static User user; + private static int messageId; + private static long chatId; + + public static void setInformation(CallbackQuery callbackQuery) { + UserCallbackQuery.callbackQuery = callbackQuery; + UserCallbackQuery.data = callbackQuery.data(); + UserCallbackQuery.user = callbackQuery.from(); + UserCallbackQuery.messageId = callbackQuery.message().messageId(); + UserCallbackQuery.chatId = callbackQuery.message().chat().id(); + } + + public static boolean checkIfNotNull(CallbackQuery callbackQuery) { + return (callbackQuery != null); + } + + public static void execute(TelegramBot telegramBot) { + if (data.equals("previousRecentlyAddedAnime")) { + if (Anime.getIndexOfAnime() == 0) { + Anime.setIndexOfAnime((byte) 19); + } else { + Anime.decreaseIndexOfAnime(); + } + Bot.showRecentlyAddedAnimeCallBackQuery(telegramBot, callbackQuery, Anime.getIndexOfAnime()); + } + if (data.equals("nextRecentlyAddedAnime")) { + if (Anime.getIndexOfAnime() == 19) { + Anime.setIndexOfAnime((byte) 0); + } else { + Anime.increaseIndexOfAnime(); + } + Bot.showRecentlyAddedAnimeCallBackQuery(telegramBot, callbackQuery, Anime.getIndexOfAnime()); + } + + if (data.equals("previousRecentlyReleasedAnime")) { + if (Anime.getIndexOfAnime() == 0) { + Anime.setIndexOfAnime((byte) 19); + } else { + Anime.decreaseIndexOfAnime(); + } + Bot.showRecentlyReleasedAnimeCallBackQuery(telegramBot, callbackQuery, Anime.getIndexOfAnime()); + } + if (data.equals("nextRecentlyReleasedAnime")) { + if (Anime.getIndexOfAnime() == 19) { + Anime.setIndexOfAnime((byte) 0); + } else { + Anime.increaseIndexOfAnime(); + } + Bot.showRecentlyReleasedAnimeCallBackQuery(telegramBot, callbackQuery, Anime.getIndexOfAnime()); + } + + if (data.equals("previousSearchedAnime")) { + if (Anime.getIndexOfAnime() == 0) { + try { + Anime.setIndexOfAnime((byte) ((Parser.getAnimeAtSearchSize("https://animego.org/search/all?q=" + Anime.getSearchedAnime())) - 1)); + } catch (IOException e) { + e.printStackTrace(); + } + } else { + Anime.decreaseIndexOfAnime(); + } + Bot.showSearchedAnimeCallBackQuery(telegramBot, callbackQuery, Anime.getIndexOfAnime(), Anime.getSearchedAnime()); + } + if (data.equals("nextSearchedAnime")) { + try { + if (Anime.getIndexOfAnime() == Parser.getAnimeAtSearchSize("https://animego.org/search/all?q=" + Anime.getSearchedAnime()) - 1) { + Anime.setIndexOfAnime((byte) 0); + } else { + Anime.increaseIndexOfAnime(); + } + } catch (IOException e) { + e.printStackTrace(); + } + Bot.showSearchedAnimeCallBackQuery(telegramBot, callbackQuery, Anime.getIndexOfAnime(), Anime.getSearchedAnime()); + } + + DeleteMessage deleteMessage = new DeleteMessage(chatId, messageId); + telegramBot.execute(deleteMessage); + } +} |