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

1251 lines
57 KiB
Java

package Modules;
import CORE.Core;
import Manager.ChatManager;
import Manager.UserManager;
import Utility.MessageConstants;
import Utility.User.MyUser;
import Utility.User.Roles;
import Utility.User.State;
import Utility.User.UserPermission;
import Utility.chat.Chat;
import Utility.chat.ChatCategory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
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.net.MalformedURLException;
import java.net.URL;
import java.util.*;
import static java.lang.Math.toIntExact;
import static Utility.KeyBoards.*;
public class AdminMenue implements Module{
private static Logger log = LoggerFactory.getLogger(AdminMenue.class);
private Core core;
private Map<Long, Chat> adminAddChatMap;
private Map<Long, Long> adminCurrentCategoryMap;
public AdminMenue(Core core) {
this.core = core;
this.adminAddChatMap = new HashMap<>();
this.adminCurrentCategoryMap = new HashMap<>();
}
public void execute(Update update) {
/*----------Update has text----------*/
//////////////////////////////////
// HAS TEXT
/////////////////////////////////
if (update.hasMessage() && update.getMessage().getChat().isUserChat() && update.getMessage().hasText() && UserManager.checkAdmin(update.getMessage().getFrom().getId())) {
long user_id = update.getMessage().getFrom().getId();
String text = update.getMessage().getText();
State state = core.getUserMap().containsKey(user_id) ? core.getUserMap().get(user_id).getState() : null;
/*----------Admin sent username to find a user----------*/
if (state == State.ADMIN_LOADUSER && !text.equals("/cancel")) {
loadUserEntry(Long.parseLong(text), user_id);
}
/*----------Admin sent username to unblock a user----------*/
else if (state == State.ADMIN_UNBLOCKUSER && !text.equals("/cancel")) {
MyUser blockedUser = UserManager.loadBlockedUser(Long.parseLong(text));
// User wasn't found
if (blockedUser == null) {
SendMessage message = new SendMessage().setChatId(user_id).setParseMode(ParseMode.HTML).setText(
MessageConstants.MESSAGE_ADMINTOOLS_USERNOTFOUND);
core.send_message(message);
} else {
log.info(" - unblocked user: " + blockedUser.getUserName());
core.getUserMap().get(user_id).setState(null);
UserManager.unblock(blockedUser.getId(), core);
SendMessage message = new SendMessage();
InlineKeyboardMarkup keyboard = buildBackButtonAdmintools();
String message_text = MessageConstants.MESSAGE_ADMINTOOLS_USERUNBLOCKED.replace("$user",
blockedUser.getUserName());
message.setChatId(user_id).setParseMode(ParseMode.HTML).setReplyMarkup(keyboard).setText(
message_text);
core.send_message(message);
}
}
// Admin is about to create a new Category
else if (state == State.ADMIN_ADDCHATCATEGORY) {
long uid = ChatManager.getBiggestChatCategoryUid() + 1;
ChatManager.addCategory(new ChatCategory(uid, text));
InlineKeyboardMarkup keyboardMarkup = buildCategoriesMenu(user_id);
SendMessage message = new SendMessage().setChatId(user_id).setParseMode(ParseMode.HTML).setReplyMarkup(
keyboardMarkup).setText(MessageConstants.MESSAGE_CHATS_CATEGORYADDED);
core.getUserMap().get(user_id).setState(null);
core.send_message(message);
}
// Admin sent a UID for a new chat
else if ((state == State.ADMIN_ADDCHATUID) && (!text.equalsIgnoreCase("/cancel"))) {
//Check if UID is actually a number
if (!text.matches("\\d+")) {
SendMessage message = new SendMessage()
.setParseMode(ParseMode.HTML)
.setChatId(user_id)
.setText(MessageConstants.MESSAGE_CHATS_NOTANUMBER);
core.send_message(message);
}
//Check if a chat with that UID might allready exist
else if (ChatManager.checkChatUID(Long.parseLong(text))) {
SendMessage message = new SendMessage()
.setParseMode(ParseMode.HTML)
.setChatId(user_id)
.setText(MessageConstants.MESSAGE_CHATS_CHATEXISTSALLREADY);
core.send_message(message);
}
//Check if UID is only 4 chars long
else if (text.length() > 4) {
SendMessage message = new SendMessage()
.setParseMode(ParseMode.HTML)
.setChatId(user_id)
.setText(MessageConstants.MESSAGE_CHATS_CHATNUMBERTOLONG);
core.send_message(message);
}
//UID seems okay, save it and ask for name
else {
long uid = Long.parseLong(text);
adminAddChatMap.put(user_id, new Chat(uid, null));
SendMessage message = new SendMessage()
.setChatId(user_id)
.setParseMode(ParseMode.HTML)
.setText(MessageConstants.MESSAGE_CHATS_ADDCHATNAME);
core.getUserMap().get(user_id).setState(State.ADMIN_ADDCHATNAME);
core.send_message(message);
}
}
// Admin send a Chatname (anything is okay as a chatname, so just save it and ask for URL)
else if ((state == State.ADMIN_ADDCHATNAME) && (!text.equalsIgnoreCase("/cancel"))) {
long uid = adminAddChatMap.get(user_id).getUid();
adminAddChatMap.remove(user_id);
adminAddChatMap.put(user_id, new Chat(uid, text));
SendMessage message = new SendMessage()
.setChatId(user_id)
.setParseMode(ParseMode.HTML)
.setText(MessageConstants.MESSAGE_CHATS_ADDURL);
core.getUserMap().get(user_id).setState(State.ADMIN_ADDCHATURL);
core.send_message(message);
}
//Admin send a URL for a chat
else if ((state == State.ADMIN_ADDCHATURL) && (!text.equalsIgnoreCase("/cancel"))) {
try {
URL url = new URL(text);
//UrlValidator validator = new UrlValidator();
//if (validator.isValid(text)) {
Chat chat = (Chat) adminAddChatMap.get(user_id);
chat.setUrl(text);
InlineKeyboardMarkup keyboardMarkup = buildPossiblePermissions();
SendMessage message = new SendMessage()
.setChatId(user_id)
.setParseMode(ParseMode.HTML)
.setReplyMarkup(keyboardMarkup)
.setText(MessageConstants.MESSAGE_CHATS_ADDPERMISSION);
core.getUserMap().get(user_id).setState(null);
core.send_message(message);
} catch (MalformedURLException e) {
SendMessage message = new SendMessage()
.setChatId(user_id)
.setParseMode(ParseMode.HTML)
.setText(MessageConstants.MESSAGE_CHATS_NOTAURL);
core.send_message(message);
}
}
//
else if ((state == State.ADMIN_EDITCHAT) && (!text.equalsIgnoreCase("/cancel"))) {
if (!text.matches("\\d+")) {
SendMessage message = new SendMessage()
.setChatId(user_id)
.setParseMode(ParseMode.HTML)
.setText(MessageConstants.MESSAGE_CHATS_NOTFOUND);
core.send_message(message);
return;
}
Chat chat = ChatManager.loadChatFromCategory(Long.parseLong(text), adminCurrentCategoryMap.get(user_id));
if (chat == null)
{
SendMessage message = new SendMessage()
.setChatId(user_id)
.setParseMode(ParseMode.HTML)
.setText(MessageConstants.MESSAGE_CHATS_NOTFOUND);
core.send_message(message);
} else {
InlineKeyboardMarkup keyboardMarkup = buildEditChat(chat, adminCurrentCategoryMap.get(user_id));
String respond = MessageConstants.MESSAGE_CHATS_CHATFOUND.replace("$fullname", chat.getFullName()).replace("$permission", chat.getPermissionNeeded().toString()).replace("$url", chat.getUrl());
SendMessage message = new SendMessage()
.setChatId(user_id)
.setParseMode(ParseMode.HTML)
.setReplyMarkup(keyboardMarkup)
.setText(respond);
core.send_message(message);
}
}
else if ((state == State.ADMIN_CHANGECHATUID) && (!text.equalsIgnoreCase("/cancel"))) {
if (!text.matches("\\d+"))
{
SendMessage message = new SendMessage()
.setParseMode(ParseMode.HTML)
.setChatId(user_id)
.setText(MessageConstants.MESSAGE_CHATS_NOTANUMBER);
core.send_message(message);
} else if (ChatManager.checkChatUID(Long.parseLong(text)))
{
SendMessage message = new SendMessage()
.setParseMode(ParseMode.HTML)
.setChatId(user_id)
.setText(MessageConstants.MESSAGE_CHATS_CHATEXISTSALLREADY);
core.send_message(message);
} else if (text.length() > 4)
{
SendMessage message = new SendMessage()
.setParseMode(ParseMode.HTML)
.setChatId(user_id)
.setText(MessageConstants.MESSAGE_CHATS_CHATNUMBERTOLONG);
core.send_message(message);
} else {
long uid = Long.parseLong(text);
Chat chat = (Chat)adminAddChatMap.get(user_id);
long oldUid = chat.getUid();
chat.setUid(uid);
ChatManager.changeUid(chat, adminCurrentCategoryMap.get(user_id), oldUid);
String respond = MessageConstants.MESSAGE_CHATS_CHATFOUND.replace("$fullname", chat.getFullName()).replace("$permission", chat.getPermissionNeeded().toString()).replace("$url", chat.getUrl());
InlineKeyboardMarkup keyboardMarkup = buildEditChat(chat, adminCurrentCategoryMap.get(user_id));
SendMessage message = new SendMessage()
.setChatId(user_id)
.setParseMode(ParseMode.HTML)
.setReplyMarkup(keyboardMarkup).setText(respond);
core.getUserMap().get(user_id).setState(null);
adminAddChatMap.remove(user_id);
adminCurrentCategoryMap.remove(user_id);
core.send_message(message);
}
}
else if ((state == State.ADMIN_CHANGECHATNAME) && (!text.equalsIgnoreCase("/cancel"))) {
Chat chat = (Chat)adminAddChatMap.get(user_id);
chat.setName(text);
ChatManager.saveChat(chat, adminCurrentCategoryMap.get(user_id));
String respond = "<b>Chat gefunden: $fullname</b> \n\nBenötigte Permission: $permission\nURL: $url".replace("$fullname", chat.getFullName()).replace("$permission", chat.getPermissionNeeded().toString()).replace("$url", chat.getUrl());
InlineKeyboardMarkup keyboardMarkup = buildEditChat(chat, adminCurrentCategoryMap.get(user_id));
SendMessage message = new SendMessage()
.setChatId(user_id)
.setParseMode(ParseMode.HTML)
.setReplyMarkup(keyboardMarkup)
.setText(respond);
core.getUserMap().get(user_id).setState(null);
adminAddChatMap.remove(user_id);
adminCurrentCategoryMap.remove(user_id);
core.send_message(message);
}
else if ((state == State.ADMIN_CHANGECHATURL) && (!text.equalsIgnoreCase("/cancel"))) {
try {
URL url = new URL(text);
//UrlValidator validator = new UrlValidator();
//if (validator.isValid(text)) {
Chat chat = (Chat)adminAddChatMap.get(user_id);
chat.setUrl(text);
ChatManager.saveChat(chat, adminCurrentCategoryMap.get(user_id));
String respond = "<b>Chat gefunden: $fullname</b> \n\nBenötigte Permission: $permission\nURL: $url".replace("$fullname", chat.getFullName()).replace("$permission", chat.getPermissionNeeded().toString()).replace("$url", chat.getUrl());
InlineKeyboardMarkup keyboardMarkup = buildEditChat(chat, adminCurrentCategoryMap.get(user_id));
SendMessage message = new SendMessage()
.setChatId(user_id)
.setParseMode(ParseMode.HTML)
.setReplyMarkup(keyboardMarkup)
.setText(respond);
core.getUserMap().get(user_id).setState(null);
adminAddChatMap.remove(user_id);
adminCurrentCategoryMap.remove(user_id);
core.send_message(message);
} catch (MalformedURLException e) {
SendMessage message = new SendMessage()
.setChatId(user_id)
.setParseMode(ParseMode.HTML)
.setText("Es tut mir Leid, aber das ist keine valide URL. Bitte versuche es noch einmal.");
core.send_message(message);
}
}
}
/*----------Update has a Callback Query (aka Button was clicked)----------*/
//////////////////////////////////////////
// HAS CALLBACKQUERY
////////////////////////////////////////
if (update.hasCallbackQuery()) {
String call_data = update.getCallbackQuery().getData();
long message_id = update.getCallbackQuery().getMessage().getMessageId();
long user_id = update.getCallbackQuery().getFrom().getId();
String user_name = Core.getUserAsMention(update.getCallbackQuery().getFrom());
State state = core.getUserMap().containsKey(user_id) ? core.getUserMap().get(user_id).getState() : null;
/*----------Admintools----------*/
///////////////////////////////////
// admintools x _ x _
//////////////////////////////////
if (call_data.startsWith("admintools") && UserManager.checkAdmin(user_id) && state == null) {
String[] call_data_parts = call_data.split(" ");
// *************** admintools x menu x _ ***********************//
// Load admin tools menu
if (call_data_parts[1].equals("menu")) {
EditMessageText message = new EditMessageText();
InlineKeyboardMarkup keyboard = buildAdminMenu();
message.setChatId(user_id).setParseMode(ParseMode.HTML).setMessageId(toIntExact(message_id))
.setReplyMarkup(keyboard).setText("Admin Tools:");
core.edit_message(message);
}
// *************** admintools x loadrequests x _ ***********************//
// Load currenty open Requests
else if (call_data_parts[1].equals("loadrequests")) {
if (core.getOpen_requests().size() == 0) {
EditMessageText message = new EditMessageText();
InlineKeyboardMarkup keyboard = new InlineKeyboardMarkup();
List<List<InlineKeyboardButton>> buttons = new ArrayList<>();
List<InlineKeyboardButton> row = new ArrayList<>();
row.add(new InlineKeyboardButton().setText("Zurück").setCallbackData("admintools menu"));
buttons.add(row);
keyboard.setKeyboard(buttons);
message.setChatId(user_id).setParseMode(ParseMode.HTML).setMessageId(toIntExact(message_id))
.setReplyMarkup(keyboard).setText(MessageConstants.MESSAGE_PERMISSION_NO_OPENREQUESTS);
core.edit_message(message);
} else {
EditMessageText message = new EditMessageText();
InlineKeyboardMarkup keyboard = buildOpenRequests(core.getOpen_requests());
message.setChatId(user_id).setParseMode(ParseMode.HTML).setMessageId(toIntExact(message_id))
.setReplyMarkup(keyboard).setText(MessageConstants.MESSAGE_PERMISSION_OPENREQUESTS);
core.edit_message(message);
}
}
// *************** admintools x loadopenuser x USER_ID ***********************//
// Load specific request
else if (call_data_parts[1].equals("loadopenuser")) {
long open_user_id = Long.parseLong(call_data_parts[2]);
MyUser open_user = core.getOpen_requests().get(open_user_id);
EditMessageText message = new EditMessageText();
InlineKeyboardMarkup keyboard = buildRequestAnswers(open_user_id);
String message_text;
if (open_user.getRole() == Roles.GUEST) {
message_text = MessageConstants.MESSAGE_PERMISSION_OPENUSER_GUEST.replace("$user",
open_user.getUserName());
} else {
message_text = MessageConstants.MESSAGE_PERMISSION_OPENUSER.replace("$user", open_user.getUserName());
}
message.setChatId(user_id).setParseMode(ParseMode.HTML).setMessageId(toIntExact(message_id))
.setReplyMarkup(keyboard).setText(message_text);
core.edit_message(message);
}
// *************** admintools x grant x USER_ID ***********************//
// Permission was granted
else if (call_data_parts[1].equals("grant")) {
log.info("Grant by " + user_name + " - " + user_id + " for " + call_data_parts[2]);
long open_user_id = Long.parseLong(call_data_parts[2]);
MyUser user = core.getOpen_requests().get(open_user_id);
//What if open request doesnt exist anymore?
if (user == null) {
EditMessageText message = new EditMessageText();
InlineKeyboardMarkup keyboard = buildBackButtonAdmintools();
message.setChatId(user_id).setParseMode(ParseMode.HTML).setMessageId(toIntExact(message_id))
.setReplyMarkup(keyboard).setText(MessageConstants.MESSAGE_ADMINTOOLS_NULLREQUEST);
core.edit_message(message);
} else {
UserManager.whitelistUser(user, core);
// Send message to user, to tell him, he was whitelisted
SendMessage message = new SendMessage();
String message_text;
if (user.getRole() == Roles.GUEST) {
message_text = MessageConstants.MESSAGE_PERMISSION_GUEST_GRANTED;
} else {
message_text = MessageConstants.MESSAGE_PERMISSION_GRANTED;
}
message.setChatId((long) user.getId()).setParseMode(ParseMode.HTML).setText(message_text);
core.send_message(message);
// Inform admins that a request was granted
SendMessage admin_message = new SendMessage();
String admin_message_text;
if (user.getRole() == Roles.GUEST) {
admin_message_text = MessageConstants.MESSAGE_PERMISSION_GUEST_REQUEST_GRANTED.replace(
"$user", user.getUserName())
.replace("$admin", user_name);
} else {
admin_message_text = MessageConstants.MESSAGE_PERMISSION_USER_REQUEST_GRANTED.replace(
"$user", user.getUserName())
.replace("$admin", user_name);
}
admin_message.setParseMode(ParseMode.HTML).setText(admin_message_text);
core.send_message_toadmins(admin_message);
// Edit admin message to tell him, he is done
EditMessageText new_message = new EditMessageText();
String new_message_text;
if (user.getRole() == Roles.GUEST) {
new_message_text = MessageConstants.MESSAGE_PERMISSION_GUEST_GRANTED_ADMIN.replace("$user", user.getUserName());
} else {
new_message_text = MessageConstants.MESSAGE_PERMISSION_GRANTED_ADMIN.replace("$user", user.getUserName());
}
InlineKeyboardMarkup keyboard = new InlineKeyboardMarkup();
List<List<InlineKeyboardButton>> buttons = new ArrayList<>();
List<InlineKeyboardButton> row = new ArrayList<>();
row.add(new InlineKeyboardButton().setText("Zurück")
.setCallbackData("admintools loadrequests"));
buttons.add(row);
keyboard.setKeyboard(buttons);
new_message.setChatId(user_id).setParseMode(ParseMode.HTML).setMessageId(toIntExact(message_id))
.setReplyMarkup(keyboard).setText(new_message_text);
core.edit_message(new_message);
core.getOpen_requests().remove(open_user_id);
}
}
// *************** admintools x deny x USER_ID ***********************//
// Permission was denied
else if (call_data_parts[1].equals("deny")) {
log.info("Deny by " + user_name + " - " + user_id + " for " + call_data_parts[2]);
long open_user_id = Long.parseLong(call_data_parts[2]);
MyUser user = core.getOpen_requests().get(open_user_id);
//What if open request doesnt exist anymore?
if (user == null) {
EditMessageText message = new EditMessageText();
InlineKeyboardMarkup keyboard = buildBackButtonAdmintools();
message.setChatId(user_id).setParseMode(ParseMode.HTML).setMessageId(toIntExact(message_id))
.setReplyMarkup(keyboard).setText(MessageConstants.MESSAGE_ADMINTOOLS_NULLREQUEST);
core.edit_message(message);
} else {
core.getOpen_requests().remove(open_user_id);
// Send message to user, to tell him, that his request was denied
SendMessage message = new SendMessage();
message.setChatId((long) user.getId()).setParseMode(ParseMode.HTML).setText(
MessageConstants.MESSAGE_PERMISSION_DENIED);
core.send_message(message);
// Inform admins that a request was denied
SendMessage admin_message = new SendMessage();
String admin_message_text = MessageConstants.MESSAGE_PERMISSION_REQUEST_DENIED.replace(
"$user", user.getUserName())
.replace("$admin", user_name);
admin_message.setParseMode(ParseMode.HTML).setText(admin_message_text);
core.send_message_toadmins(admin_message);
// Edit admin message to tell him, he is done
EditMessageText new_message = new EditMessageText();
String new_message_text = MessageConstants.MESSAGE_PERMISSION_DENIED_ADMIN.replace("$user",
user.getUserName());
InlineKeyboardMarkup keyboard = new InlineKeyboardMarkup();
List<List<InlineKeyboardButton>> buttons = new ArrayList<>();
List<InlineKeyboardButton> row = new ArrayList<>();
row.add(new InlineKeyboardButton().setText("Zurück")
.setCallbackData("admintools loadrequests"));
buttons.add(row);
keyboard.setKeyboard(buttons);
new_message.setChatId(user_id).setParseMode(ParseMode.HTML).setMessageId(toIntExact(message_id))
.setReplyMarkup(keyboard).setText(new_message_text);
core.edit_message(new_message);
}
}
// *************** admintools x denyandblock x USER_ID ***********************//
// Permission was denied and user was blocked
else if (call_data_parts[1].equals("denyandblock")) {
log.info("DenyBlock by " + user_name + " - " + user_id + " for " + call_data_parts[2]);
long open_user_id = Long.parseLong(call_data_parts[2]);
MyUser user = core.getOpen_requests().get(open_user_id);
//What if open request doesnt exist anymore?
if (user == null) {
EditMessageText message = new EditMessageText();
InlineKeyboardMarkup keyboard = buildBackButtonAdmintools();
message.setChatId(user_id).setParseMode(ParseMode.HTML).setMessageId(toIntExact(message_id))
.setReplyMarkup(keyboard).setText(MessageConstants.MESSAGE_ADMINTOOLS_NULLREQUEST);
core.edit_message(message);
} else {
core.getOpen_requests().remove(open_user_id);
UserManager.blockUser(user, core);
// Send message to user, to tell him, that his request was denied and he got blocked
SendMessage message = new SendMessage();
message.setChatId((long) user.getId()).setParseMode(ParseMode.HTML).setText(
MessageConstants.MESSAGE_PERMISSION_BLOCKED);
core.send_message(message);
// Edit admin message to tell him, he is done
EditMessageText new_message = new EditMessageText();
String new_message_text = MessageConstants.MESSAGE_PERMISSION_BLOCKED_ADMIN.replace("$user",
user.getUserName());
InlineKeyboardMarkup keyboard = new InlineKeyboardMarkup();
List<List<InlineKeyboardButton>> buttons = new ArrayList<>();
List<InlineKeyboardButton> row = new ArrayList<>();
row.add(new InlineKeyboardButton().setText("Zurück")
.setCallbackData("admintools loadrequests"));
buttons.add(row);
keyboard.setKeyboard(buttons);
new_message.setChatId(user_id).setParseMode(ParseMode.HTML).setMessageId(toIntExact(message_id))
.setReplyMarkup(keyboard).setText(new_message_text);
core.edit_message(new_message);
}
}
// *************** admintools x whitelist x _ ***********************//
//Load current whitelist
else if (call_data_parts[1].equals("whitelist")) {
List<MyUser> adminlist = UserManager.buildAdminList();
List<MyUser> whitelist = UserManager.buildUserList();
List<MyUser> guestlist = UserManager.buildGuestList();
EditMessageText message = new EditMessageText();
InlineKeyboardMarkup keyboard = buildWhitelistMenu();
StringBuilder message_text = new StringBuilder().append(MessageConstants.MESSAGE_ADMINTOOLS_WHITELIST);
message_text.append("Admins: \n");
for (MyUser admin : adminlist) {
message_text.append(admin.getUserName()).append(" - <code>").append(admin.getId()).append("</code>\n");
}
message_text.append("\nUsers: \n");
for (MyUser user : whitelist) {
message_text.append(user.getUserName()).append(" - <code>").append(user.getId()).append("</code> ");
if(user.getPermission() != null && user.getPermission().size() > 0){
for (UserPermission permission : user.getPermission()) {
message_text.append("<i>").append(permission.toString().charAt(0)).append("</i> ");
}
}
message_text.append("\n");
}
message_text.append("\nGäste: \n");
for (MyUser guest : guestlist) {
message_text.append(guest.getUserName()).append(" - <code>").append(guest.getId()).append("</code>\n");
}
message.setChatId(user_id).setParseMode(ParseMode.HTML).setMessageId(toIntExact(message_id))
.setReplyMarkup(keyboard).setText(message_text.toString());
core.edit_message(message);
}
// *************** admintools x loaduser x _ ***********************//
// Load specific user on whitelist
else if (call_data_parts[1].equals("loaduser")) {
core.getUserMap().get(user_id).setState(State.ADMIN_LOADUSER);
EditMessageText message = new EditMessageText();
message.setChatId(user_id).setParseMode(ParseMode.HTML).setMessageId(toIntExact(message_id))
.setText(MessageConstants.MESSAGE_ADMINTOOLS_LOADUSER);
core.edit_message(message);
}
// *************** admintools x change ROLE/PERMISSION x USER_ID *********************** //
else if (call_data_parts[1].matches("change[^ ]+")) {
String changeData = call_data_parts[1].replace("change", "");
log.info("Change by " + user_name + " - " + user_id + " for " + call_data_parts[2] + " for:" + changeData);
// change Role on match
for (Roles x : Roles.values()) {
if (changeData.equalsIgnoreCase(x.name())) {
MyUser abstractUser = UserManager.loadUser(Long.parseLong(call_data_parts[2]));
// User cannot be found
if (abstractUser == null) {
EditMessageText message = new EditMessageText();
InlineKeyboardMarkup keyboard = buildBackButtonAdmintools();
message.setChatId(user_id).setParseMode(ParseMode.HTML).setMessageId(toIntExact(message_id))
.setReplyMarkup(keyboard).setText(MessageConstants.MESSAGE_ADMINTOOLS_USERNOTFOUND);
core.edit_message(message);
break;
}
// If user already has Role switch: Guest -> User, Admin -> User
else if (abstractUser.getRole() == x) {
//HARDCODED MAY CHANGE PROPERLY OR DO NOT TOUCH!
if (x == Roles.ADMIN) {
abstractUser.setRole(Roles.USER);
} else if (x == Roles.USER) {
abstractUser.setRole(Roles.GUEST);
} else if (x == Roles.GUEST) {
abstractUser.setRole(Roles.USER);
}
UserManager.changeUser(abstractUser, core);
reloadUserEntry(message_id, abstractUser.getId(), user_id);
}
// Otherwise change to Role X
else {
abstractUser.setRole(x);
}
UserManager.changeUser(abstractUser, core);
reloadUserEntry(message_id, abstractUser.getId(), user_id);
break;
}
}
// change Permission on match
for (UserPermission x : UserPermission.values()) {
if (changeData.equalsIgnoreCase(x.name())) {
MyUser user = UserManager.loadUser(Long.parseLong(call_data_parts[2]));
// User cannot be found
if (user == null) {
EditMessageText message = new EditMessageText();
InlineKeyboardMarkup keyboard = buildBackButtonAdmintools();
message.setChatId(user_id).setParseMode(ParseMode.HTML).setMessageId(toIntExact(message_id))
.setReplyMarkup(keyboard).setText(MessageConstants.MESSAGE_ADMINTOOLS_USERNOTFOUND);
core.edit_message(message);
}
// Change Permission status X
else {
user.changePermission(x);
UserManager.changeUser(user, core);
reloadUserEntry(message_id, user.getId(), user_id);
}
break;
}
}
}
// ************************ admintools x block x USERID ******************************//
// Admin want to block a user ask to confirm
else if (call_data_parts[1].equals("block")) {
MyUser user = UserManager.loadUser(Long.parseLong(call_data_parts[2]));
// User cannot be found
if (user == null) {
EditMessageText message = new EditMessageText();
InlineKeyboardMarkup keyboard = buildBackButtonAdmintools();
message.setChatId(user_id).setParseMode(ParseMode.HTML).setMessageId(toIntExact(message_id))
.setReplyMarkup(keyboard).setText(MessageConstants.MESSAGE_ADMINTOOLS_USERNOTFOUND);
core.edit_message(message);
} else {
EditMessageText message = new EditMessageText();
InlineKeyboardMarkup keyboard = buildBlockOptions(user);
String message_text = MessageConstants.MESSAGE_ADMINTOOLS_ABOUTTOBLOCK.replace("$user",
user.getUserName());
message.setChatId(user_id).setParseMode(ParseMode.HTML).setMessageId(toIntExact(message_id))
.setReplyMarkup(keyboard).setText(message_text);
core.edit_message(message);
}
// *********************** admintools x blockapproval x USERID *************************//
// admin confirmed to Block a user
} else if (call_data_parts[1].equals("blockapproval")) {
log.info("BlockApprove by " + user_name + " - " + user_id + " for " + call_data_parts[2]);
MyUser user = UserManager.loadUser(Long.parseLong(call_data_parts[2]));
// User cannot be found
if (user == null) {
user = new MyUser(Integer.parseInt(call_data_parts[2]),"");
}
UserManager.blockUser(user, core);
EditMessageText message = new EditMessageText();
InlineKeyboardMarkup keyboard = buildBackButtonAdmintools();
String message_text = MessageConstants.MESSAGE_ADMINTOOLS_BLOCKED.replace("user", user.getUserName());
message.setChatId(user_id).setParseMode(ParseMode.HTML).setMessageId(toIntExact(message_id))
.setReplyMarkup(keyboard).setText(message_text);
core.edit_message(message);
}
// ******************* admintools x blocklist x _ ****************************************//
//Load current blocklist
else if (call_data_parts[1].equals("blocklist")) {
List<MyUser> blocklist = UserManager.buildBlockList();
EditMessageText message = new EditMessageText();
InlineKeyboardMarkup keyboard = buildBlocklistMenu();
StringBuilder message_text = new StringBuilder();
message_text.append(MessageConstants.MESSAGE_ADMINTOOLS_BLOCKLIST);
for (MyUser user : blocklist) {
message_text.append(user.getUserName()).append(" - <code>").append(user.getId()).append("</code>\n");
}
message.setChatId(user_id).setParseMode(ParseMode.HTML).setMessageId(toIntExact(message_id))
.setReplyMarkup(keyboard).setText(message_text.toString());
core.edit_message(message);
}
//******************** admintools x unblock x USERID ***********************************//
// Load specific user on blocklist to unblock
else if (call_data_parts[1].equals("unblock")) {
log.info("UnBlock by " + user_name + " - " + user_id);
core.getUserMap().get(user_id).setState(State.ADMIN_UNBLOCKUSER);
EditMessageText message = new EditMessageText();
message.setChatId(user_id).setParseMode(ParseMode.HTML).setMessageId(toIntExact(message_id))
.setText(MessageConstants.MESSAGE_ADMINTOOLS_UNBLOCK);
core.edit_message(message);
}
}
///////////////////////////////////
// CHAT HANDEL
///////////////////////////////////
else if (call_data.startsWith("chats") && UserManager.checkAdmin(user_id)) {
String[] call_data_parts = call_data.split(" ");
if ((call_data_parts[1].equalsIgnoreCase("addcategory"))) {
EditMessageText messageText = new EditMessageText()
.setChatId(user_id)
.setMessageId(Math.toIntExact(message_id))
.setParseMode(ParseMode.HTML)
.setText(MessageConstants.MESSAGE_CHATS_ADDCATEGORY);
core.getUserMap().get(user_id).setState(State.ADMIN_ADDCHATCATEGORY);
core.edit_message(messageText);
}
else if ((call_data_parts[1].equalsIgnoreCase("addchat"))) {
EditMessageText messageText = new EditMessageText()
.setChatId(user_id)
.setMessageId(Math.toIntExact(message_id))
.setParseMode(ParseMode.HTML)
.setText("Okay! Bitte gib mir zuerst eine noch nicht verwendete Chatnummer (maximal 4-stellige Ganzzahl) für den Chat.");
adminCurrentCategoryMap.put(user_id, Long.valueOf(call_data_parts[2]));
core.getUserMap().get(user_id).setState(State.ADMIN_ADDCHATUID);
core.edit_message(messageText);
}
else if ((call_data_parts[1].equalsIgnoreCase("editcategory"))) {
long uid = Long.parseLong(call_data_parts[2]);
ChatCategory category = ChatManager.loadCategory(uid);
InlineKeyboardMarkup keyboardMarkup = buildEditCategory(category);
String text = MessageConstants.MESSAGE_CHATS_ADMINEDITCATEGORY.replace("$category", category.getName());
EditMessageText messageText = new EditMessageText()
.setChatId(user_id)
.setMessageId(Math.toIntExact(message_id))
.setParseMode(ParseMode.HTML)
.setReplyMarkup(keyboardMarkup)
.setText(text);
core.edit_message(messageText);
}
else if ((call_data_parts[1].equalsIgnoreCase("editchat")))
{
EditMessageText messageText = new EditMessageText()
.setChatId(user_id)
.setMessageId(Math.toIntExact(message_id))
.setParseMode(ParseMode.HTML)
.setText(MessageConstants.MESSAGE_CHATS_LOADCHAT);
adminCurrentCategoryMap.put(user_id, Long.valueOf(call_data_parts[2]));
core.getUserMap().get(user_id).setState(State.ADMIN_EDITCHAT);
core.edit_message(messageText);
}
else if ((call_data_parts[1].equalsIgnoreCase("deletechat"))) {
long chatId = Long.parseLong(call_data_parts[2]);
long categoryId = Long.parseLong(call_data_parts[3]);
ChatManager.deleteChat(chatId);
InlineKeyboardMarkup keyboard = buildEditCategory(ChatManager.loadCategory(categoryId));
EditMessageText messageText = new EditMessageText()
.setChatId(user_id)
.setMessageId(Math.toIntExact(message_id))
.setReplyMarkup(keyboard)
.setParseMode(ParseMode.HTML)
.setText(MessageConstants.MESSAGE_CHATS_CHATDELETED);
core.edit_message(messageText);
}
else if ((call_data_parts[1].equalsIgnoreCase("deletecategory"))) {
long uid = Long.parseLong(call_data_parts[2]);
ChatCategory category = ChatManager.loadCategory(uid);
InlineKeyboardMarkup keyboardMarkup = buildConfirmCategoryDelete(category);
String text = MessageConstants.MESSAGE_CHATS_ADMINDELETECATEGORY.replace("$category", category.getName());
EditMessageText messageText = new EditMessageText()
.setChatId(user_id)
.setMessageId(Math.toIntExact(message_id))
.setParseMode(ParseMode.HTML)
.setReplyMarkup(keyboardMarkup)
.setText(text);
core.edit_message(messageText);
}
else if ((call_data_parts[1].equalsIgnoreCase("deletecategoryconfirm"))) {
long uid = Long.parseLong(call_data_parts[2]);
ChatManager.deleteCategory(uid);
InlineKeyboardMarkup keyboardMarkup = buildCategoriesMenu(user_id);
EditMessageText messageText = new EditMessageText()
.setChatId(user_id)
.setMessageId(Math.toIntExact(message_id))
.setParseMode(ParseMode.HTML)
.setReplyMarkup(keyboardMarkup)
.setText(MessageConstants.MESSAGE_CHATS_ADMINCATEGORYDELETED);
core.edit_message(messageText);
}
else if ((call_data_parts[1].equalsIgnoreCase("addpermission"))) {
Chat chat = (Chat) adminAddChatMap.get(user_id);
adminAddChatMap.remove(user_id);
UserPermission permission = UserPermission.valueOf(call_data_parts[2]);
chat.setPermissionNeeded(permission);
ChatCategory category = ChatManager.loadCategory((adminCurrentCategoryMap.get(user_id)));
adminCurrentCategoryMap.remove(user_id);
ChatManager.saveChat(chat, category.getUid());
InlineKeyboardMarkup keyboardMarkup = buildEditCategory(category);
EditMessageText messageText = new EditMessageText()
.setChatId(user_id)
.setMessageId(Math.toIntExact(message_id))
.setParseMode(ParseMode.HTML)
.setReplyMarkup(keyboardMarkup)
.setText(MessageConstants.MESSAGE_CHATS_CHATADDED);
core.edit_message(messageText);
}
else if ((call_data_parts[1].equalsIgnoreCase("changeuid"))) {
adminCurrentCategoryMap.put(user_id, Long.valueOf(call_data_parts[3]));
adminAddChatMap.put(user_id, ChatManager.loadChatFromCategory(Long.parseLong(call_data_parts[2]), Long.parseLong(call_data_parts[3])));
EditMessageText messageText = new EditMessageText()
.setChatId(user_id)
.setMessageId(Math.toIntExact(message_id))
.setParseMode(ParseMode.HTML)
.setText(MessageConstants.MESSAGE_CHATS_CHANGEUID);
core.edit_message(messageText);
core.getUserMap().get(user_id).setState(State.ADMIN_CHANGECHATUID);
}
else if ((call_data_parts[1].equalsIgnoreCase("changeurl"))) {
adminCurrentCategoryMap.put(user_id, Long.valueOf(call_data_parts[3]));
adminAddChatMap.put(user_id, ChatManager.loadChatFromCategory(Long.parseLong(call_data_parts[2]), Long.parseLong(call_data_parts[3])));
EditMessageText messageText = new EditMessageText()
.setChatId(user_id)
.setMessageId(Math.toIntExact(message_id))
.setParseMode(ParseMode.HTML)
.setText(MessageConstants.MESSAGE_CHATS_CHANGEURL);
core.edit_message(messageText);
core.getUserMap().get(user_id).setState(State.ADMIN_CHANGECHATURL);
}
else if ((call_data_parts[1].equalsIgnoreCase("changename"))) {
adminCurrentCategoryMap.put(user_id, Long.valueOf(call_data_parts[3]));
adminAddChatMap.put(user_id, ChatManager.loadChatFromCategory(Long.parseLong(call_data_parts[2]), Long.parseLong(call_data_parts[3])));
EditMessageText messageText = new EditMessageText()
.setChatId(user_id)
.setMessageId(Math.toIntExact(message_id))
.setParseMode(ParseMode.HTML)
.setText(MessageConstants.MESSAGE_CHATS_CHANGENAME);
core.edit_message(messageText);
core.getUserMap().get(user_id).setState(State.ADMIN_CHANGECHATNAME);
}
else if ((call_data_parts[1].equalsIgnoreCase("changepermission"))) {
adminCurrentCategoryMap.put(user_id, Long.valueOf(call_data_parts[3]));
adminAddChatMap.put(user_id, ChatManager.loadChatFromCategory(Long.parseLong(call_data_parts[2]), Long.parseLong(call_data_parts[3])));
InlineKeyboardMarkup keyboardMarkup = buildChangePermissions();
EditMessageText messageText = new EditMessageText()
.setChatId(user_id)
.setMessageId(Math.toIntExact(message_id))
.setReplyMarkup(keyboardMarkup)
.setParseMode(ParseMode.HTML)
.setText(MessageConstants.MESSAGE_CHATS_CHANGEPERMISSION);
core.edit_message(messageText);
core.getUserMap().get(user_id).setState(State.ADMIN_CHANGECHATUID);
}
else if ((call_data_parts[1].equalsIgnoreCase("changepermissionconfirm"))) {
UserPermission permission = UserPermission.valueOf(call_data_parts[2]);
Chat chat = adminAddChatMap.get(user_id);
chat.setPermissionNeeded(permission);
ChatManager.saveChat(chat, adminCurrentCategoryMap.get(user_id));
InlineKeyboardMarkup keyboardMarkup = buildEditChat(chat, adminCurrentCategoryMap.get(user_id));
adminAddChatMap.remove(user_id);
adminCurrentCategoryMap.remove(user_id);
core.getUserMap().get(user_id).setState(null);
String respond = MessageConstants.MESSAGE_CHATS_CHATFOUND.replace("$fullname", chat.getFullName()).replace("$permission", chat.getPermissionNeeded().toString()).replace("$url", chat.getUrl());
EditMessageText messageText = new EditMessageText()
.setChatId(user_id)
.setMessageId(Math.toIntExact(message_id))
.setReplyMarkup(keyboardMarkup)
.setParseMode(ParseMode.HTML)
.setText(respond);
core.edit_message(messageText);
}
}
}
}
/*----------Help Methods to load or reload a User Entry----------*/
private void loadUserEntry(long userID, long adminId) {
MyUser abstractUser = UserManager.loadUser(userID);
//Send Error message if no user is found
if (abstractUser == null) {
SendMessage message = new SendMessage().setChatId(adminId).setParseMode(ParseMode.HTML).setText(
MessageConstants.MESSAGE_ADMINTOOLS_USERNOTFOUND);
core.send_message(message);
}
//Check that no one is able to load himself
else if (abstractUser.getId() == adminId) {
InlineKeyboardMarkup keyboardMarkup = buildBackButtonWhitelist();
SendMessage messageText = new SendMessage().setChatId(adminId).setParseMode(ParseMode.HTML).setReplyMarkup(
keyboardMarkup).setText(MessageConstants.MESSAGE_ADMINTOOLS_CANTCHANGESELF);
core.getUserMap().get(adminId).setState(null);
core.send_message(messageText);
}
//Check that no one is able to load the Master
else if (abstractUser.getId() == Core.ADMIN_CHAT_ID) {
InlineKeyboardMarkup keyboardMarkup = buildBackButtonWhitelist();
SendMessage message = new SendMessage().setChatId(adminId).setParseMode(ParseMode.HTML).setReplyMarkup(
keyboardMarkup).setText(MessageConstants.MESSAGE_ADMINTOOLS_CANTCHANGEMASTER);
core.getUserMap().get(adminId).setState(null);
core.send_message(message);
}
//Load User
else if (abstractUser.getRole() == Roles.ADMIN) {
InlineKeyboardMarkup keyboardMarkup = buildAdminFound(abstractUser);
String text = MessageConstants.MESSAGE_ADMINTOOLS_ADMINFOUND.replace("$user", abstractUser.getUserName());
SendMessage message = new SendMessage().setChatId(adminId).setParseMode(ParseMode.HTML).setReplyMarkup(
keyboardMarkup).setText(text);
core.getUserMap().get(adminId).setState(null);
core.send_message(message);
} else if (abstractUser.getRole() == Roles.GUEST) {
InlineKeyboardMarkup keyboardMarkup = buildGuestFound(abstractUser);
String text = MessageConstants.MESSAGE_ADMINTOOLS_GUESTFOUND.replace("$user", abstractUser.getUserName());
SendMessage message = new SendMessage().setChatId(adminId).setParseMode(ParseMode.HTML).setReplyMarkup(
keyboardMarkup).setText(text);
core.getUserMap().get(adminId).setState(null);
core.send_message(message);
} else if (abstractUser.getRole() == Roles.USER) {
InlineKeyboardMarkup keyboardMarkup = buildUserFound(abstractUser);
StringBuilder text = new StringBuilder();
text.append(MessageConstants.MESSAGE_ADMINTOOLS_USERFOUND.replace("$user", abstractUser.getUserName()));
if (abstractUser.getPermission() != null && abstractUser.getPermission().size() > 0) {
for (UserPermission permission : abstractUser.getPermission()) {
text.append("\n").append(permission.toString());
}
}
SendMessage message = new SendMessage().setChatId(adminId).setParseMode(ParseMode.HTML).setReplyMarkup(
keyboardMarkup).setText(text.toString());
core.getUserMap().get(adminId).setState(null);
core.send_message(message);
}
}
//check
private void reloadUserEntry(long messageId, long userID, long adminId) {
MyUser abstractUser = UserManager.loadUser(userID);
//Send Error message if no user is found
if (abstractUser == null) {
EditMessageText message = new EditMessageText().setChatId(adminId).setMessageId(toIntExact(messageId))
.setParseMode(ParseMode.HTML).setText(MessageConstants.MESSAGE_ADMINTOOLS_USERNOTFOUND);
core.edit_message(message);
}
//Load User
else if (abstractUser.getRole() == Roles.ADMIN) {
InlineKeyboardMarkup keyboardMarkup = buildAdminFound(abstractUser);
String text = MessageConstants.MESSAGE_ADMINTOOLS_ADMINFOUND
.replace("$user", abstractUser.getUserName());
EditMessageText message = new EditMessageText().setChatId(adminId).setMessageId(toIntExact(messageId))
.setParseMode(ParseMode.HTML).setReplyMarkup(keyboardMarkup).setText(text);
core.edit_message(message);
} else if (abstractUser.getRole() == Roles.GUEST) {
InlineKeyboardMarkup keyboardMarkup = buildGuestFound(abstractUser);
String text = MessageConstants.MESSAGE_ADMINTOOLS_GUESTFOUND.replace("$user", abstractUser.getUserName());
EditMessageText message = new EditMessageText().setChatId(adminId).setMessageId(toIntExact(messageId))
.setParseMode(ParseMode.HTML).setReplyMarkup(keyboardMarkup).setText(text);
core.edit_message(message);
} else if (abstractUser.getRole() == Roles.USER) {
InlineKeyboardMarkup keyboardMarkup = buildUserFound(abstractUser);
StringBuilder text = new StringBuilder();
text.append(MessageConstants.MESSAGE_ADMINTOOLS_USERFOUND.replace("$user", abstractUser.getUserName()));
if (abstractUser.getPermission() != null && abstractUser.getPermission().size() > 0) {
for (UserPermission permission : abstractUser.getPermission()) {
text.append("\n").append(permission.toString());
}
}
EditMessageText message = new EditMessageText().setChatId(adminId).setMessageId(toIntExact(messageId))
.setParseMode(ParseMode.HTML).setReplyMarkup(keyboardMarkup).setText(text.toString());
core.edit_message(message);
}
}
}