Search in sources :

Example 16 with User

use of mc.dragons.core.gameobject.user.User in project DragonsOnline by UniverseCraft.

the class StuckQuestCommand method selectQuest.

private void selectQuest(CommandSender sender) {
    User user = user(sender);
    boolean any = false;
    for (Entry<Quest, QuestStep> entry : user.getQuestProgress().entrySet()) {
        if (entry.getValue().getStepName().equalsIgnoreCase("Complete"))
            continue;
        any = true;
    }
    if (!any) {
        sender.sendMessage(ChatColor.RED + "You don't have any active quests!");
        return;
    }
    sender.sendMessage(" ");
    sender.sendMessage(ChatColor.YELLOW + "" + ChatColor.BOLD + "Please confirm the quest you are having issues with:");
    for (Entry<Quest, QuestStep> entry : user.getQuestProgress().entrySet()) {
        if (entry.getValue().getStepName().equalsIgnoreCase("Complete"))
            continue;
        sender.spigot().sendMessage(StringUtil.clickableHoverableText(ChatColor.GRAY + " • " + ChatColor.GREEN + entry.getKey().getQuestName(), "/stuckquest " + entry.getKey().getName(), ChatColor.GRAY + "Quest: " + ChatColor.RESET + entry.getKey().getQuestName()));
    }
    sender.sendMessage(" ");
    sender.sendMessage(ChatColor.GRAY + "Click on one of the quests above to continue with the report.");
    sender.sendMessage(" ");
}
Also used : User(mc.dragons.core.gameobject.user.User) QuestStep(mc.dragons.core.gameobject.quest.QuestStep) Quest(mc.dragons.core.gameobject.quest.Quest)

Example 17 with User

use of mc.dragons.core.gameobject.user.User in project DragonsOnline by UniverseCraft.

the class ReportLoader method fileStaffReport.

public Report fileStaffReport(List<User> targets, User staff, String message, String confirmCommand) {
    if (staff.getActivePermissionLevel().ordinal() == PermissionLevel.SYSOP.ordinal()) {
        return null;
    }
    PermissionLevel permissionReq = null;
    for (PermissionLevel level : PermissionLevel.values()) {
        if (level.ordinal() == staff.getActivePermissionLevel().ordinal() + 1) {
            permissionReq = level;
            break;
        }
    }
    Document data = new Document().append("type", ReportType.STAFF_ESCALATION.toString()).append("target", targets.stream().map(u -> u.getUUID().toString()).collect(Collectors.toList())).append("priority", // Escalations go to the very tippity top of the queue
    100).append("filedBy", List.of(staff.getUUID().toString())).append("data", new Document("message", message).append("confirmCommand", confirmCommand).append("permissionReq", permissionReq.toString()).append("states", getStateTokens(targets)));
    Report report = fileReport(data);
    reportNotify(report.getId(), staff.getName() + " escalated an issue with " + StringUtil.parseList(targets.stream().map(u -> u.getName()).collect(Collectors.toList())) + ": " + message);
    return report;
}
Also used : Document(org.bson.Document) AbstractLightweightLoader(mc.dragons.core.storage.loader.AbstractLightweightLoader) Iterables(com.google.common.collect.Iterables) MongoConfig(mc.dragons.core.storage.mongo.MongoConfig) MessageData(mc.dragons.core.gameobject.user.chat.MessageData) PermissionUtil(mc.dragons.core.util.PermissionUtil) Date(java.util.Date) User(mc.dragons.core.gameobject.user.User) HashMap(java.util.HashMap) PaginationUtil(mc.dragons.core.storage.mongo.pagination.PaginationUtil) ArrayList(java.util.ArrayList) PaginatedResult(mc.dragons.core.storage.mongo.pagination.PaginatedResult) GameObjectType(mc.dragons.core.gameobject.GameObjectType) Report(mc.dragons.tools.moderation.report.ReportLoader.Report) PermissionLevel(mc.dragons.core.gameobject.user.permission.PermissionLevel) Map(java.util.Map) StringUtil(mc.dragons.core.util.StringUtil) UserLoader(mc.dragons.core.gameobject.user.UserLoader) UUID(java.util.UUID) Instant(java.time.Instant) Collectors(java.util.stream.Collectors) Dragons(mc.dragons.core.Dragons) List(java.util.List) FindIterable(com.mongodb.client.FindIterable) DeleteResult(com.mongodb.client.result.DeleteResult) Report(mc.dragons.tools.moderation.report.ReportLoader.Report) PermissionLevel(mc.dragons.core.gameobject.user.permission.PermissionLevel) Document(org.bson.Document)

Example 18 with User

use of mc.dragons.core.gameobject.user.User in project DragonsOnline by UniverseCraft.

the class ReportLoader method fileHoldReport.

public Report fileHoldReport(List<User> targets, User staff, String reason, int holdId, boolean escalate) {
    Document internalData = new Document("reason", reason).append("holdId", holdId).append("states", getStateTokens(targets));
    if (escalate) {
        PermissionLevel permissionReq = null;
        for (PermissionLevel level : PermissionLevel.values()) {
            if (level.ordinal() == staff.getActivePermissionLevel().ordinal() + 1) {
                permissionReq = level;
                break;
            }
        }
        internalData.append("permissionReq", permissionReq.toString());
    }
    Document data = new Document().append("type", ReportType.HOLD.toString()).append("target", targets.stream().map(u -> u.getUUID().toString()).collect(Collectors.toList())).append("priority", // Escalations go to the very tippity top of the queue
    escalate ? 100 : 0).append("filedBy", List.of(staff.getUUID().toString())).append("data", internalData.append("states", getStateTokens(targets)));
    Report report = fileReport(data);
    reportNotify(report.getId(), staff.getName() + " placed a hold on " + StringUtil.parseList(targets.stream().map(u -> u.getName()).collect(Collectors.toList())) + ": " + reason);
    return report;
}
Also used : Document(org.bson.Document) AbstractLightweightLoader(mc.dragons.core.storage.loader.AbstractLightweightLoader) Iterables(com.google.common.collect.Iterables) MongoConfig(mc.dragons.core.storage.mongo.MongoConfig) MessageData(mc.dragons.core.gameobject.user.chat.MessageData) PermissionUtil(mc.dragons.core.util.PermissionUtil) Date(java.util.Date) User(mc.dragons.core.gameobject.user.User) HashMap(java.util.HashMap) PaginationUtil(mc.dragons.core.storage.mongo.pagination.PaginationUtil) ArrayList(java.util.ArrayList) PaginatedResult(mc.dragons.core.storage.mongo.pagination.PaginatedResult) GameObjectType(mc.dragons.core.gameobject.GameObjectType) Report(mc.dragons.tools.moderation.report.ReportLoader.Report) PermissionLevel(mc.dragons.core.gameobject.user.permission.PermissionLevel) Map(java.util.Map) StringUtil(mc.dragons.core.util.StringUtil) UserLoader(mc.dragons.core.gameobject.user.UserLoader) UUID(java.util.UUID) Instant(java.time.Instant) Collectors(java.util.stream.Collectors) Dragons(mc.dragons.core.Dragons) List(java.util.List) FindIterable(com.mongodb.client.FindIterable) DeleteResult(com.mongodb.client.result.DeleteResult) Report(mc.dragons.tools.moderation.report.ReportLoader.Report) Document(org.bson.Document) PermissionLevel(mc.dragons.core.gameobject.user.permission.PermissionLevel)

Example 19 with User

use of mc.dragons.core.gameobject.user.User in project DragonsOnline by UniverseCraft.

the class ReportsCommand method onCommand.

@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
    if (!requirePermission(sender, SystemProfileFlag.MODERATION))
        return true;
    if (args.length == 0) {
        sender.sendMessage(ChatColor.RED + "/reports <all|all-open|escalation|chat|internal|regular|hold|watchlist|by <player>|on <player>> [-page <#>]");
        sender.sendMessage(ChatColor.GRAY + "Note: Moderators can only use /reports <watchlist|by|on>");
        return true;
    }
    int pageFlagIndex = StringUtil.getFlagIndex(args, "-page", 0);
    Integer page = 1;
    if (pageFlagIndex != -1) {
        page = parseInt(sender, args[++pageFlagIndex]);
        if (page == null)
            return true;
    }
    SystemProfileFlag req = SystemProfileFlag.APPEALS_TEAM;
    PaginatedResult<Report> results = null;
    if (args[0].equalsIgnoreCase("all-open")) {
        results = reportLoader.getReportsByStatus(ReportStatus.OPEN, page);
    } else if (args[0].equalsIgnoreCase("all")) {
        results = reportLoader.getAllReports(page);
    } else if (args[0].equalsIgnoreCase("escalation")) {
        results = reportLoader.getReportsByType(ReportType.STAFF_ESCALATION, page);
    } else if (args[0].equalsIgnoreCase("chat")) {
        results = reportLoader.getReportsByType(ReportType.CHAT, page);
    } else if (args[0].equalsIgnoreCase("internal")) {
        results = reportLoader.getReportsByType(ReportType.AUTOMATED, page);
    } else if (args[0].equalsIgnoreCase("regular")) {
        results = reportLoader.getReportsByType(ReportType.REGULAR, page);
    } else if (args[0].equalsIgnoreCase("hold")) {
        results = reportLoader.getReportsByType(ReportType.HOLD, page);
    } else if (args[0].equalsIgnoreCase("watchlist")) {
        req = SystemProfileFlag.MODERATION;
        results = reportLoader.getReportsByTypeAndStatus(ReportType.WATCHLIST, ReportStatus.OPEN, page);
    } else if (args[0].equalsIgnoreCase("by")) {
        if (args.length == 1) {
            sender.sendMessage(ChatColor.RED + "/reports by <player>");
            return true;
        }
        User filter = lookupUser(sender, args[1]);
        if (filter == null)
            return true;
        results = reportLoader.getReportsByFiler(filter, page);
    } else if (args[0].equalsIgnoreCase("on")) {
        req = SystemProfileFlag.MODERATION;
        if (args.length == 1) {
            sender.sendMessage(ChatColor.RED + "/reports on <player>");
            return true;
        }
        User filter = lookupUser(sender, args[1]);
        if (filter == null)
            return true;
        if (filter.equals(user(sender)) && !hasPermission(sender, PermissionLevel.ADMIN)) {
            sender.sendMessage(ChatColor.RED + "You cannot look up reports on yourself!");
            return true;
        }
        results = reportLoader.getReportsByTarget(filter, page);
    } else {
        sender.sendMessage(ChatColor.RED + "Invalid usage!");
        return true;
    }
    if (!hasPermission(sender, PermissionLevel.ADMIN) && !requirePermission(sender, req))
        return true;
    if (results.getTotal() == 0) {
        sender.sendMessage(ChatColor.RED + "No results returned for this query!");
        return true;
    }
    TableGenerator tg = new TableGenerator(Alignment.LEFT, Alignment.LEFT, Alignment.LEFT, Alignment.LEFT, Alignment.LEFT, Alignment.LEFT);
    tg.addRow(COL_ID, COL_TARGET, COL_PREVIEW, COL_TYPE, COL_STATUS, COL_FILER);
    String idPrefix = ChatColor.AQUA + "";
    String dataPrefix = ChatColor.GRAY + "";
    for (Report report : results.getPage()) {
        String targets = report.getTargets().get(0).getName();
        if (report.getTargets().size() > 1) {
            targets += " +" + (report.getTargets().size() - 1);
        }
        String by = "";
        if (report.getFiledBy().size() > 0) {
            by = report.getFiledBy().get(0).getName();
        }
        if (report.getFiledBy().size() > 1) {
            by += " +" + (report.getFiledBy().size() - 1);
        }
        tg.addRowEx("/viewreport " + report.getId(), ChatColor.GRAY + "Click to view report #" + report.getId(), idPrefix + "#" + report.getId(), dataPrefix + targets, dataPrefix + StringUtil.truncateWithEllipsis(report.getPreview(), 30), dataPrefix + report.getType(), dataPrefix + report.getStatus(), dataPrefix + by);
    }
    sender.sendMessage(ChatColor.GREEN + "Page " + page + " of " + results.getPages() + " (" + results.getTotal() + " results)");
    tg.display(sender);
    return true;
}
Also used : SystemProfileFlag(mc.dragons.core.gameobject.user.permission.SystemProfile.SystemProfileFlags.SystemProfileFlag) User(mc.dragons.core.gameobject.user.User) Report(mc.dragons.tools.moderation.report.ReportLoader.Report) TableGenerator(mc.dragons.core.util.TableGenerator)

Example 20 with User

use of mc.dragons.core.gameobject.user.User in project DragonsOnline by UniverseCraft.

the class CmdUtil method parse.

public static CmdData parse(CommandSender sender, String suggestCommand, String[] args, String... flags) {
    CmdData data = new CmdData();
    int uuidFlagIndex = StringUtil.getFlagIndex(args, "-uuid", 0);
    int reasonIndex = 0;
    data.targets = new ArrayList<>();
    List<String> targetUserErrors = new ArrayList<>();
    for (int i = 0; i < args.length; i++) {
        PunishmentCode test = PunishmentCode.getByCode(args[i]);
        if (test == null) {
            User target = uuidFlagIndex == -1 ? userLoader.loadObject(args[i]) : userLoader.loadObject(UUID.fromString(args[i]));
            if (target == null) {
                targetUserErrors.add(DragonsCommandExecutor.ERR_USER_NOT_FOUND + " (\"" + args[i] + "\")");
            }
            data.targets.add(target);
            reasonIndex = i + 1;
        } else {
            if (i == 0) {
                sender.sendMessage(ChatColor.RED + "Specify a player! " + suggestCommand);
                return null;
            }
            data.code = test;
            reasonIndex = i + 1;
            break;
        }
    }
    if (data.code != null && targetUserErrors.size() > 0) {
        for (String error : targetUserErrors) {
            sender.sendMessage(error);
        }
        return null;
    }
    if (targetUserErrors.size() > 0) {
        return null;
    }
    if (data.code == null) {
        sender.sendMessage(ChatColor.RED + "Invalid punishment code! Valid codes are:");
        PunishmentCode.showPunishmentCodes(sender, suggestCommand.replaceAll(Pattern.quote("<players>"), StringUtil.parseList(data.targets.stream().map(u -> u.getName()).collect(Collectors.toList()), " ")));
        return null;
    }
    int minFlagIndex = uuidFlagIndex;
    for (String flag : flags) {
        int index = StringUtil.getFlagIndex(args, flag, 0);
        if (minFlagIndex == -1 || index < minFlagIndex)
            minFlagIndex = index;
    }
    data.extraInfo = StringUtil.concatArgs(args, reasonIndex, minFlagIndex);
    return data;
}
Also used : User(mc.dragons.core.gameobject.user.User) ArrayList(java.util.ArrayList) PunishmentCode(mc.dragons.tools.moderation.punishment.PunishmentCode)

Aggregations

User (mc.dragons.core.gameobject.user.User)157 Player (org.bukkit.entity.Player)49 Document (org.bson.Document)28 EventHandler (org.bukkit.event.EventHandler)26 UUID (java.util.UUID)25 List (java.util.List)22 StringUtil (mc.dragons.core.util.StringUtil)21 ArrayList (java.util.ArrayList)19 ChatColor (org.bukkit.ChatColor)19 Collectors (java.util.stream.Collectors)18 WrappedUser (mc.dragons.tools.moderation.WrappedUser)17 Dragons (mc.dragons.core.Dragons)14 DragonsCommandExecutor (mc.dragons.core.commands.DragonsCommandExecutor)14 Item (mc.dragons.core.gameobject.item.Item)14 UserLoader (mc.dragons.core.gameobject.user.UserLoader)14 PermissionLevel (mc.dragons.core.gameobject.user.permission.PermissionLevel)14 Command (org.bukkit.command.Command)14 CommandSender (org.bukkit.command.CommandSender)14 NPC (mc.dragons.core.gameobject.npc.NPC)13 SystemProfileFlag (mc.dragons.core.gameobject.user.permission.SystemProfile.SystemProfileFlags.SystemProfileFlag)12