diff options
Diffstat (limited to 'src/main')
-rw-r--r-- | src/main/java/files/Anime.java | 57 | ||||
-rw-r--r-- | src/main/java/files/Bot.java | 63 | ||||
-rw-r--r-- | src/main/java/files/Database.java | 41 | ||||
-rw-r--r-- | src/main/java/files/MyKeyboard.java | 15 | ||||
-rw-r--r-- | src/main/java/files/Parser.java | 142 | ||||
-rw-r--r-- | src/main/java/files/TelegramUser.java | 69 | ||||
-rw-r--r-- | src/main/java/files/UserCallbackQuery.java | 121 | ||||
-rw-r--r-- | src/main/java/files/UserMessage.java | 107 |
8 files changed, 390 insertions, 225 deletions
diff --git a/src/main/java/files/Anime.java b/src/main/java/files/Anime.java index 4f60149..f6cccff 100644 --- a/src/main/java/files/Anime.java +++ b/src/main/java/files/Anime.java @@ -3,19 +3,21 @@ package files; public class Anime { private final String name; private final String description; - private final String[] genres; + private final String genres; private final String year; private String series; private final String rating; public final String image; private final String url; + public static String dub; + public static String typeOfAnime; public static Anime[] list; public static byte indexOfAnime = 0; public static String searchedAnime; - public static byte searchedAnimeSize; - public static boolean isSearchingAnAnime; + public static byte size; + public static boolean isSearching; - public Anime(String name, String description, String[] genres, String year, String rating, String image, String url) { + public Anime(String name, String description, String genres, String year, String rating, String image, String url) { this.name = name; this.description = description; this.genres = genres; @@ -25,7 +27,7 @@ public class Anime { this.url = url; } - public Anime(String name, String description, String[] genres, String year, String series, String rating, String image, String url) { + public Anime(String name, String description, String genres, String year, String series, String rating, String image, String url) { this.name = name; this.description = description; this.genres = genres; @@ -37,32 +39,35 @@ public class Anime { } public String showInfo() { - return "<b>Название:</b> " + this.name + System.lineSeparator() + - getYear() + - getSeries() + - "<b>Рейтинг:</b> " + this.rating + " / 10" + System.lineSeparator() + - "<b>Описание:</b> " + this.description; - } - - public String showInfo(String dub) { - return "<b>Название:</b> " + this.name + System.lineSeparator() + - getYear() + - getSeries() + - "<b>Рейтинг:</b> " + this.rating + " / 10" + System.lineSeparator() + - "<b>Озвучка:</b> " + dub + System.lineSeparator() + - "<b>Описание:</b> " + this.description; + return getName() + getYear() + getGenres() + getSeries() + getRating() + getDub() + getDescription(); } public String getName() { - return name; + return (name != null) ? ("<b>Название:</b> " + this.name + System.lineSeparator()) : ""; } public String getYear() { - return (year != null) ? ("<b>Год выхода:</b> " + this.year + System.lineSeparator()) : ""; + return (year != null) ? ("<b>Год:</b> " + this.year + System.lineSeparator()) : ""; + } + + public String getGenres() { + return (genres != null) ? ("<b>Жанр:</b> " + this.genres + System.lineSeparator()) : ""; } public String getSeries() { - return (series != null) ? ("<b>Всего серий:</b> " + this.series + System.lineSeparator()) : ""; + return (series != null) ? ("<b>Серий:</b> " + this.series + System.lineSeparator()) : ""; + } + + public String getRating() { + return (rating != null) ? ("<b>Рейтинг:</b> " + this.rating + System.lineSeparator()) : ""; + } + + public String getDub() { + return (dub != null) ? ("<b>Озвучка:</b> " + dub + System.lineSeparator()) : ""; + } + + public String getDescription() { + return (description != null) ? ("<b>Описание:</b> " + description + System.lineSeparator()) : ""; } public String getImage() { @@ -89,14 +94,6 @@ public class Anime { Anime.searchedAnime = searchedAnime.replace(' ', '+'); } - public static void setIsSearchingAnAnime(boolean isSearchingAnAnime) { - Anime.isSearchingAnAnime = isSearchingAnAnime; - } - - public static void setSearchedAnimeSize(byte searchedAnimeSize) { - Anime.searchedAnimeSize = searchedAnimeSize; - } - 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 c1cff05..6c7a521 100644 --- a/src/main/java/files/Bot.java +++ b/src/main/java/files/Bot.java @@ -2,35 +2,40 @@ package files; import com.pengrad.telegrambot.TelegramBot; import com.pengrad.telegrambot.UpdatesListener; -import com.pengrad.telegrambot.model.CallbackQuery; +import com.pengrad.telegrambot.model.User; import com.pengrad.telegrambot.model.request.ParseMode; import com.pengrad.telegrambot.request.SendMessage; import com.pengrad.telegrambot.request.SendPhoto; -import java.io.*; +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.text.SimpleDateFormat; import java.util.Properties; -// TODO: 7/25/21 Добавить поиск Аниме OVA, аниме по жанру, Дорамы, случайное аниме +// TODO: 7/25/21 Добавить Аниме OVA, аниме по жанру, Дорамы, случайное аниме public class Bot { + public final static Properties PROPERTIES = loadProperties(new File("app.properties")); + public final static TelegramBot TELEGRAM_BOT = new TelegramBot(PROPERTIES.getProperty("TELEGRAM_TOKEN")); + public static TelegramUser telegramUser = new TelegramUser(); - public static Properties properties = loadProperties(new File("app.properties")); - public static TelegramBot telegramBot = new TelegramBot(properties.getProperty("TELEGRAM_TOKEN")); - public static FileWriter log; - - public static void main(String[] args) throws IOException { - log = new FileWriter("log.txt", false); - - telegramBot.setUpdatesListener(updates -> { + public static void main(String[] args) { + TELEGRAM_BOT.setUpdatesListener(updates -> { updates.forEach(update -> { - if (UserCallbackQuery.checkIfNotNull(update.callbackQuery())) { + if (update.callbackQuery() != null) { try { UserCallbackQuery.execute(update.callbackQuery()); } catch (IOException e) { e.printStackTrace(); } } - if (UserMessage.checkIfNotNull(update.message())) { + if (update.message() != null) { + User user = update.message().from(); + SimpleDateFormat simpleDateFormat = new java.text.SimpleDateFormat("dd.MM.yyyy HH:mm:ss z"); + simpleDateFormat.setTimeZone(java.util.TimeZone.getTimeZone("GMT+5")); + String formattedDate = simpleDateFormat.format(new java.util.Date(update.message().date() * 1000L)); + telegramUser = new TelegramUser(user.id(), user.isBot(), user.firstName(), user.lastName(), user.username(), formattedDate); try { UserMessage.execute(update.message()); } catch (IOException e) { @@ -52,43 +57,41 @@ public class Bot { return properties; } - public static void sendAnimeAtMainMenu(String url, String typeOfAnime) { + public static void sendAnime(String url) { Anime[] anime = new Anime[28]; byte index = Anime.indexOfAnime; try { - anime = Parse.getAnimeAtMainMenu(url, typeOfAnime); + anime = Parser.getAnime(url); } catch (IOException e) { e.printStackTrace(); } Anime.setList(anime); - telegramBot.execute(new SendPhoto(UserMessage.chatId, anime[index].getImage()).caption(anime[index].showInfo()).parseMode(ParseMode.HTML).replyMarkup(MyKeyboard.getCarousel(typeOfAnime))); + TELEGRAM_BOT.execute(new SendPhoto(UserMessage.chatId, anime[index].getImage()).caption(anime[index].showInfo()).parseMode(ParseMode.HTML).replyMarkup(MyKeyboard.getCarousel())); } - public static void sendAnimeAtMainMenuByCallBackQuery(String typeOfAnime) { + public static void sendAnimeByCallBackQuery() { Anime[] anime = Anime.list; byte index = Anime.indexOfAnime; - telegramBot.execute(new SendPhoto(UserCallbackQuery.chatId, anime[index].getImage()).caption(anime[index].showInfo()).parseMode(ParseMode.HTML).replyMarkup(MyKeyboard.getCarousel(typeOfAnime))); + TELEGRAM_BOT.execute(new SendPhoto(UserCallbackQuery.chatId, anime[index].getImage()).caption(anime[index].showInfo()).parseMode(ParseMode.HTML).replyMarkup(MyKeyboard.getCarousel())); } - public static void sendSearchedAnime(byte index, String searchedAnime) throws IOException { - byte animeAtSearchSize = Parse.getAnimeAtSearchSize("https://animego.org/search/all?q=" + searchedAnime); + public static void sendSearchedAnime() throws IOException { + String searchedAnime = Anime.searchedAnime; + byte index = Anime.indexOfAnime; + byte animeAtSearchSize = Parser.getSizeOfSearchedAnime("https://anime.anidub.life/?do=search&mode=advanced&subaction=search&titleonly=3&story=" + searchedAnime); if (animeAtSearchSize > 0) { - Anime[] anime = new Anime[Parse.getAnimeAtSearchSize("https://animego.org/search/all?q=" + searchedAnime)]; + Anime[] anime = new Anime[animeAtSearchSize]; try { - anime = Parse.getAnimeAtSearch("https://animego.org/search/all?q=" + searchedAnime); + anime = Parser.getAnime("https://anime.anidub.life/?do=search&mode=advanced&subaction=search&titleonly=3&story=" + searchedAnime); } catch (IOException e) { e.printStackTrace(); } - Anime.setSearchedAnimeSize(animeAtSearchSize); + Anime.size = animeAtSearchSize; Anime.setList(anime); - telegramBot.execute(new SendPhoto(UserMessage.chatId, anime[index].getImage()).caption(anime[index].showInfo()).parseMode(ParseMode.HTML).replyMarkup(MyKeyboard.getCarousel("SearchedAnime"))); + TELEGRAM_BOT.execute(new SendPhoto(UserMessage.chatId, anime[index].getImage()).caption(anime[index].showInfo()).parseMode(ParseMode.HTML).replyMarkup(MyKeyboard.getCarousel())); } else { - telegramBot.execute(new SendMessage(UserMessage.chatId, "Прости, но я не смог найти аниме с таким названием...\nДавай поищем другое аниме!")); - Anime.setIsSearchingAnAnime(true); + TELEGRAM_BOT.execute(new SendMessage(UserMessage.chatId, "Прости, но я не смог найти аниме с таким названием...\nДавай поищем другое аниме!")); + Anime.isSearching = true; } } - - public static void sendSearchedAnimeByCallBackQuery(CallbackQuery callbackQuery, byte index, Anime[] list) { - telegramBot.execute(new SendPhoto(callbackQuery.message().chat().id(), list[index].getImage()).caption(list[index].showInfo()).parseMode(ParseMode.HTML).replyMarkup(MyKeyboard.getCarousel("SearchedAnime"))); - } } diff --git a/src/main/java/files/Database.java b/src/main/java/files/Database.java new file mode 100644 index 0000000..2d35c2d --- /dev/null +++ b/src/main/java/files/Database.java @@ -0,0 +1,41 @@ +package files; + +import com.mongodb.MongoClient; +import com.mongodb.MongoClientSettings; +import com.mongodb.MongoClientURI; +import com.mongodb.client.MongoCollection; +import com.mongodb.client.MongoDatabase; +import com.mongodb.client.model.Filters; + +import org.bson.Document; +import org.bson.codecs.configuration.CodecRegistries; +import org.bson.codecs.pojo.PojoCodecProvider; + +import static org.fusesource.jansi.Ansi.*; +import static org.fusesource.jansi.Ansi.Color.*; + +public class Database { + private static final String MONGO_URI = Bot.PROPERTIES.getProperty("DATABASE_URL"); + private static final MongoDatabase database = new MongoClient(new MongoClientURI(MONGO_URI)) + .getDatabase("animarfo") + .withCodecRegistry( + CodecRegistries.fromRegistries( + MongoClientSettings.getDefaultCodecRegistry(), + CodecRegistries.fromProviders(PojoCodecProvider.builder().automatic(true).build())) + ); + + public static void saveUser(TelegramUser telegramUser) { + System.out.println(ansi().fg(YELLOW).a("Trying to save user to database...")); + MongoCollection<TelegramUser> collection = database.getCollection("users", TelegramUser.class); + System.out.println(ansi().fg(GREEN).a("Connected to database and got collection!")); + TelegramUser searchedTelegramUser = collection.find(Filters.eq("_id", telegramUser.getId())).first(); + + if (searchedTelegramUser == null) { + collection.insertOne(telegramUser); + System.out.println(ansi().fg(GREEN).a("User is added to the database!")); + } else { + collection.updateOne(Filters.eq("_id", telegramUser.getId()), new Document("$set", telegramUser)); + System.out.println(ansi().fg(GREEN).a("User is updated")); + } + } +} diff --git a/src/main/java/files/MyKeyboard.java b/src/main/java/files/MyKeyboard.java index 6212542..060ceb5 100644 --- a/src/main/java/files/MyKeyboard.java +++ b/src/main/java/files/MyKeyboard.java @@ -12,6 +12,8 @@ import java.io.IOException; import java.util.ArrayList; public class MyKeyboard { + public static short seriesSize; + public static Keyboard getMain() { return new ReplyKeyboardMarkup( new String[]{"Поиск аниме"}, @@ -23,11 +25,11 @@ public class MyKeyboard { .selective(true); } - public static Keyboard getCarousel(String typeOfAnime) { + public static Keyboard getCarousel() { InlineKeyboardMarkup inlineKeyboardMarkup = new InlineKeyboardMarkup(); inlineKeyboardMarkup.addRow(new InlineKeyboardButton("Смотреть / Скачать").callbackData("watchOrDownload")); - inlineKeyboardMarkup.addRow(new InlineKeyboardButton("Пред.").callbackData("previous" + typeOfAnime), new InlineKeyboardButton("След.").callbackData("next" + typeOfAnime)); + inlineKeyboardMarkup.addRow(new InlineKeyboardButton("Пред.").callbackData("previous"), new InlineKeyboardButton("След.").callbackData("next")); return inlineKeyboardMarkup; } @@ -40,7 +42,7 @@ public class MyKeyboard { Anime[] anime = Anime.list; Anime thisAnime = anime[Anime.indexOfAnime]; - Elements seriesList = Parse.getPage(thisAnime.getUrl()).select("div[class=tabs-b video-box]").next().select("span"); + Elements seriesList = Parser.getPage(thisAnime.getUrl()).select("div[class=tabs-b video-box]").next().select("span"); ArrayList<String> series = new ArrayList<>(); ArrayList<String> seriesUrls = new ArrayList<>(); @@ -58,15 +60,16 @@ public class MyKeyboard { } InlineKeyboardMarkup inlineKeyboardMarkup = new InlineKeyboardMarkup(); - for (int i = 0; i < series.size(); i++) { - if (i+2 < series.size()) { + seriesSize = (short) series.size(); + for (int i = 0; i < seriesSize; i++) { + if (i+2 < seriesSize) { inlineKeyboardMarkup.addRow( new InlineKeyboardButton(series.get(i)).url(seriesUrls.get(i)), new InlineKeyboardButton(series.get(i+1)).url(seriesUrls.get(i+1)), new InlineKeyboardButton(series.get(i+2)).url(seriesUrls.get(i+2)) ); i += 2; - } else if (i+1 < series.size()) { + } else if (i+1 < seriesSize) { inlineKeyboardMarkup.addRow( new InlineKeyboardButton(series.get(i)).url(seriesUrls.get(i)), new InlineKeyboardButton(series.get(i+1)).url(seriesUrls.get(i+1)) diff --git a/src/main/java/files/Parser.java b/src/main/java/files/Parser.java new file mode 100644 index 0000000..8d06078 --- /dev/null +++ b/src/main/java/files/Parser.java @@ -0,0 +1,142 @@ +package files; + +import org.jsoup.Jsoup; +import org.jsoup.nodes.Document; +import org.jsoup.nodes.Element; +import org.jsoup.select.Elements; + +import java.io.IOException; +import java.net.URL; +import java.util.ArrayList; + +public class Parser { + public static Document getPage(String url) throws IOException { + return Jsoup.parse(new URL(url), 5000); + } + + public static byte getSizeOfSearchedAnime(String page) throws IOException { + Element animeList = Parser.getPage(page).select("div[id=dle-content]").first(); + if (animeList == null) return 0; + Elements anime = animeList.select("div[class=th-item]"); + return (byte) anime.size(); + } + + public static Anime[] getAnime(String page) throws IOException { + String typeOfAnime = Anime.typeOfAnime; + + Element animeList = Parser.getPage(page).select("div[id=dle-content]").first(); + assert animeList != null; + Elements namesTemp = animeList.select("div[class=th-title]"); + Elements descriptionsTemp = animeList.select("div[class=th-tip-text]"); + Elements yearsTemp = null; + if (typeOfAnime != null && !typeOfAnime.equals("Ongoing")) + yearsTemp = animeList.select("div[class=th-tip-meta fx-row fx-middle fx-start]"); + Elements genresTemp= animeList.select("ul[class=th-tip-list]"); + Elements seriesTemp = null; + if (typeOfAnime != null && !typeOfAnime.equals("Films")) + seriesTemp = animeList.select("div[class=th-title]"); + Elements ratingsTemp = animeList.select("div[class=th-rating]"); + Elements imagesTemp = animeList.select("div[class=th-img img-resp-vert img-fit]"); + Elements urlsTemp = animeList.select("div[class=th-itemb]").select("a[class=th-in]"); + + byte countOfAnime = (byte) namesTemp.size(); + Anime.size = countOfAnime; + + ArrayList<String> names = new ArrayList<>(); + for (Element name : namesTemp) { + if (typeOfAnime != null && !typeOfAnime.equals("Films")) { + String text = Jsoup.parse(String.valueOf(name)).text(); + int start = 0; + int end = text.indexOf(" ["); + char[] dst = new char[end - start]; + text.getChars(start, end, dst, 0); + names.add(String.valueOf(dst)); + } else { + 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<>(); + if (typeOfAnime != null && !typeOfAnime.equals("Ongoing") && !Anime.isSearching) { + for (Element year : yearsTemp) { + Element yearTemp = year.child(0); + years.add(Jsoup.parse(String.valueOf(yearTemp)).text()); + } + } + + ArrayList<String> genres = new ArrayList<>(); + for (Element oneGenres : genresTemp) { + Element genre = oneGenres.child(2); + String text = Jsoup.parse(String.valueOf(genre)).text(); + int start = 6; + int end = text.length(); + char[] dst = new char[end - start]; + text.getChars(start, end, dst, 0); + genres.add(String.valueOf(dst)); + } + + ArrayList<String> series = new ArrayList<>(); + if (typeOfAnime != null && !typeOfAnime.equals("Films") && !Anime.isSearching) { + for (Element oneSeries : seriesTemp) { + String text = oneSeries.toString(); + int start = text.indexOf("[") + 1; + int end = text.indexOf("]"); + char[] dst = new char[end - start]; + text.getChars(start, end, dst, 0); + series.add(String.valueOf(dst)); + } + } + + ArrayList<String> ratings = new ArrayList<>(); + for (Element rating : ratingsTemp) { + ratings.add(Jsoup.parse(String.valueOf(rating)).text()); + } + + ArrayList<String> images = new ArrayList<>(); + for (Element image : imagesTemp) { + String text = image.toString(); + int start = text.indexOf("data-src=\"") + 11; + int end = text.indexOf(".jpg") + 4; + if (end == 3) { + end = text.indexOf(".png") + 4; + } + char[] dst = new char[end - start]; + text.getChars(start, end, dst, 0); + if (!String.valueOf(dst).contains("statics")) { + images.add("https://online.anidub.com/" + String.valueOf(dst)); + } else { + images.add("h" + String.valueOf(dst)); + } + } + + ArrayList<String> urls = new ArrayList<>(); + for (Element url : urlsTemp) { + String text = url.toString(); + int start = text.indexOf("href=\"") + 6; + int end = text.indexOf("\">"); + 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++) { + if (typeOfAnime != null && typeOfAnime.equals("Films")) { + anime[i] = new Anime(names.get(i), descriptions.get(i), genres.get(i), years.get(i), ratings.get(i), images.get(i), urls.get(i)); + } else if (typeOfAnime != null && typeOfAnime.equals("Ongoing")) { + anime[i] = new Anime(names.get(i), descriptions.get(i), genres.get(i), null, series.get(i), ratings.get(i), images.get(i), urls.get(i)); + } else if (typeOfAnime != null && typeOfAnime.equals("Serials")) { + anime[i] = new Anime(names.get(i), descriptions.get(i), genres.get(i), years.get(i), series.get(i), ratings.get(i), images.get(i), urls.get(i)); + } else if (Anime.isSearching) { + anime[i] = new Anime(names.get(i), descriptions.get(i), genres.get(i), null, null, ratings.get(i), images.get(i), urls.get(i)); + } + } + + return anime; + } +}
\ No newline at end of file diff --git a/src/main/java/files/TelegramUser.java b/src/main/java/files/TelegramUser.java new file mode 100644 index 0000000..31e96f1 --- /dev/null +++ b/src/main/java/files/TelegramUser.java @@ -0,0 +1,69 @@ +package files; + +public class TelegramUser { + private long id; + private Boolean isBot; + private String firstName; + private String lastName; + private String username; + private String date; + + public TelegramUser(long id, boolean isBot, String firstName, String lastName, String username, String date) { + this.id = id; + this.isBot = isBot; + this.firstName = firstName; + this.lastName = lastName; + this.username = username; + this.date = date; + } + + public TelegramUser() { } + + public long getId() { + return id; + } + + public void setId(long id) { + this.id = id; + } + + public Boolean getIsBot() { + return isBot; + } + + public void setIsBot(Boolean bot) { + isBot = bot; + } + + public String getFirstName() { + return firstName; + } + + public void setFirstName(String firstName) { + this.firstName = firstName; + } + + public String getLastName() { + return lastName; + } + + public void setLastName(String lastName) { + this.lastName = lastName; + } + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + + public String getDate() { + return date; + } + + public void setDate(String date) { + this.date = date; + } +} diff --git a/src/main/java/files/UserCallbackQuery.java b/src/main/java/files/UserCallbackQuery.java index 553f6fd..f385542 100644 --- a/src/main/java/files/UserCallbackQuery.java +++ b/src/main/java/files/UserCallbackQuery.java @@ -1,14 +1,12 @@ package files; -import com.pengrad.telegrambot.TelegramBot; import com.pengrad.telegrambot.model.CallbackQuery; -import com.pengrad.telegrambot.model.Update; import com.pengrad.telegrambot.model.User; +import com.pengrad.telegrambot.model.request.Keyboard; import com.pengrad.telegrambot.model.request.ParseMode; import com.pengrad.telegrambot.request.DeleteMessage; import com.pengrad.telegrambot.request.SendMessage; import com.pengrad.telegrambot.request.SendPhoto; -import files.entity.TelegramUser; import java.io.IOException; @@ -17,116 +15,69 @@ public class UserCallbackQuery extends com.pengrad.telegrambot.model.CallbackQue public static String data; public static User user; public static long userId; - public static String fullName; public static int messageId; public static long chatId; - public static void setInformation(CallbackQuery callbackQuery) { - UserCallbackQuery.callbackQuery = callbackQuery; - UserCallbackQuery.data = callbackQuery.data(); - UserCallbackQuery.user = callbackQuery.from(); - UserCallbackQuery.userId = callbackQuery.from().id(); - UserCallbackQuery.fullName = callbackQuery.from().firstName() + TelegramUser.checkIfHasLastName(user); - UserCallbackQuery.messageId = callbackQuery.message().messageId(); - UserCallbackQuery.chatId = callbackQuery.message().chat().id(); - } - - public static String getInformation() { - return "callbackQuery: " + callbackQuery + System.lineSeparator() + - "data: " + data + System.lineSeparator() + - "userId: " + userId + System.lineSeparator() + - "fullName: " + fullName + System.lineSeparator() + - "messageId: " + messageId + System.lineSeparator() + - "chatId: " + chatId + "\n\n"; - } - - public static boolean checkIfNotNull(CallbackQuery callbackQuery) { - return (callbackQuery != null); + public static void setInformation(CallbackQuery _callbackQuery) { + callbackQuery = _callbackQuery; + data = _callbackQuery.data(); + user = _callbackQuery.from(); + userId = _callbackQuery.from().id(); + messageId = _callbackQuery.message().messageId(); + chatId = _callbackQuery.message().chat().id(); } public static void execute(CallbackQuery callbackQuery) throws IOException { UserCallbackQuery.setInformation(callbackQuery); - Bot.log.write(UserCallbackQuery.getInformation()); - Bot.log.flush(); - switch (data) { - case "previousOngoing" -> { + case "previous" -> { if (Anime.indexOfAnime == 0) { - Anime.setIndexOfAnime((byte) 27); + Anime.setIndexOfAnime((byte) (Anime.size-1)); } else { Anime.decreaseIndexOfAnime(); } - Bot.sendAnimeAtMainMenuByCallBackQuery("Ongoing"); + Bot.sendAnimeByCallBackQuery(); } - case "nextOngoing" -> { - if (Anime.indexOfAnime == 27) { + case "next" -> { + if (Anime.indexOfAnime == Anime.size-1) { Anime.setIndexOfAnime((byte) 0); } else { Anime.increaseIndexOfAnime(); } - Bot.sendAnimeAtMainMenuByCallBackQuery("Ongoing"); - } - case "previousAnimeSerials" -> { - if (Anime.indexOfAnime == 0) { - Anime.setIndexOfAnime((byte) 27); - } else { - Anime.decreaseIndexOfAnime(); - } - Bot.sendAnimeAtMainMenuByCallBackQuery("AnimeSerials"); - } - case "nextAnimeSerials" -> { - if (Anime.indexOfAnime == 27) { - Anime.setIndexOfAnime((byte) 0); - } else { - Anime.increaseIndexOfAnime(); - } - Bot.sendAnimeAtMainMenuByCallBackQuery("AnimeSerials"); - } - case "previousAnimeFilms" -> { - if (Anime.indexOfAnime == 0) { - Anime.setIndexOfAnime((byte) 27); - } else { - Anime.decreaseIndexOfAnime(); - } - Bot.sendAnimeAtMainMenuByCallBackQuery("AnimeFilms"); + Bot.sendAnimeByCallBackQuery(); } - case "nextAnimeFilms" -> { - if (Anime.indexOfAnime == 27) { - Anime.setIndexOfAnime((byte) 0); + case "watchOrDownload" -> { + Anime[] anime = Anime.list; + byte index = Anime.indexOfAnime; + Keyboard anidub = MyKeyboard.getAnidub(); + if (MyKeyboard.seriesSize > 0) { + Bot.TELEGRAM_BOT.execute(new SendPhoto(UserMessage.chatId, anime[index].getImage()).caption(anime[index].showInfo()).parseMode(ParseMode.HTML).replyMarkup(anidub)); } else { - Anime.increaseIndexOfAnime(); + Bot.TELEGRAM_BOT.execute(new SendMessage(UserMessage.chatId, "Прости, но я не смог найти серии для этого аниме... :(")); } - Bot.sendAnimeAtMainMenuByCallBackQuery("AnimeFilms"); } - case "previousSearchedAnime" -> { - if (Anime.indexOfAnime == 0) { - Anime.setIndexOfAnime((byte) (Anime.searchedAnimeSize - 1)); - } else { - Anime.decreaseIndexOfAnime(); + case "anidub" -> { + Anime.dub = "Anidub"; + String url = null; + if (Anime.typeOfAnime != null) { + switch (Anime.typeOfAnime) { + case "Ongoing" -> url = "https://anime.anidub.life/anime/anime_ongoing/"; + case "Serials" -> url = "https://online.anidub.com/anime/full/"; + case "Films" -> url = "https://anime.anidub.life/anime_movie/"; + } } - Bot.sendSearchedAnimeByCallBackQuery(callbackQuery, Anime.indexOfAnime, Anime.list); - } - case "nextSearchedAnime" -> { - if (Anime.indexOfAnime == Anime.searchedAnimeSize - 1) { - Anime.setIndexOfAnime((byte) 0); + Anime.setIndexOfAnime((byte) 0); + if (!Anime.isSearching) { + Bot.sendAnime(url); } else { - Anime.increaseIndexOfAnime(); + Bot.TELEGRAM_BOT.execute(new SendMessage(UserMessage.chatId, "Введи название аниме")); } - Bot.sendSearchedAnimeByCallBackQuery(callbackQuery, Anime.indexOfAnime, Anime.list); - } - case "watchOrDownload" -> { - Bot.telegramBot.execute(new SendMessage(UserMessage.chatId, "Какую озвучку выберем?").replyMarkup(MyKeyboard.getDub())); - } - case "anidub" -> { - Anime[] anime = Anime.list; - byte index = Anime.indexOfAnime; - Anime thisAnime = anime[index]; - Bot.telegramBot.execute(new SendPhoto(UserMessage.chatId, anime[index].getImage()).caption(anime[index].showInfo("Anidub")).parseMode(ParseMode.HTML).replyMarkup(MyKeyboard.getAnidub())); + Anime.typeOfAnime = null; } } DeleteMessage deleteMessage = new DeleteMessage(chatId, messageId); - Bot.telegramBot.execute(deleteMessage); + Bot.TELEGRAM_BOT.execute(deleteMessage); } } diff --git a/src/main/java/files/UserMessage.java b/src/main/java/files/UserMessage.java index 0670295..2def331 100644 --- a/src/main/java/files/UserMessage.java +++ b/src/main/java/files/UserMessage.java @@ -1,99 +1,58 @@ package files; import com.pengrad.telegrambot.model.Message; -import com.pengrad.telegrambot.model.User; import com.pengrad.telegrambot.request.SendMessage; -import files.entity.TelegramUser; import java.io.IOException; -import java.text.SimpleDateFormat; -import java.util.Date; +import java.util.HashMap; public class UserMessage { public static Message message; public static String text; public static long chatId; - private static String date; - private static User user; - private static long userId; - private static String fullName; - private static int messageId; + private static final HashMap<String, String> animeTypes = new HashMap<>(); + + static { + animeTypes.put("Онгоинги", "Ongoing"); + animeTypes.put("Аниме сериалы", "Serials"); + animeTypes.put("Аниме фильмы", "Films"); + } public static void setInformation(Message message) { UserMessage.message = message; - - long unixSeconds = message.date(); - Date date = new java.util.Date(unixSeconds*1000L); - SimpleDateFormat sdf = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss z"); - - UserMessage.date = sdf.format(date); - UserMessage.user = message.from(); - UserMessage.userId = message.from().id(); - UserMessage.fullName = message.from().firstName() + TelegramUser.checkIfHasLastName(user); - UserMessage.messageId = message.messageId(); UserMessage.text = message.text(); UserMessage.chatId = message.chat().id(); } - public static String getInformation() { - return "message: " + message + System.lineSeparator() + - "date: " + date + System.lineSeparator() + - "text: " + text + System.lineSeparator() + - "userId: " + userId + System.lineSeparator() + - "fullName: " + fullName + System.lineSeparator() + - "messageId: " + messageId + System.lineSeparator() + - "chatId: " + chatId + "\n\n"; - } - - public static boolean checkIfNotNull(Message message) { - return (message != null); - } - public static void execute(Message message) throws IOException { UserMessage.setInformation(message); - Bot.log.write(UserMessage.getInformation()); - Bot.log.flush(); - - switch (UserMessage.text) { -// case "Поиск аниме": -// Anime.setIndexOfAnime((byte) 0); -// Anime.setIsSearchingAnAnime(true); -// telegramBot.execute(new SendMessage(UserMessage.chatId, "Введи название аниме, которое хочешь найти...")); -// break; - case "Онгоинги": - Anime.setIndexOfAnime((byte) 0); - Anime.setIsSearchingAnAnime(false); - Bot.sendAnimeAtMainMenu("https://online.anidub.com/anime/anime_ongoing/", "Ongoing"); - break; - case "Аниме сериалы": - Anime.setIndexOfAnime((byte) 0); - Anime.setIsSearchingAnAnime(false); - Bot.sendAnimeAtMainMenu("https://online.anidub.com/anime/full/", "AnimeSerials"); - break; - case "Аниме фильмы": - Anime.setIndexOfAnime((byte) 0); - Anime.setIsSearchingAnAnime(false); - Bot.sendAnimeAtMainMenu("https://anime.anidub.life/anime_movie/", "AnimeFilms"); - break; - case "/start": -// DataBase.saveUser(update); - Anime.setIsSearchingAnAnime(false); - Bot.telegramBot.execute(new SendMessage(UserMessage.chatId, ("Приветики, меня звать AniMarfo!\nЯ помогу тебе найти аниме, скачать его или же смотреть прямо тут.")).replyMarkup(MyKeyboard.getMain())); - break; - default: - if (Anime.isSearchingAnAnime) { - Anime.setSearchedAnime(UserMessage.text); - Anime.setIsSearchingAnAnime(false); - try { - Bot.sendSearchedAnime(Anime.indexOfAnime, Anime.searchedAnime); - } catch (IOException e) { - e.printStackTrace(); - } - } else { - Bot.telegramBot.execute(new SendMessage(UserMessage.chatId, "Прости, но я тебя не понимаю...\nВоспользуйся командами на твоей клавлиатуре!").replyMarkup(MyKeyboard.getMain())); + if (animeTypes.get(UserMessage.text) != null || UserMessage.text.equals("Поиск аниме")) { + if (UserMessage.text.equals("Поиск аниме")) { + Anime.isSearching = true; + } else { + Anime.isSearching = false; + Anime.typeOfAnime = animeTypes.get(UserMessage.text); + } + Bot.TELEGRAM_BOT.execute(new SendMessage(UserMessage.chatId, "В какой озвучке будем смотреть?").replyMarkup(MyKeyboard.getDub())); + } else if (UserMessage.text.equals("/start")) { + Anime.isSearching = false; + Bot.TELEGRAM_BOT.execute(new SendMessage(UserMessage.chatId, ("Приветики, меня звать AniMarfo!\nЯ помогу тебе найти аниме, скачать его или же смотреть прямо тут.")).replyMarkup(MyKeyboard.getMain())); + } else { + if (Anime.isSearching && Anime.dub != null) { + Anime.setSearchedAnime(UserMessage.text); + try { + Bot.sendSearchedAnime(); + } catch (IOException e) { + e.printStackTrace(); } - break; + Anime.isSearching = false; + } else { + Anime.isSearching = false; + Bot.TELEGRAM_BOT.execute(new SendMessage(UserMessage.chatId, "Прости, но я тебя не понимаю...\nВоспользуйся командами на твоей клавлиатуре!").replyMarkup(MyKeyboard.getMain())); + } } + + Database.saveUser(Bot.telegramUser); } } |