package Modules; import CORE.Core; import Manager.UserManager; import Utility.KeyBoards; import Utility.MessageConstants; import Utility.User.MyUser; import Utility.User.Roles; import Utility.User.State; import org.telegram.telegrambots.meta.api.methods.ParseMode; import org.telegram.telegrambots.meta.api.methods.send.SendMessage; import org.telegram.telegrambots.meta.api.methods.updatingmessages.EditMessageText; import org.telegram.telegrambots.meta.api.objects.Update; import org.telegram.telegrambots.meta.api.objects.replykeyboard.InlineKeyboardMarkup; import org.telegram.telegrambots.meta.api.objects.replykeyboard.buttons.InlineKeyboardButton; import java.util.ArrayList; import java.util.List; import static CORE.Core.NO_BOT_RIGHTS; import static java.lang.Math.toIntExact; public class BasicModule implements Module { private Core core; public BasicModule(Core core){ this.core = core; } @Override public void execute(Update update) { /*----------Update has Text----------*/ if (update.hasMessage() && update.getMessage().hasText()) { String text = update.getMessage().getText(); long userId = update.getMessage().getFrom().getId(); State state = core.getUserMap().containsKey(userId) ? core.getUserMap().get(userId).getState() : null; //Different Options to build the Main Menu /*----------User is known, build main Menu----------*/ if (text.equalsIgnoreCase("/start") && UserManager.checkWhitelist(update.getMessage().getFrom().getId()) && state == null) { MyUser myUser = UserManager.loadUser(update.getMessage().getFrom().getId()); SendMessage message = new SendMessage(); String message_text; InlineKeyboardMarkup buttons; if (myUser.getRole() == Roles.GUEST) { buttons = KeyBoards.buildGuestMenu(); message_text = MessageConstants.MESSAGE_MENU_GUEST; } else { buttons = KeyBoards.buildMainMenu(userId); message_text = MessageConstants.MESSAGE_MENU_MAIN; } message_text = message_text.replace("$user", CORE.Core.getUserAsMention(update.getMessage().getFrom())); message.setChatId(userId).setParseMode(ParseMode.HTML).setReplyMarkup(buttons).setText(message_text); core.send_message(message); } /*----------User is unknown, build Menu with Open Chat and possibillities to request rights----------*/ else if (state == null && text.equalsIgnoreCase("/start") && !UserManager.checkBlacklist(update.getMessage().getFrom().getId())) { SendMessage message = new SendMessage(); InlineKeyboardMarkup buttons = KeyBoards.buildOpenMenu(); if (NO_BOT_RIGHTS) { message.setChatId(userId).setParseMode(ParseMode.HTML).setReplyMarkup(buttons).setText( MessageConstants.MESSAGE_MENU_OPEN_NO_BOT_RIGHTS); } else { message.setChatId(userId).setParseMode(ParseMode.HTML).setReplyMarkup(buttons).setText( MessageConstants.MESSAGE_MENU_OPEN); } core.send_message(message); } /*----------/help----------*/ else if (text.equalsIgnoreCase("/help") && !UserManager.checkBlacklist(update.getMessage().getFrom().getId()) && state == null) { SendMessage message = new SendMessage(); message.setChatId(userId).setParseMode(ParseMode.HTML).setText(MessageConstants.MESSAGE_HELP); core.send_message(message); } /*----------/changelog---------*/ else if (text.equalsIgnoreCase("/changelog") && UserManager.checkWhitelist(update.getMessage().getFrom().getId()) && state == null) { SendMessage message = new SendMessage(); message.setChatId(userId).setParseMode(ParseMode.HTML).setText(MessageConstants.MESSAGE_CHANGELOG); core.send_message(message); } /*----------Cancel any state----------*/ else if (state != null && text.equals("/cancel")) { core.getUserMap().get(userId).setState(null); InlineKeyboardMarkup keyboard = new InlineKeyboardMarkup(); List> buttons = new ArrayList<>(); List row = new ArrayList<>(); row.add(new InlineKeyboardButton().setText("Hauptmenü").setCallbackData("mainmenu")); buttons.add(row); keyboard.setKeyboard(buttons); SendMessage message = new SendMessage().setChatId(userId).setParseMode(ParseMode.HTML).setReplyMarkup( keyboard).setText(MessageConstants.MESSAGE_STATE_CANCELED); core.send_message(message); } } /*----------Update has Callback Query, aka as Button was clicked----------*/ else if (update.hasCallbackQuery()) { String call_data = update.getCallbackQuery().getData(); long message_id = update.getCallbackQuery().getMessage().getMessageId(); long user_id = update.getCallbackQuery().getFrom().getId(); //Go back to Main Menu if (call_data.equals("mainmenu") && UserManager.checkWhitelist(update.getCallbackQuery().getFrom().getId())) { EditMessageText message = new EditMessageText(); InlineKeyboardMarkup keyboard = KeyBoards.buildMainMenu(user_id); String message_text = MessageConstants.MESSAGE_MENU_MAIN.replace("$user", CORE.Core.getUserAsMention(update.getCallbackQuery().getFrom())); message.setChatId(user_id).setParseMode(ParseMode.HTML).setMessageId(toIntExact(message_id)) .setReplyMarkup(keyboard).setText(message_text); core.edit_message(message); } //Close Menu else if (call_data.equals("close")) { EditMessageText message = new EditMessageText().setChatId(user_id).setMessageId(toIntExact(message_id)) .setText(MessageConstants.MESSAGE_MENU_CLOSED); core.edit_message(message); } } } }