Search in sources :

Example 21 with Raid

use of pokeraidbot.domain.raid.Raid in project pokeraidbot by magnusmickelsson.

the class AlterRaidCommand method deleteRaidAndGroups.

private void deleteRaidAndGroups(CommandEvent commandEvent, Config config, User user, String userName, String[] args) {
    StringBuilder gymNameBuilder;
    String gymName;
    Gym gym;
    gymNameBuilder = new StringBuilder();
    for (int i = 1; i < args.length; i++) {
        gymNameBuilder.append(args[i]).append(" ");
    }
    gymName = gymNameBuilder.toString().trim();
    gym = gymRepository.search(user, gymName, config.getRegion());
    Raid deleteRaid = raidRepository.getActiveRaidOrFallbackToExRaid(gym, config.getRegion(), user);
    verifyPermission(localeService, commandEvent, user, deleteRaid, config);
    final boolean userIsNotAdministrator = !isUserAdministrator(commandEvent);
    final boolean userIsNotMod = !isUserServerMod(commandEvent, config);
    if ((userIsNotAdministrator && userIsNotMod) && deleteRaid.getSignUps().size() > 0) {
        throw new UserMessedUpException(userName, localeService.getMessageFor(LocaleService.ONLY_ADMINS_REMOVE_RAID, localeService.getLocaleForUser(user)));
    }
    final Set<RaidGroup> groups = raidRepository.getGroups(deleteRaid);
    if (LOGGER.isDebugEnabled()) {
        LOGGER.debug("Deleting " + groups.size() + " groups associated with raid " + deleteRaid + "... ");
    }
    final int numberOfGroups = groups.size();
    for (RaidGroup group : groups) {
        final EmoticonSignUpMessageListener listener = getListenerForGroup(deleteRaid, group);
        if (listener != null) {
            final MessageChannel channel = getChannel(commandEvent.getGuild(), group.getChannel());
            if (channel != null) {
                NewRaidGroupCommand.cleanUpRaidGroupAndDeleteSignUpsIfPossible(channel, group.getStartsAt(), deleteRaid.getId(), listener, raidRepository, botService, group.getId());
            } else {
                LOGGER.debug("Could not find channel " + group.getChannel() + " in guild " + commandEvent.getGuild().getName());
            }
        }
    }
    if (LOGGER.isDebugEnabled()) {
        LOGGER.debug("Groups deleted for raid " + deleteRaid);
    }
    if (raidRepository.delete(deleteRaid)) {
        commandEvent.reactSuccess();
        removeOriginMessageIfConfigSaysSo(config, commandEvent);
        LOGGER.info("Deleted raid (and " + numberOfGroups + " related groups): " + deleteRaid);
    } else {
        throw new UserMessedUpException(userName, localeService.getMessageFor(LocaleService.RAID_NOT_EXISTS, localeService.getLocaleForUser(user)));
    }
}
Also used : MessageChannel(net.dv8tion.jda.core.entities.MessageChannel) EmoticonSignUpMessageListener(pokeraidbot.domain.raid.signup.EmoticonSignUpMessageListener) UserMessedUpException(pokeraidbot.domain.errors.UserMessedUpException) Gym(pokeraidbot.domain.gym.Gym) RaidGroup(pokeraidbot.infrastructure.jpa.raid.RaidGroup) Raid(pokeraidbot.domain.raid.Raid)

Example 22 with Raid

use of pokeraidbot.domain.raid.Raid in project pokeraidbot by magnusmickelsson.

the class AlterRaidCommand method changeOrDeleteGroup.

private void changeOrDeleteGroup(CommandEvent commandEvent, Config config, User user, String userName, String[] args) {
    String whatToChangeTo;
    String gymName;
    Gym gym;
    Raid raid;
    whatToChangeTo = args[1].trim().toLowerCase();
    String originalTime = preProcessTimeString(args[2].trim());
    LocalTime existingGroupTimeIfAvailable = null;
    try {
        existingGroupTimeIfAvailable = Utils.parseTime(user, originalTime, localeService);
    } catch (UserMessedUpException e) {
    // Input was not a time
    }
    gymName = getGymName(args, existingGroupTimeIfAvailable);
    gym = gymRepository.search(user, gymName, config.getRegion());
    raid = raidRepository.getActiveRaidOrFallbackToExRaid(gym, config.getRegion(), user);
    if (whatToChangeTo.equals("remove")) {
        final Set<RaidGroup> groups = raidRepository.getGroups(raid);
        final Set<EmoticonSignUpMessageListener> listenersToCheck = getListenersToCheck(commandEvent, config, user, raid, groups);
        EmoticonSignUpMessageListener listener = listenersToCheck.iterator().next();
        verifyIsModOrHasGroupForRaid(commandEvent, user, raid, config);
        RaidGroup theGroupToDelete = getGroupToDelete(user, existingGroupTimeIfAvailable, groups, raid);
        assertPermissionToManageThisGroup(user, theGroupToDelete, commandEvent, config);
        NewRaidGroupCommand.cleanUpGroupMessageAndEntity(commandEvent.getChannel(), raid.getId(), listener, raidRepository, botService, theGroupToDelete.getId(), raid.toString());
        final String message = localeService.getMessageFor(LocaleService.GROUP_DELETED, localeService.getLocaleForUser(user));
        replyBasedOnConfig(config, commandEvent, message);
    } else {
        LocalTime newTime = parseTime(user, whatToChangeTo, localeService);
        LocalDateTime newDateTime = LocalDateTime.of(raid.getEndOfRaid().toLocalDate(), newTime);
        checkIfInputIsValidAndUserHasRights(commandEvent, config, user, raid, newDateTime);
        if (changeGroupTime(commandEvent, config, user, userName, raid, newDateTime))
            return;
    }
    removeOriginMessageIfConfigSaysSo(config, commandEvent);
}
Also used : LocalDateTime(java.time.LocalDateTime) LocalTime(java.time.LocalTime) EmoticonSignUpMessageListener(pokeraidbot.domain.raid.signup.EmoticonSignUpMessageListener) UserMessedUpException(pokeraidbot.domain.errors.UserMessedUpException) Gym(pokeraidbot.domain.gym.Gym) RaidGroup(pokeraidbot.infrastructure.jpa.raid.RaidGroup) Raid(pokeraidbot.domain.raid.Raid)

Example 23 with Raid

use of pokeraidbot.domain.raid.Raid in project pokeraidbot by magnusmickelsson.

the class EggHatchedCommand method executeWithConfig.

@Override
protected void executeWithConfig(CommandEvent commandEvent, Config config) {
    final User user = commandEvent.getAuthor();
    final String userName = user.getName();
    final String[] args = commandEvent.getArgs().split(" ");
    if (args.length < 2) {
        throw new UserMessedUpException(userName, localeService.getMessageFor(LocaleService.BAD_SYNTAX, localeService.getLocaleForUser(user), "!raid hatch Ho-Oh solna platform"));
    }
    String pokemonName = args[0].trim().toLowerCase();
    final String[] gymArguments = ArrayUtils.removeAll(args, 0);
    String gymName = StringUtils.join(gymArguments, " ");
    final String region = config.getRegion();
    final Gym gym = gymRepository.search(user, gymName, region);
    final Raid raid = raidRepository.getActiveRaidOrFallbackToExRaid(gym, region, user);
    final Pokemon pokemon = pokemonRepository.search(pokemonName, user);
    final PokemonRaidInfo existingRaidInfo = raidStrategyService.getRaidInfo(raid.getPokemon());
    final int newBossTier = raidStrategyService.getRaidInfo(pokemon).getBossTier();
    if (!raid.getPokemon().isEgg()) {
        throw new UserMessedUpException(user, localeService.getMessageFor(LocaleService.EGG_ALREADY_HATCHED, localeService.getLocaleForUser(user), raid.getPokemon().toString()));
    }
    if (pokemon.isEgg() || newBossTier != existingRaidInfo.getBossTier()) {
        throw new UserMessedUpException(user, localeService.getMessageFor(LocaleService.EGG_WRONG_TIER, localeService.getLocaleForUser(user)));
    }
    if (LOGGER.isDebugEnabled()) {
        LOGGER.debug("Trying to hatch raid " + raid + " into " + pokemonName);
    }
    AlterRaidCommand.changePokemon(gymRepository, localeService, pokemonRepository, raidRepository, commandEvent, config, user, userName, pokemonName, gymArguments);
}
Also used : User(net.dv8tion.jda.core.entities.User) PokemonRaidInfo(pokeraidbot.domain.pokemon.PokemonRaidInfo) UserMessedUpException(pokeraidbot.domain.errors.UserMessedUpException) Gym(pokeraidbot.domain.gym.Gym) Raid(pokeraidbot.domain.raid.Raid) Pokemon(pokeraidbot.domain.pokemon.Pokemon)

Example 24 with Raid

use of pokeraidbot.domain.raid.Raid in project pokeraidbot by magnusmickelsson.

the class NewRaidCommand method executeWithConfig.

@Override
protected void executeWithConfig(CommandEvent commandEvent, Config config) {
    final User user = commandEvent.getAuthor();
    final String[] args = commandEvent.getArgs().replaceAll("\\s{1,3}", " ").split(" ");
    if (args.length < 3) {
        throw new UserMessedUpException(user, localeService.getMessageFor(LocaleService.BAD_SYNTAX, localeService.getLocaleForUser(user), "!raid new ho-oh 10:00 solna platform"));
    }
    String pokemonName = args[0];
    final Pokemon pokemon = pokemonRepository.search(pokemonName, user);
    String timeString = args[1];
    LocalTime endsAtTime = Utils.parseTime(user, timeString, localeService);
    LocalDateTime endsAt = LocalDateTime.of(LocalDate.now(), endsAtTime);
    assertTimeNotInNoRaidTimespan(user, endsAtTime, localeService);
    assertTimeNotMoreThanXHoursFromNow(user, endsAtTime, localeService, 2);
    assertCreateRaidTimeNotBeforeNow(user, endsAt, localeService);
    StringBuilder gymNameBuilder = new StringBuilder();
    for (int i = 2; i < args.length; i++) {
        gymNameBuilder.append(args[i]).append(" ");
    }
    String gymName = gymNameBuilder.toString().trim();
    final Gym gym = gymRepository.search(user, gymName, config.getRegion());
    final Raid raid = new Raid(pokemon, endsAt, gym, localeService, config.getRegion());
    raidRepository.newRaid(user, raid, commandEvent.getGuild(), config, "!raid new " + raid.getPokemon().getName() + " " + printTimeIfSameDay(raid.getEndOfRaid()) + " " + raid.getGym().getName());
    final Locale locale = localeService.getLocaleForUser(user);
    replyBasedOnConfigAndRemoveAfter(config, commandEvent, localeService.getMessageFor(LocaleService.NEW_RAID_CREATED, locale, raid.toString(locale)), BotServerMain.timeToRemoveFeedbackInSeconds);
}
Also used : LocalDateTime(java.time.LocalDateTime) Locale(java.util.Locale) User(net.dv8tion.jda.core.entities.User) LocalTime(java.time.LocalTime) UserMessedUpException(pokeraidbot.domain.errors.UserMessedUpException) Gym(pokeraidbot.domain.gym.Gym) Pokemon(pokeraidbot.domain.pokemon.Pokemon) Raid(pokeraidbot.domain.raid.Raid)

Aggregations

Raid (pokeraidbot.domain.raid.Raid)24 Gym (pokeraidbot.domain.gym.Gym)16 LocalDateTime (java.time.LocalDateTime)12 User (net.dv8tion.jda.core.entities.User)12 UserMessedUpException (pokeraidbot.domain.errors.UserMessedUpException)11 Pokemon (pokeraidbot.domain.pokemon.Pokemon)10 Locale (java.util.Locale)9 LocalTime (java.time.LocalTime)7 RaidGroup (pokeraidbot.infrastructure.jpa.raid.RaidGroup)6 MessageEmbed (net.dv8tion.jda.core.entities.MessageEmbed)5 EmbedBuilder (net.dv8tion.jda.core.EmbedBuilder)4 MessageChannel (net.dv8tion.jda.core.entities.MessageChannel)4 EmoticonSignUpMessageListener (pokeraidbot.domain.raid.signup.EmoticonSignUpMessageListener)4 SignUp (pokeraidbot.domain.raid.signup.SignUp)3 LocalDate (java.time.LocalDate)2 TimeUnit (java.util.concurrent.TimeUnit)2 PokemonRaidInfo (pokeraidbot.domain.pokemon.PokemonRaidInfo)2 ConcurrentModificationException (java.util.ConcurrentModificationException)1 List (java.util.List)1 Callable (java.util.concurrent.Callable)1