Search in sources :

Example 6 with Raid

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

the class RaidStatusCommand method executeWithConfig.

@Override
protected void executeWithConfig(CommandEvent commandEvent, Config config) {
    String gymName = commandEvent.getArgs();
    final User user = commandEvent.getAuthor();
    final Gym gym = gymRepository.search(user, gymName, config.getRegion());
    final Raid raid = raidRepository.getActiveRaidOrFallbackToExRaid(gym, config.getRegion(), user);
    final Set<SignUp> signUps = raid.getSignUps();
    final int numberOfPeople = raid.getNumberOfPeopleSignedUp();
    final Locale localeForUser = localeService.getLocaleForUser(user);
    EmbedBuilder embedBuilder = new EmbedBuilder();
    embedBuilder.setAuthor(null, null, null);
    final Pokemon pokemon = raid.getPokemon();
    embedBuilder.setTitle(localeService.getMessageFor(LocaleService.RAIDSTATUS, localeForUser, gym.getName() + (gym.isExGym() ? Emotes.STAR + "" : "")), Utils.getNonStaticMapUrl(gym));
    StringBuilder sb = new StringBuilder();
    final String activeText = localeService.getMessageFor(LocaleService.ACTIVE, localeForUser);
    final String startGroupText = localeService.getMessageFor(LocaleService.START_GROUP, localeForUser);
    final String findYourWayText = localeService.getMessageFor(LocaleService.FIND_YOUR_WAY, localeForUser);
    final String raidBossText = localeService.getMessageFor(LocaleService.RAID_BOSS, localeForUser);
    final Set<String> signUpNames = getNamesOfThoseWithSignUps(raid.getSignUps(), true);
    final String allSignUpNames = StringUtils.join(signUpNames, ", ");
    sb.append(raidBossText).append(" **").append(pokemon).append("** - ").append("*!raid vs ").append(pokemon.getName()).append("*\n");
    sb.append("**").append(activeText).append(":** ").append(printTimeIfSameDay(getStartOfRaid(raid.getEndOfRaid(), false))).append("-").append(printTimeIfSameDay(raid.getEndOfRaid())).append("\t**").append(numberOfPeople).append(" ").append(localeService.getMessageFor(LocaleService.SIGNED_UP, localeForUser)).append("**").append(signUps.size() > 0 ? ":\n" + allSignUpNames : "").append("\n").append(startGroupText).append(":\n*!raid group ").append(printTime(raid.getEndOfRaid().toLocalTime().minusMinutes(15))).append(" ").append(gymName).append("*\n\n");
    sb.append(localeService.getMessageFor(LocaleService.CREATED_BY, localeForUser)).append(": ").append(raid.getCreator());
    embedBuilder.setFooter(findYourWayText + localeService.getMessageFor(LocaleService.GOOGLE_MAPS, localeService.getLocaleForUser(user)), Utils.getPokemonIcon(pokemon));
    embedBuilder.setDescription(sb.toString());
    final MessageEmbed messageEmbed = embedBuilder.build();
    replyBasedOnConfig(config, commandEvent, messageEmbed);
}
Also used : Locale(java.util.Locale) SignUp(pokeraidbot.domain.raid.signup.SignUp) User(net.dv8tion.jda.core.entities.User) MessageEmbed(net.dv8tion.jda.core.entities.MessageEmbed) Raid(pokeraidbot.domain.raid.Raid) EmbedBuilder(net.dv8tion.jda.core.EmbedBuilder) Gym(pokeraidbot.domain.gym.Gym) Pokemon(pokeraidbot.domain.pokemon.Pokemon)

Example 7 with Raid

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

the class AdminCommands method execute.

@Override
protected void execute(CommandEvent event) {
    final User user = event.getAuthor();
    if (user == null || user.getId() == null || (!user.getId().equals(BotServerMain.BOT_CREATOR_USERID))) {
        event.replyInDM("This command is reserved only for bot creator. Hands off! ;p Your user ID was: " + String.valueOf(user.getId()));
        return;
    } else {
        final String eventArgs = event.getArgs();
        if (eventArgs.startsWith("userconfig")) {
            String userId = eventArgs.replaceAll("userconfig\\s{1,3}", "");
            final UserConfig userConfig = userConfigRepository.findOne(userId);
            if (userConfig == null) {
                event.replyInDM("No user with ID " + userId);
                return;
            } else {
                userConfigRepository.delete(userConfig);
                event.replyInDM("Removed user configuration for user with ID " + userId);
                return;
            }
        } else if (eventArgs.startsWith("permissions")) {
            final JDA bot = botService.getBot();
            final List<Guild> guilds = bot.getGuilds();
            StringBuilder sb = new StringBuilder();
            sb.append("**Permissions for bot across servers:**\n\n");
            for (Guild guild : guilds) {
                final Member member = guild.getMember(bot.getSelfUser());
                if (member == null) {
                    event.replyInDM("Could not get bot as servermember!");
                    return;
                }
                sb.append("*").append(guild.getName()).append("*\n");
                for (Permission p : member.getPermissions()) {
                    sb.append(p.getName()).append("(Guild: ").append(p.isGuild()).append(" Channel: ").append(p.isChannel()).append(")\n");
                }
                sb.append("\n\n");
            }
            event.replyInDM(sb.toString());
            return;
        } else if (eventArgs.startsWith("clear tracking")) {
            trackingCommandListener.clearCache();
            event.replyInDM("Cleared tracking cache.");
            return;
        } else if (eventArgs.startsWith("announce")) {
            final JDA bot = botService.getBot();
            final List<Guild> guilds = bot.getGuilds();
            StringBuilder sb = new StringBuilder();
            for (Guild guild : guilds) {
                try {
                    guild.getDefaultChannel().sendMessage(eventArgs.replaceAll("announce\\s{1,3}", "")).queue();
                    sb.append("Sent message for guild ").append(guild.getName()).append("\n");
                } catch (Throwable t) {
                    sb.append("Failed to send message for guild ").append(guild.getName()).append(": ").append(t.getMessage()).append("\n");
                }
            }
            event.replyInDM(sb.toString());
            return;
        } else if (eventArgs.startsWith("ismember")) {
            String userIdAndGuildName = eventArgs.replaceAll("ismember\\s{1,3}", "");
            String[] args = userIdAndGuildName.split(" ");
            if (args.length < 2) {
                event.reply("Bad syntax, should be something like: !raid admin ismember {userid} {guildname}");
                return;
            } else {
                final JDA bot = botService.getBot();
                Guild guild = null;
                final List<Guild> guilds = bot.getGuilds();
                String guildName = StringUtils.join(ArrayUtils.remove(args, 0), " ");
                for (Guild guildToCheck : guilds) {
                    if (guildToCheck.getName().equalsIgnoreCase(guildName)) {
                        guild = guildToCheck;
                    }
                }
                if (guild != null) {
                    final Member memberById = guild.getMemberById(args[0]);
                    if (memberById != null) {
                        event.reply("User is a member of server " + guild.getName());
                    } else {
                        event.reply("User is not a member of server " + guild.getName());
                    }
                } else {
                    event.reply("There was no server the user is a member of.");
                }
                return;
            }
        } else if (eventArgs.startsWith("member")) {
            String userIdAndGuildName = eventArgs.replaceAll("member\\s{1,3}", "");
            String[] args = userIdAndGuildName.split(" ");
            if (args.length < 1 || args.length > 2) {
                event.reply("Bad syntax, should be something like: !raid admin member {userid}");
                return;
            } else {
                StringBuilder sb = new StringBuilder();
                final JDA bot = botService.getBot();
                final List<Guild> guilds = bot.getGuilds();
                sb.append("User with ID ").append(args[0]).append(" is a member of the following servers:\n\n");
                if (guilds.size() == 0) {
                    sb.append("-");
                }
                for (Guild guild : guilds) {
                    final Member memberById = guild.getMemberById(args[0]);
                    if (memberById != null) {
                        sb.append(guild.getName()).append(" (Username ").append(memberById.getUser().getName()).append(")\n");
                    }
                }
                event.reply(sb.toString());
                return;
            }
        } else if (eventArgs.startsWith("guilds")) {
            final JDA bot = botService.getBot();
            final List<Guild> guilds = bot.getGuilds();
            StringBuilder sb = new StringBuilder();
            for (Guild guildToCheck : guilds) {
                sb.append(guildToCheck.getName().toLowerCase()).append("\n");
            }
            event.reply(sb.toString());
            return;
        } else if (eventArgs.startsWith("test")) {
            final Config configForServer = serverConfigRepository.getConfigForServer(event.getGuild().getName().toLowerCase());
            String[] args = eventArgs.replaceAll("test\\s{1,3}", "").trim().split(" ");
            String pokemon = args[0];
            LocalDateTime startsAt = LocalDateTime.of(LocalDate.now(), Utils.parseTime(user, args[1], localeService));
            String gymName = StringUtils.join(ArrayUtils.removeElements(args, 0, 1), " ").trim();
            final String region = configForServer.getRegion();
            Raid raid = new Raid(pokemonRepository.search(pokemon, user), startsAt.plusMinutes(Utils.RAID_DURATION_IN_MINUTES), gymRepository.search(user, gymName, region), localeService, region);
            final Raid createdRaid = raidRepository.newRaid(botService.getBot().getSelfUser(), raid, event.getGuild(), configForServer, event.getMessage().getRawContent());
            event.reply("Bot created your test raid: " + createdRaid);
            return;
        } else if (eventArgs.startsWith("tier5")) {
            String[] bosses = eventArgs.replaceAll("tier5\\s{1,3}", "").trim().split(";");
            if (bosses == null || bosses.length < 1) {
                event.reply("Bad syntax, should be: !raid admin tier5 Boss1;Boss2;Boss3");
                return;
            } else {
                final CopyOnWriteArrayList<String> currentTier5Bosses = new CopyOnWriteArrayList<>();
                currentTier5Bosses.addAll(Arrays.asList(bosses));
                BotService.currentTier5Bosses = currentTier5Bosses;
                event.reply("Set current tier5 boss list: " + StringUtils.join(bosses, ", "));
                return;
            }
        }
    }
    event.reply("No such command. Existing ones are:\n- userconfig {userid}\n- permissions\n" + "- clear tracking\n- announce {message}\n- ismember {userid} {guild name}\n- guilds\n" + " - member {userid}\n - test {pokemon} {start time} {gym}\n- tier5 {list of bosses ;-separated}");
}
Also used : LocalDateTime(java.time.LocalDateTime) User(net.dv8tion.jda.core.entities.User) JDA(net.dv8tion.jda.core.JDA) UserConfig(pokeraidbot.infrastructure.jpa.config.UserConfig) Config(pokeraidbot.infrastructure.jpa.config.Config) UserConfig(pokeraidbot.infrastructure.jpa.config.UserConfig) Guild(net.dv8tion.jda.core.entities.Guild) Raid(pokeraidbot.domain.raid.Raid) Permission(net.dv8tion.jda.core.Permission) List(java.util.List) CopyOnWriteArrayList(java.util.concurrent.CopyOnWriteArrayList) Member(net.dv8tion.jda.core.entities.Member) CopyOnWriteArrayList(java.util.concurrent.CopyOnWriteArrayList)

Example 8 with Raid

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

the class GymHuntrRaidEventListener method createRaid.

protected void createRaid(User user, GuildMessageReceivedEvent guildEvent, Config config, ClockService clockService, PokemonRaidInfo pokemonRaidInfo, LocalDateTime now, Raid raidToCreate, MessageChannel channel) {
    Raid createdRaid;
    if (raidToCreate.isExRaid()) {
        LOGGER.debug("Got an EX raid to create from gym integration, skipping: " + raidToCreate);
        return;
    }
    createdRaid = raidRepository.newRaid(user, raidToCreate, guildEvent.getGuild(), config, "(bot) !raid new " + raidToCreate.getPokemon().getName() + " " + printTimeIfSameDay(raidToCreate.getEndOfRaid()) + " " + raidToCreate.getGym().getName());
    final Locale locale = config.getLocale();
    EmbedBuilder embedBuilder = new EmbedBuilder().setTitle(null, null);
    StringBuilder sb = new StringBuilder();
    sb.append(localeService.getMessageFor(LocaleService.NEW_RAID_CREATED, locale, createdRaid.toString(locale)));
    if (user != null && channel != null) {
        createGroupIfConfigSaysSo(user, guildEvent, config, clockService, pokemonRaidInfo, now, createdRaid, channel);
    } else {
        LOGGER.warn("Could not create group, as some input values were null!");
    }
    embedBuilder.setDescription(sb.toString());
    final MessageEmbed messageEmbed = embedBuilder.build();
    sendFeedbackThenCleanUp(createdRaid, channel, messageEmbed);
}
Also used : EmbedBuilder(net.dv8tion.jda.core.EmbedBuilder) MessageEmbed(net.dv8tion.jda.core.entities.MessageEmbed) Raid(pokeraidbot.domain.raid.Raid)

Example 9 with Raid

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

the class GymHuntrRaidEventListener method handleRaidFromIntegration.

public void handleRaidFromIntegration(User user, GuildMessageReceivedEvent guildEvent, Pokemon raidBoss, Gym raidGym, LocalDateTime endOfRaid, Config config, ClockService clockService, PokemonRaidInfo pokemonRaidInfo, PokemonRaidStrategyService pokemonRaidStrategyService) {
    Validate.notNull(user, "User");
    Validate.notNull(guildEvent, "Guild event");
    Validate.notNull(config, "Config");
    Validate.notNull(raidBoss, "Raid boss");
    Validate.notNull(raidGym, "Gym");
    Validate.notNull(user, "User");
    final LocalDateTime now = clockService.getCurrentDateTime();
    LocalDateTime currentDateTime = now;
    final boolean moreThan10MinutesLeftOnRaid = endOfRaid.isAfter(currentDateTime.plusMinutes(10));
    if (moreThan10MinutesLeftOnRaid) {
        final Raid raidToCreate = new Raid(raidBoss, endOfRaid, raidGym, localeService, config.getRegion());
        final MessageChannel channel = guildEvent.getChannel();
        try {
            if (raidRepository.isActiveOrExRaidAt(raidGym, config.getRegion())) {
                Raid existingRaid = raidRepository.getActiveRaidOrFallbackToExRaid(raidGym, config.getRegion(), user);
                if (existingRaid.getPokemon().isEgg()) {
                    existingRaid = raidRepository.changePokemon(existingRaid, raidBoss, guildEvent.getGuild(), config, user, "(bot) " + "!raid hatch " + raidBoss.getName() + " " + existingRaid.getGym().getName());
                    LOGGER.info("Hatched raid: " + existingRaid);
                } else {
                    LOGGER.info("Raid already present, which is not an egg to hatch. " + "Skipping raid at: " + raidGym.getName() + " for server " + config.getServer());
                }
            } else {
                createRaid(user, guildEvent, config, clockService, pokemonRaidInfo, now, raidToCreate, channel);
            }
        } catch (Throwable t) {
            LOGGER.warn("Exception when trying to create raid via botintegration for server " + config.getServer() + ", channel " + (channel != null ? channel.getName() : "NULL") + ": " + t.getMessage());
        }
    } else {
        LOGGER.debug("Skipped creating raid at " + raidGym + ", less than 10 minutes remaining on it.");
    }
}
Also used : LocalDateTime(java.time.LocalDateTime) MessageChannel(net.dv8tion.jda.core.entities.MessageChannel) Raid(pokeraidbot.domain.raid.Raid)

Example 10 with Raid

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

the class RemoveSignUpCommand method executeWithConfig.

@Override
protected void executeWithConfig(CommandEvent commandEvent, Config config) {
    final User user = commandEvent.getAuthor();
    final String userName = user.getName();
    final Locale localeForUser = localeService.getLocaleForUser(user);
    String gymName = commandEvent.getArgs();
    final Gym gym = gymRepository.search(user, gymName, config.getRegion());
    final Raid raid = raidRepository.getActiveRaidOrFallbackToExRaid(gym, config.getRegion(), user);
    final SignUp removed = raid.remove(user, raidRepository);
    if (removed != null) {
        commandEvent.reactSuccess();
        removeOriginMessageIfConfigSaysSo(config, commandEvent);
    } else {
        final String message = localeService.getMessageFor(LocaleService.NO_SIGNUP_AT_GYM, localeForUser, userName, gym.getName());
        replyErrorBasedOnConfig(config, commandEvent, new UserMessedUpException(user, message));
    }
}
Also used : Locale(java.util.Locale) SignUp(pokeraidbot.domain.raid.signup.SignUp) User(net.dv8tion.jda.core.entities.User) UserMessedUpException(pokeraidbot.domain.errors.UserMessedUpException) Gym(pokeraidbot.domain.gym.Gym) 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