MittweidaForFuture/src/main/java/Modules/BasicModule.java
2021-03-18 10:18:13 +01:00

167 lines
6.4 KiB
Java

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<List<InlineKeyboardButton>> buttons = new ArrayList<>();
List<InlineKeyboardButton> 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);
}
}
}
}