Search in sources :

Example 1 with StatsDaily

use of me.semx11.autotip.stats.StatsDaily in project Hyperium by HyperiumClient.

the class EventChatReceived method onChat.

@InvokeEvent
public void onChat(ServerChatEvent event) {
    Config config = autotip.getConfig();
    if (!autotip.getSessionManager().isOnHypixel()) {
        return;
    }
    String msg = UniversalUtil.getUnformattedText(event);
    CommandLimbo limboCommand = autotip.getCommand(CommandLimbo.class);
    if (limboCommand.hasExecuted()) {
        if (msg.startsWith("A kick occurred in your connection")) {
            event.setCancelled(true);
        } else if (msg.startsWith("Illegal characters in chat")) {
            event.setCancelled(true);
            limboCommand.setExecuted(false);
        }
    }
    if (!config.isEnabled())
        return;
    GlobalSettings settings = autotip.getGlobalSettings();
    MessageOption option = config.getMessageOption();
    for (Message message : settings.getMessages()) {
        MessageMatcher matcher = message.getMatcherFor(msg);
        if (matcher.matches()) {
            event.setCancelled(message.shouldHide(option));
            return;
        }
    }
    String hover = UniversalUtil.getHoverText(event);
    settings.getStatsMessages().forEach(message -> {
        StatsMessageMatcher matcher = message.getMatcherFor(msg);
        if (!matcher.matches())
            return;
        StatsDaily stats = getStats();
        matcher.applyStats(stats);
        message.applyHoverStats(hover, stats);
        event.setCancelled(message.shouldHide(option));
    });
}
Also used : StatsMessageMatcher(me.semx11.autotip.message.StatsMessageMatcher) MessageMatcher(me.semx11.autotip.message.MessageMatcher) StatsMessageMatcher(me.semx11.autotip.message.StatsMessageMatcher) Message(me.semx11.autotip.message.Message) Config(me.semx11.autotip.config.Config) CommandLimbo(me.semx11.autotip.command.impl.CommandLimbo) MessageOption(me.semx11.autotip.chat.MessageOption) GlobalSettings(me.semx11.autotip.config.GlobalSettings) StatsDaily(me.semx11.autotip.stats.StatsDaily) InvokeEvent(cc.hyperium.event.InvokeEvent)

Example 2 with StatsDaily

use of me.semx11.autotip.stats.StatsDaily in project Hyperium by HyperiumClient.

the class CommandAutotip method onExecute.

@Override
public void onExecute(String[] args) {
    Config config = autotip.getConfig();
    MessageUtil messageUtil = autotip.getMessageUtil();
    TaskManager taskManager = autotip.getTaskManager();
    SessionManager manager = autotip.getSessionManager();
    StatsManager stats = autotip.getStatsManager();
    GlobalSettings settings = autotip.getGlobalSettings();
    if (args.length <= 0) {
        messageUtil.sendKey("command.usage");
        return;
    }
    switch(args[0].toLowerCase()) {
        case "s":
        case "stats":
            LocalDate now = LocalDate.now();
            if (args.length <= 1) {
                stats.get(now).print();
                return;
            }
            String param = args[1].toLowerCase();
            switch(param) {
                case "d":
                case "day":
                case "daily":
                case "today":
                    stats.get(now).print();
                    break;
                case "yd":
                case "yesterday":
                    stats.get(now.minusDays(1)).print();
                    break;
                case "w":
                case "week":
                case "weekly":
                    stats.getRange(now.with(DayOfWeek.MONDAY), now.with(DayOfWeek.SUNDAY)).print();
                    break;
                case "m":
                case "month":
                case "monthly":
                    stats.getRange(now.withDayOfMonth(1), now.withDayOfMonth(now.lengthOfMonth())).print();
                    break;
                case "y":
                case "year":
                case "yearly":
                    stats.getRange(now.withDayOfYear(1), now.withDayOfYear(now.lengthOfYear())).print();
                    break;
                case "a":
                case "all":
                case "total":
                case "life":
                case "lifetime":
                    stats.getAll().print();
                    break;
                default:
                    if (param.contains("-")) {
                        List<LocalDate> dates = Arrays.stream(param.split("-")).map(string -> {
                            try {
                                return LocalDate.parse(string, DATE_FORMAT);
                            } catch (DateTimeParseException e) {
                                return null;
                            }
                        }).filter(Objects::nonNull).limit(2).sorted().collect(Collectors.toList());
                        if (dates.size() != 2) {
                            messageUtil.sendKey("command.stats.invalidRange");
                            return;
                        }
                        stats.getRange(dates.get(0), dates.get(1)).print();
                    } else if (param.contains("/")) {
                        try {
                            LocalDate date = LocalDate.parse(param, DATE_FORMAT);
                            stats.get(date).print();
                        } catch (DateTimeParseException e) {
                            messageUtil.sendKey("command.stats.invalidDate");
                        }
                    } else {
                        messageUtil.sendKey("command.stats.usage");
                    }
                    break;
            }
            break;
        case "?":
        case "info":
            StatsDaily today = stats.get();
            messageUtil.getKeyHelper("command.info").separator().sendKey("version", autotip.getVersion()).withKey("credits", context -> context.getBuilder().setHover(context.getKey("creditsHover")).send()).sendKey("status." + (config.isEnabled() ? "enabled" : "disabled")).sendKey("messages", config.getMessageOption()).sendKey("tipsSent", today.getTipsSent()).sendKey("tipsReceived", today.getTipsReceived()).sendKey("statsCommand").separator();
            break;
        case "m":
        case "messages":
            try {
                if (args.length > 1) {
                    MessageOption option = MessageOption.valueOfIgnoreCase(args[1]);
                    config.setMessageOption(option).save();
                } else {
                    config.nextMessageOption().save();
                }
                messageUtil.sendKey("command.messages.next", config.getMessageOption());
            } catch (IllegalArgumentException e) {
                messageUtil.sendKey("command.messages.error", args.length > 1 ? args[1] : null);
            }
            break;
        case "t":
        case "toggle":
            if (!manager.isOnHypixel()) {
                config.toggleEnabled().save();
                messageUtil.getKeyHelper("command.toggle").sendKey(config.isEnabled() ? "enabled" : "disabled");
                return;
            }
            if (!config.isEnabled()) {
                if (!manager.isLoggedIn()) {
                    taskManager.executeTask(TaskType.LOGIN, manager::login);
                    config.setEnabled(true).save();
                    messageUtil.sendKey("command.toggle.enabled");
                } else {
                    messageUtil.sendKey("command.toggle.error");
                }
            } else {
                if (manager.isLoggedIn()) {
                    taskManager.executeTask(TaskType.LOGOUT, manager::logout);
                    config.setEnabled(false).save();
                    messageUtil.sendKey("command.toggle.disabled");
                } else {
                    messageUtil.sendKey("command.toggle.error");
                }
            }
            break;
        case "w":
        case "wave":
            if (!config.isEnabled()) {
                messageUtil.sendKey("error.disabled");
                return;
            }
            if (!manager.isOnHypixel()) {
                messageUtil.sendKey("error.disabledHypixel");
                return;
            }
            if (manager.getNextTipWave() == 0) {
                messageUtil.sendKey("command.wave.error");
                return;
            }
            long t = System.currentTimeMillis();
            String next = LocalTime.MIN.plusSeconds((manager.getNextTipWave() - t) / 1000 + 1).format(WAVE_FORMAT);
            String last = LocalTime.MIN.plusSeconds((t - manager.getLastTipWave()) / 1000).format(WAVE_FORMAT);
            messageUtil.getKeyHelper("command.wave").separator().sendKey("nextWave", next).sendKey("lastWave", last).separator();
            break;
        case "changelog":
            messageUtil.getKeyHelper("command.changelog").separator().sendKey("version", autotip.getVersion()).withKey("entry", context -> settings.getVersionInfo(autotip.getVersion()).getChangelog().forEach(context::send)).separator();
            break;
        case "debug":
            EventClientConnection event = autotip.getEvent(EventClientConnection.class);
            Object header = event.getHeader();
            messageUtil.getKeyHelper("command.debug").separator().sendKey("serverIp", event.getServerIp()).sendKey("mcVersion", autotip.getMcVersion()).sendKey("header." + (header == null ? "none" : "present"), UniversalUtil.getUnformattedText(header)).separator();
            break;
        case "reload":
            try {
                autotip.reloadGlobalSettings();
                autotip.reloadLocale();
                messageUtil.sendKey("command.reload.success");
            } catch (IllegalStateException e) {
                messageUtil.sendKey("command.reload.error");
            }
            break;
        default:
            messageUtil.send(getUsage());
            break;
    }
}
Also used : Autotip(me.semx11.autotip.Autotip) MessageOption(me.semx11.autotip.chat.MessageOption) TaskType(me.semx11.autotip.core.TaskManager.TaskType) Arrays(java.util.Arrays) CommandAbstract(me.semx11.autotip.command.CommandAbstract) SessionManager(me.semx11.autotip.core.SessionManager) TaskManager(me.semx11.autotip.core.TaskManager) EventClientConnection(me.semx11.autotip.event.impl.EventClientConnection) Collectors(java.util.stream.Collectors) StatsDaily(me.semx11.autotip.stats.StatsDaily) UniversalUtil(me.semx11.autotip.universal.UniversalUtil) Objects(java.util.Objects) DateTimeParseException(java.time.format.DateTimeParseException) List(java.util.List) Config(me.semx11.autotip.config.Config) DayOfWeek(java.time.DayOfWeek) LocalDate(java.time.LocalDate) DateTimeFormatter(java.time.format.DateTimeFormatter) MessageUtil(me.semx11.autotip.chat.MessageUtil) LocalTime(java.time.LocalTime) CommandBase.getListOfStringsMatchingLastWord(net.minecraft.command.CommandBase.getListOfStringsMatchingLastWord) StatsManager(me.semx11.autotip.core.StatsManager) GlobalSettings(me.semx11.autotip.config.GlobalSettings) Collections(java.util.Collections) EventClientConnection(me.semx11.autotip.event.impl.EventClientConnection) Config(me.semx11.autotip.config.Config) SessionManager(me.semx11.autotip.core.SessionManager) GlobalSettings(me.semx11.autotip.config.GlobalSettings) LocalDate(java.time.LocalDate) DateTimeParseException(java.time.format.DateTimeParseException) TaskManager(me.semx11.autotip.core.TaskManager) MessageUtil(me.semx11.autotip.chat.MessageUtil) StatsManager(me.semx11.autotip.core.StatsManager) MessageOption(me.semx11.autotip.chat.MessageOption) StatsDaily(me.semx11.autotip.stats.StatsDaily)

Example 3 with StatsDaily

use of me.semx11.autotip.stats.StatsDaily in project Hyperium by HyperiumClient.

the class Stats method print.

public void print() {
    MessageUtil messageUtil = autotip.getMessageUtil();
    messageUtil.separator();
    gameStatistics.entrySet().stream().sorted(Map.Entry.<String, Coins>comparingByValue().reversed()).forEach(entry -> {
        String game = entry.getKey();
        Coins coins = entry.getValue();
        messageUtil.getKeyHelper("command.stats").withKey("coins", context -> context.getBuilder(game, coins.getTotal()).setHover(context.getKey("coinsHover"), game, coins.getSent(), coins.getReceived()).send());
    });
    messageUtil.getKeyHelper("command.stats").withKey("tips", context -> context.getBuilder(getTipsTotal()).setHover(context.getKey("tipsHover"), getTipsSent(), getTipsReceived()).send()).withKey("xp", context -> context.getBuilder(getXpTotal()).setHover(context.getKey("xpHover"), getXpSent(), getXpReceived()).send());
    if (this instanceof StatsDaily) {
        messageUtil.sendKey("command.stats.date", ((StatsDaily) this).getDateString());
    } else if (this instanceof StatsRange) {
        StatsRange range = (StatsRange) this;
        messageUtil.sendKey("command.stats.dateRange", range.getStartString(), range.getEndString());
    }
    messageUtil.separator();
}
Also used : Autotip(me.semx11.autotip.Autotip) GameGroup(me.semx11.autotip.config.GlobalSettings.GameGroup) Locale(java.util.Locale) DateTimeFormatter(java.time.format.DateTimeFormatter) Map(java.util.Map) MessageUtil(me.semx11.autotip.chat.MessageUtil) DecimalFormat(java.text.DecimalFormat) ConcurrentHashMap(java.util.concurrent.ConcurrentHashMap) GlobalSettings(me.semx11.autotip.config.GlobalSettings) Exclude(me.semx11.autotip.gson.exclusion.Exclude) GameAlias(me.semx11.autotip.config.GlobalSettings.GameAlias) NumberFormat(java.text.NumberFormat) MessageUtil(me.semx11.autotip.chat.MessageUtil)

Example 4 with StatsDaily

use of me.semx11.autotip.stats.StatsDaily in project Hyperium by HyperiumClient.

the class StatsManager method get.

/**
 * Get the {@link StatsDaily} for the specified date. This method uses a cache to reduce the
 * amount of read/write cycles.
 *
 * @param date The {@link LocalDate} of the StatsDaily you want to get
 * @return {@link StatsDaily} for the specified date
 */
public StatsDaily get(LocalDate date) {
    if (cache.containsKey(date))
        return cache.get(date);
    StatsDaily stats = load(new StatsDaily(autotip, date));
    cache.put(date, stats);
    return stats;
}
Also used : StatsDaily(me.semx11.autotip.stats.StatsDaily)

Example 5 with StatsDaily

use of me.semx11.autotip.stats.StatsDaily in project Hyperium by HyperiumClient.

the class StatsManager method load.

/**
 * Load a {@link StatsDaily} from the current user directory.
 *
 * @param stats The {@link StatsDaily} that you want to load
 * @return {@link StatsDaily} that contains the loaded stats, unchanged if there were errors
 */
private StatsDaily load(StatsDaily stats) {
    File file = stats.getFile();
    try {
        String json = FileUtils.readFileToString(file);
        return stats.merge(autotip.getGson().fromJson(json, StatsDaily.class));
    } catch (FileNotFoundException e) {
        // Skip
        return stats;
    } catch (JsonSyntaxException | IllegalArgumentException e) {
        Autotip.LOGGER.warn(file.getName() + " has invalid contents, resetting...");
    } catch (IOException e) {
        Autotip.LOGGER.error("Could not read " + file.getName() + "!", e);
    }
    save(stats);
    return stats;
}
Also used : JsonSyntaxException(com.google.gson.JsonSyntaxException) FileNotFoundException(java.io.FileNotFoundException) StatsDaily(me.semx11.autotip.stats.StatsDaily) IOException(java.io.IOException) File(java.io.File)

Aggregations

StatsDaily (me.semx11.autotip.stats.StatsDaily)4 GlobalSettings (me.semx11.autotip.config.GlobalSettings)3 DateTimeFormatter (java.time.format.DateTimeFormatter)2 Autotip (me.semx11.autotip.Autotip)2 MessageOption (me.semx11.autotip.chat.MessageOption)2 MessageUtil (me.semx11.autotip.chat.MessageUtil)2 Config (me.semx11.autotip.config.Config)2 InvokeEvent (cc.hyperium.event.InvokeEvent)1 JsonSyntaxException (com.google.gson.JsonSyntaxException)1 File (java.io.File)1 FileNotFoundException (java.io.FileNotFoundException)1 IOException (java.io.IOException)1 DecimalFormat (java.text.DecimalFormat)1 NumberFormat (java.text.NumberFormat)1 DayOfWeek (java.time.DayOfWeek)1 LocalDate (java.time.LocalDate)1 LocalTime (java.time.LocalTime)1 DateTimeParseException (java.time.format.DateTimeParseException)1 Arrays (java.util.Arrays)1 Collections (java.util.Collections)1