use of net.kodehawa.mantarobot.db.entities.helpers.PlayerData in project MantaroBot by Mantaro.
the class ModLog method log.
public static void log(Member author, User target, String reason, ModAction action, long caseN, String... time) {
DBGuild guildDB = db.getGuild(author.getGuild());
Player player = db.getPlayer(author);
PlayerData playerData = player.getData();
EmbedBuilder embedBuilder = new EmbedBuilder();
embedBuilder.addField("Responsible Moderator", author.getEffectiveName(), true);
if (target != null)
embedBuilder.addField("Member", target.getName(), true);
embedBuilder.addField("Reason", reason, false);
if (target != null) {
embedBuilder.setThumbnail(target.getEffectiveAvatarUrl());
} else {
embedBuilder.setThumbnail(author.getUser().getEffectiveAvatarUrl());
}
switch(action) {
case BAN:
embedBuilder.setAuthor("Ban | Case #" + caseN, null, author.getUser().getEffectiveAvatarUrl());
break;
case TEMP_BAN:
embedBuilder.setAuthor("Temp Ban | Case #" + caseN, null, author.getUser().getEffectiveAvatarUrl()).addField("Time", time[0], true);
break;
case KICK:
embedBuilder.setAuthor("Kick | Case #" + caseN, null, author.getUser().getEffectiveAvatarUrl());
break;
case MUTE:
embedBuilder.setAuthor("Mute | Case #" + caseN, null, author.getUser().getEffectiveAvatarUrl());
break;
case UNMUTE:
embedBuilder.setAuthor("Un-mute | Case #" + caseN, null, author.getUser().getEffectiveAvatarUrl());
break;
case PRUNE:
embedBuilder.setAuthor("Prune | Case #" + caseN, null, author.getUser().getEffectiveAvatarUrl());
break;
case WARN:
embedBuilder.setAuthor("Warn | Case #" + caseN, null, author.getUser().getEffectiveAvatarUrl());
break;
}
if (!playerData.hasBadge(Badge.POWER_USER)) {
playerData.addBadgeIfAbsent(Badge.POWER_USER);
player.saveAsync();
}
if (guildDB.getData().getGuildLogChannel() != null) {
if (MantaroBot.getInstance().getTextChannelById(guildDB.getData().getGuildLogChannel()) != null) {
MantaroBot.getInstance().getTextChannelById(guildDB.getData().getGuildLogChannel()).sendMessage(embedBuilder.build()).queue();
}
}
}
use of net.kodehawa.mantarobot.db.entities.helpers.PlayerData in project MantaroBot by Mantaro.
the class ItemHelper method setItemActions.
public static void setItemActions() {
log.info("Registering item actions...");
ItemReference.MOP.setAction(((ctx, season) -> {
Player player = ctx.getPlayer();
PlayerData playerData = player.getData();
DBUser dbUser = ctx.getDBUser();
UserData userData = dbUser.getData();
Inventory playerInventory = player.getInventory();
if (!playerInventory.containsItem(ItemReference.MOP))
return false;
if (userData.getDustLevel() >= 5) {
playerData.setTimesMopped(playerData.getTimesMopped() + 1);
ctx.sendLocalized("general.misc_item_usage.mop", EmoteReference.DUST);
if (userData.getDustLevel() == 100) {
playerData.addBadgeIfAbsent(Badge.DUSTY);
}
playerInventory.process(new ItemStack(ItemReference.MOP, -1));
userData.setDustLevel(0);
player.save();
dbUser.save();
} else {
ctx.sendLocalized("general.misc_item_usage.mop_not_enough", EmoteReference.DUST);
return false;
}
return true;
}));
ItemReference.POTION_CLEAN.setAction((ctx, season) -> {
Player player = ctx.getPlayer();
DBUser dbUser = ctx.getDBUser();
UserData userData = dbUser.getData();
Inventory playerInventory = player.getInventory();
userData.getEquippedItems().resetEffect(PlayerEquipment.EquipmentType.POTION);
playerInventory.process(new ItemStack(ItemReference.POTION_CLEAN, -1));
player.save();
dbUser.save();
ctx.sendLocalized("general.misc_item_usage.milk", EmoteReference.CORRECT);
return true;
});
// This tends to be an issue: the name doesn't match the emoji name.
// I don't want to match all of them by emoji name, as that can lead to bad results and conflicts,
// so alias them to the emoji name, so people can open them more easily.
ItemReference.MINE_CRATE.registerItemAlias("mine lootbox");
ItemReference.FISH_CRATE.registerItemAlias("fish lootbox");
ItemReference.CHOP_CRATE.registerItemAlias("chop lootbox");
ItemReference.MINE_PREMIUM_CRATE.registerItemAlias("premium mine lootbox");
ItemReference.FISH_PREMIUM_CRATE.registerItemAlias("premium fish lootbox");
ItemReference.CHOP_PREMIUM_CRATE.registerItemAlias("premium chop lootbox");
}
use of net.kodehawa.mantarobot.db.entities.helpers.PlayerData in project MantaroBot by Mantaro.
the class PlayerCmds method badges.
@Subscribe
public void badges(CommandRegistry cr) {
final Random r = new Random();
ITreeCommand badgeCommand = cr.register("badges", new TreeCommand(CommandCategory.CURRENCY) {
@Override
public Command defaultTrigger(Context ctx, String mainCommand, String commandName) {
return new SubCommand() {
@Override
protected void call(Context ctx, I18nContext languageContext, String content) {
var optionalArguments = ctx.getOptionalArguments();
content = Utils.replaceArguments(optionalArguments, content, "brief");
// Lambdas strike again.
var contentFinal = content;
ctx.findMember(content, members -> {
var member = CustomFinderUtil.findMemberDefault(contentFinal, members, ctx, ctx.getMember());
if (member == null) {
return;
}
var toLookup = member.getUser();
Player player = ctx.getPlayer(toLookup);
PlayerData playerData = player.getData();
DBUser dbUser = ctx.getDBUser();
if (!optionalArguments.isEmpty() && optionalArguments.containsKey("brief")) {
ctx.sendLocalized("commands.badges.brief_success", member.getEffectiveName(), playerData.getBadges().stream().sorted().map(Badge::getDisplay).collect(Collectors.joining(", ")));
return;
}
var badges = playerData.getBadges();
Collections.sort(badges);
var embed = new EmbedBuilder().setAuthor(String.format(languageContext.get("commands.badges.header"), toLookup.getName())).setColor(ctx.getMemberColor()).setThumbnail(toLookup.getEffectiveAvatarUrl());
List<MessageEmbed.Field> fields = new LinkedList<>();
for (var b : badges) {
// God DAMNIT discord, I want it to look cute, stop trimming my spaces.
fields.add(new MessageEmbed.Field(b.toString(), "**\u2009\u2009\u2009\u2009- " + b.description + "**", false));
}
if (badges.isEmpty()) {
embed.setDescription(languageContext.get("commands.badges.no_badges"));
ctx.send(embed.build());
return;
}
var common = languageContext.get("commands.badges.profile_notice") + languageContext.get("commands.badges.info_notice") + ((r.nextInt(2) == 0 && !dbUser.isPremium() ? languageContext.get("commands.badges.donate_notice") : "\n") + String.format(languageContext.get("commands.badges.total_badges"), badges.size()));
DiscordUtils.sendPaginatedEmbed(ctx, embed, DiscordUtils.divideFields(6, fields), common);
});
}
};
}
@Override
public HelpContent help() {
return new HelpContent.Builder().setDescription("Shows your (or another person)'s badges.").setUsage("If you want to check out the badges of another person just mention them.\n" + "You can use `~>badges -brief` to get a brief versions of the badge showcase.").build();
}
});
badgeCommand.addSubCommand("info", new SubCommand() {
@Override
public String description() {
return "Shows info about a badge.";
}
@Override
protected void call(Context ctx, I18nContext languageContext, String content) {
if (content.isEmpty()) {
ctx.sendLocalized("commands.badges.info.not_specified", EmoteReference.ERROR);
return;
}
var badge = Badge.lookupFromString(content);
if (badge == null || badge == Badge.DJ) {
ctx.sendLocalized("commands.badges.info.not_found", EmoteReference.ERROR);
return;
}
var player = ctx.getPlayer();
var message = new MessageBuilder().setEmbeds(new EmbedBuilder().setAuthor(String.format(languageContext.get("commands.badges.info.header"), badge.display)).setDescription(String.join("\n", EmoteReference.BLUE_SMALL_MARKER + "**" + languageContext.get("general.name") + ":** " + badge.display, EmoteReference.BLUE_SMALL_MARKER + "**" + languageContext.get("general.description") + ":** " + badge.description, EmoteReference.BLUE_SMALL_MARKER + "**" + languageContext.get("commands.badges.info.achieved") + ":** " + player.getData().getBadges().stream().anyMatch(b -> b == badge))).setThumbnail("attachment://icon.png").setColor(Color.CYAN).build()).build();
ctx.getChannel().sendMessage(message).addFile(badge.icon, "icon.png").queue();
}
});
badgeCommand.addSubCommand("list", new SubCommand() {
@Override
public String description() {
return "Lists all the obtainable badges.";
}
@Override
protected void call(Context ctx, I18nContext languageContext, String content) {
var badges = Badge.values();
var builder = new EmbedBuilder().setAuthor(languageContext.get("commands.badges.ls.header"), null, ctx.getAuthor().getEffectiveAvatarUrl()).setColor(Color.PINK).setFooter(languageContext.get("general.requested_by").formatted(ctx.getMember().getEffectiveName()), null);
var player = ctx.getPlayer();
List<MessageEmbed.Field> fields = new LinkedList<>();
for (Badge badge : badges) {
if (!badge.isObtainable()) {
continue;
}
fields.add(new MessageEmbed.Field("%s\u2009\u2009\u2009%s".formatted(badge.unicode, badge.display), badge.getDescription() + "\n" + String.format(languageContext.get("commands.badges.ls.obtained"), player.getData().hasBadge(badge)), false));
}
DiscordUtils.sendPaginatedEmbed(ctx, builder, DiscordUtils.divideFields(7, fields), languageContext.get("commands.badges.ls.desc"));
}
});
badgeCommand.createSubCommandAlias("list", "ls");
badgeCommand.createSubCommandAlias("list", "1ist");
badgeCommand.createSubCommandAlias("list", "Is");
badgeCommand.createSubCommandAlias("list", "is");
badgeCommand.createSubCommandAlias("list", "1s");
cr.registerAlias("badges", "badge");
}
use of net.kodehawa.mantarobot.db.entities.helpers.PlayerData in project MantaroBot by Mantaro.
the class PlayerCmds method profile.
@Subscribe
public void profile(CommandRegistry cr) {
ITreeCommand profileCommand = (TreeCommand) cr.register("profile", new TreeCommand(Category.CURRENCY) {
@Override
public Command defaultTrigger(GuildMessageReceivedEvent event, String mainCommand, String commandName) {
return new SubCommand() {
@Override
protected void call(GuildMessageReceivedEvent event, String content) {
User userLooked = event.getAuthor();
Player player = MantaroData.db().getPlayer(userLooked);
UserData user = MantaroData.db().getUser(event.getMember()).getData();
Member memberLooked = event.getMember();
List<Member> found = FinderUtil.findMembers(content, event.getGuild());
if (found.isEmpty() && !content.isEmpty()) {
event.getChannel().sendMessage(EmoteReference.ERROR + "Didn't find any member with your search criteria :(").queue();
return;
}
if (found.size() > 1 && !content.isEmpty()) {
event.getChannel().sendMessage(EmoteReference.THINKING + "Too many members found, maybe refine your search? (ex. use name#discriminator)\n" + "**Members found:** " + found.stream().map(m -> m.getUser().getName() + "#" + m.getUser().getDiscriminator()).collect(Collectors.joining(", "))).queue();
return;
}
if (found.size() == 1 && !content.isEmpty()) {
userLooked = found.get(0).getUser();
memberLooked = found.get(0);
if (userLooked.isBot()) {
event.getChannel().sendMessage(EmoteReference.ERROR + "Bots don't have profiles.").queue();
return;
}
user = MantaroData.db().getUser(userLooked).getData();
player = MantaroData.db().getPlayer(memberLooked);
}
User marriedTo = (player.getData().getMarriedWith() == null || player.getData().getMarriedWith().isEmpty()) ? null : MantaroBot.getInstance().getUserById(player.getData().getMarriedWith());
PlayerData playerData = player.getData();
Inventory inv = player.getInventory();
// start of badge assigning
Guild mh = MantaroBot.getInstance().getGuildById("213468583252983809");
Member mhMember = mh == null ? null : mh.getMemberById(memberLooked.getUser().getId());
boolean saveAfter = false;
if (player.getMoney() > 7526527671L && playerData.addBadgeIfAbsent(Badge.ALTERNATIVE_WORLD))
saveAfter = true;
if (MantaroData.config().get().isOwner(userLooked) && playerData.addBadgeIfAbsent(Badge.DEVELOPER))
saveAfter = true;
if (inv.asList().stream().anyMatch(stack -> stack.getAmount() == 5000) && playerData.addBadgeIfAbsent(Badge.SHOPPER))
saveAfter = true;
if (inv.asList().stream().anyMatch(stack -> stack.getItem().equals(Items.CHRISTMAS_TREE_SPECIAL) || stack.getItem().equals(Items.BELL_SPECIAL)) && playerData.addBadgeIfAbsent(Badge.CHRISTMAS))
saveAfter = true;
if (MantaroBot.getInstance().getShardedMantaro().getDiscordBotsUpvoters().contains(userLooked.getIdLong()) && playerData.addBadgeIfAbsent(Badge.UPVOTER))
saveAfter = true;
if (player.getLevel() >= 10 && playerData.addBadgeIfAbsent(Badge.WALKER))
saveAfter = true;
if (player.getLevel() >= 50 && playerData.addBadgeIfAbsent(Badge.RUNNER))
saveAfter = true;
if (player.getLevel() >= 100 && playerData.addBadgeIfAbsent(Badge.FAST_RUNNER))
saveAfter = true;
if (player.getLevel() >= 150 && playerData.addBadgeIfAbsent(Badge.MARATHON_RUNNER))
saveAfter = true;
if (player.getLevel() >= 200 && playerData.addBadgeIfAbsent(Badge.MARATHON_WINNER))
saveAfter = true;
if (playerData.getMarketUsed() > 1000 && playerData.addBadgeIfAbsent(Badge.COMPULSIVE_BUYER))
saveAfter = true;
if (mhMember != null && mhMember.getRoles().stream().anyMatch(r -> r.getIdLong() == 406920476259123201L) && playerData.addBadgeIfAbsent(Badge.HELPER_2))
saveAfter = true;
if (mhMember != null && mhMember.getRoles().stream().anyMatch(r -> r.getIdLong() == 290257037072531466L || r.getIdLong() == 290902183300431872L) && playerData.addBadgeIfAbsent(Badge.DONATOR_2))
saveAfter = true;
if (saveAfter)
player.saveAsync();
// end of badge assigning
List<Badge> badges = playerData.getBadges();
Collections.sort(badges);
String displayBadges = badges.stream().map(Badge::getUnicode).limit(5).collect(Collectors.joining(" "));
applyBadge(event.getChannel(), badges.isEmpty() ? null : (playerData.getMainBadge() == null ? badges.get(0) : playerData.getMainBadge()), userLooked, baseEmbed(event, (marriedTo == null || !player.getInventory().containsItem(Items.RING) ? "" : EmoteReference.RING) + memberLooked.getEffectiveName() + "'s Profile", userLooked.getEffectiveAvatarUrl()).setThumbnail(userLooked.getEffectiveAvatarUrl()).setDescription((player.getData().isShowBadge() ? (badges.isEmpty() ? "" : String.format("**%s**\n", (playerData.getMainBadge() == null ? badges.get(0) : playerData.getMainBadge()))) : "") + (player.getData().getDescription() == null ? "No description set" : player.getData().getDescription())).addField(EmoteReference.DOLLAR + "Credits", "$ " + player.getMoney(), true).addField(EmoteReference.ZAP + "Level", player.getLevel() + " (Experience: " + player.getData().getExperience() + ")", true).addField(EmoteReference.REP + "Reputation", String.valueOf(player.getReputation()), true).addField(EmoteReference.POPPER + "Birthday", user.getBirthday() != null ? user.getBirthday().substring(0, 5) : "Not specified.", true).addField(EmoteReference.HEART + "Married with", marriedTo == null ? "Nobody." : marriedTo.getName() + "#" + marriedTo.getDiscriminator(), false).addField(EmoteReference.POUCH + "Inventory", ItemStack.toString(inv.asList()), false).addField(EmoteReference.HEART + "Top 5 Badges", displayBadges.isEmpty() ? "No badges (yet!)" : displayBadges, false).setFooter("User's timezone: " + (user.getTimezone() == null ? "No timezone set." : user.getTimezone()) + " | " + "Requested by " + event.getAuthor().getName(), null));
}
};
}
@Override
public MessageEmbed help(GuildMessageReceivedEvent event) {
return helpEmbed(event, "Profile command.").setDescription("**Retrieves your current user profile.**").addField("Usage", "- To retrieve your profile, `~>profile`\n" + "- To change your description do `~>profile description set <description>`\n" + " -- To clear it, just do `~>profile description clear`\n" + "- To set your timezone do `~>profile timezone <timezone>`\n" + "- To set your display badge use `~>profile displaybadge` and `~>profile displaybadge reset` to reset it.\n" + " -- You can also use `~>profile displaybadge none` to display no badge on your profile.\n" + "**The profile only shows the 5 most important badges!.** Use `~>badges` to get a complete list.", false).build();
}
});
profileCommand.addSubCommand("timezone", new SubCommand() {
@Override
protected void call(GuildMessageReceivedEvent event, String content) {
DBUser dbUser = MantaroData.db().getUser(event.getAuthor());
String[] args = content.split(" ");
if (args.length < 1) {
event.getChannel().sendMessage(EmoteReference.ERROR + "You need to specify the timezone.").queue();
return;
}
String timezone = args[0];
if (timezone.equalsIgnoreCase("reset")) {
dbUser.getData().setTimezone(null);
dbUser.saveAsync();
event.getChannel().sendMessage(EmoteReference.CORRECT + "Reset timezone.").queue();
return;
}
if (!Utils.isValidTimeZone(timezone)) {
event.getChannel().sendMessage(EmoteReference.ERROR + "Invalid timezone.").queue();
return;
}
try {
UtilsCmds.dateGMT(event.getGuild(), timezone);
} catch (Exception e) {
event.getChannel().sendMessage(EmoteReference.ERROR + "Not a valid timezone.").queue();
return;
}
dbUser.getData().setTimezone(timezone);
dbUser.saveAsync();
event.getChannel().sendMessage(String.format("%sSaved timezone, your profile timezone is now: **%s**", EmoteReference.CORRECT, timezone)).queue();
}
});
profileCommand.addSubCommand("description", new SubCommand() {
@Override
protected void call(GuildMessageReceivedEvent event, String content) {
String[] args = content.split(" ");
User author = event.getAuthor();
Player player = MantaroData.db().getPlayer(author);
if (args.length == 0) {
event.getChannel().sendMessage(EmoteReference.ERROR + "You need to provide an argument! (set or remove)\n" + "for example, ~>profile description set Hi there!").queue();
return;
}
if (args[0].equals("set")) {
int MAX_LENGTH = 300;
if (MantaroData.db().getUser(author).isPremium())
MAX_LENGTH = 500;
String content1 = SPLIT_PATTERN.split(content, 2)[1];
if (content1.length() > MAX_LENGTH) {
event.getChannel().sendMessage(EmoteReference.ERROR + "The description is too long! `(Limit of 300 characters for everyone and 500 for premium users)`").queue();
return;
}
player.getData().setDescription(content1);
event.getChannel().sendMessage(EmoteReference.POPPER + "Set description to: **" + content1 + "**\n" + "Check your shiny new profile with `~>profile`").queue();
player.save();
return;
}
if (args[1].equals("clear")) {
player.getData().setDescription(null);
event.getChannel().sendMessage(EmoteReference.CORRECT + "Successfully cleared description.").queue();
player.save();
}
}
});
profileCommand.addSubCommand("displaybadge", new SubCommand() {
@Override
protected void call(GuildMessageReceivedEvent event, String content) {
String[] args = content.split(" ");
if (args.length == 0) {
event.getChannel().sendMessage(EmoteReference.ERROR + "You need to specify your main badge!").queue();
return;
}
Player player = MantaroData.db().getPlayer(event.getAuthor());
PlayerData data = player.getData();
if (args[0].equalsIgnoreCase("none")) {
data.setShowBadge(false);
event.getChannel().sendMessage(EmoteReference.CORRECT + "No badge will show on the top of your profile now!").queue();
player.saveAsync();
return;
}
if (args[0].equalsIgnoreCase("reset")) {
data.setMainBadge(null);
data.setShowBadge(true);
event.getChannel().sendMessage(EmoteReference.CORRECT + "Your display badge is now the most important one.").queue();
player.saveAsync();
return;
}
Badge badge = Badge.lookupFromString(content);
if (badge == null) {
event.getChannel().sendMessage(EmoteReference.ERROR + "There's no such badge...\n" + "Your available badges: " + player.getData().getBadges().stream().map(Badge::getDisplay).collect(Collectors.joining(", "))).queue();
return;
}
if (!data.getBadges().contains(badge)) {
event.getChannel().sendMessage(EmoteReference.ERROR + "You don't have that badge.\n" + "Your available badges: " + player.getData().getBadges().stream().map(Badge::getDisplay).collect(Collectors.joining(", "))).queue();
return;
}
data.setShowBadge(true);
data.setMainBadge(badge);
player.saveAsync();
event.getChannel().sendMessage(EmoteReference.CORRECT + "Your display badge is now: **" + badge.display + "**").queue();
}
});
}
use of net.kodehawa.mantarobot.db.entities.helpers.PlayerData in project MantaroBot by Mantaro.
the class ImageboardUtils method getImage.
public static void getImage(ImageBoard<?> api, ImageRequestType type, boolean nsfwOnly, String imageboard, String[] args, String content, GuildMessageReceivedEvent event) {
Rating rating = Rating.SAFE;
boolean needRating = args.length >= 3;
final TextChannel channel = event.getChannel();
final Player player = MantaroData.db().getPlayer(event.getAuthor());
final PlayerData playerData = player.getData();
if (needRating && !nsfwOnly)
rating = Rating.lookupFromString(args[2]);
if (nsfwOnly)
rating = Rating.EXPLICIT;
if (rating == null) {
channel.sendMessage(EmoteReference.ERROR + "You provided an invalid rating (Available types: questionable, explicit, safe)!").queue();
return;
}
final Rating finalRating = rating;
if (!nsfwCheck(event, nsfwOnly, false, finalRating)) {
channel.sendMessage(EmoteReference.ERROR + "Cannot send a NSFW image in a non-nsfw channel :(").queue();
return;
}
int page = Math.max(1, r.nextInt(25));
String queryRating = nsfwOnly ? null : rating.getLongName();
switch(type) {
case GET:
try {
String arguments = content.replace("get ", "");
String[] argumentsSplit = arguments.split(" ");
api.get(page, queryRating).async(requestedImages -> {
if (isListNull(requestedImages, event))
return;
try {
int number;
List<BoardImage> images = (List<BoardImage>) requestedImages;
if (!nsfwOnly)
images = requestedImages.stream().filter(data -> data.getRating().equals(finalRating)).collect(Collectors.toList());
if (images.isEmpty()) {
channel.sendMessage(EmoteReference.SAD + "There are no images matching your search criteria...").queue();
return;
}
try {
number = Integer.parseInt(argumentsSplit[0]);
} catch (Exception e) {
number = r.nextInt(images.size());
}
BoardImage image = images.get(number);
String tags = image.getTags().stream().collect(Collectors.joining(", "));
if (foundMinorTags(event, tags, image.getRating())) {
return;
}
imageEmbed(image.getURL(), String.valueOf(image.getWidth()), String.valueOf(image.getHeight()), tags, image.getRating(), imageboard, channel);
if (image.getRating().equals(Rating.EXPLICIT)) {
if (playerData.addBadgeIfAbsent(Badge.LEWDIE)) {
player.saveAsync();
}
TextChannelGround.of(event).dropItemWithChance(13, 3);
}
} catch (Exception e) {
event.getChannel().sendMessage(EmoteReference.ERROR + "**There aren't any more images or no results found**! Please try with a lower " + "number or another search.").queue();
}
}, failure -> event.getChannel().sendMessage(EmoteReference.SAD + "There was an error while looking for an image...").queue());
} catch (NumberFormatException ne) {
channel.sendMessage(EmoteReference.ERROR + "Wrong argument type. Check ~>help " + imageboard).queue(message -> message.delete().queueAfter(10, TimeUnit.SECONDS));
} catch (Exception e) {
event.getChannel().sendMessage(EmoteReference.SAD + "There was an error while looking an image...").queue();
}
break;
case TAGS:
try {
String sNoArgs = content.replace("tags ", "");
String[] arguments = sNoArgs.split(" ");
String tags = arguments[0];
DBGuild dbGuild = MantaroData.db().getGuild(event.getGuild());
if (dbGuild.getData().getBlackListedImageTags().contains(tags.toLowerCase())) {
event.getChannel().sendMessage(EmoteReference.ERROR + "This image tag has been blacklisted here by an administrator.").queue();
return;
}
api.search(tags, queryRating).async(requestedImages -> {
// account for this
if (isListNull(requestedImages, event))
return;
try {
List<BoardImage> filter = (List<BoardImage>) requestedImages;
if (!nsfwOnly)
filter = requestedImages.stream().filter(data -> data.getRating().equals(finalRating)).collect(Collectors.toList());
if (filter.isEmpty()) {
channel.sendMessage(EmoteReference.SAD + "There are no images matching your search criteria...").queue();
return;
}
int number;
try {
number = Integer.parseInt(arguments[1]);
} catch (Exception e) {
number = r.nextInt(filter.size() > 0 ? filter.size() - 1 : filter.size());
}
BoardImage image = filter.get(number);
String imageTags = image.getTags().stream().collect(Collectors.joining(", "));
if (foundMinorTags(event, imageTags, image.getRating())) {
return;
}
imageEmbed(image.getURL(), String.valueOf(image.getWidth()), String.valueOf(image.getHeight()), imageTags, image.getRating(), imageboard, channel);
if (image.getRating().equals(Rating.EXPLICIT)) {
if (playerData.addBadgeIfAbsent(Badge.LEWDIE)) {
player.saveAsync();
}
TextChannelGround.of(event).dropItemWithChance(13, 3);
}
} catch (Exception e) {
event.getChannel().sendMessage(EmoteReference.ERROR + "**There aren't any more images or no results found**! Please try with a lower " + "number or another search.").queue();
}
}, failure -> event.getChannel().sendMessage(EmoteReference.SAD + "There was an error while looking for this tag...").queue());
} catch (NumberFormatException numberEx) {
channel.sendMessage(EmoteReference.ERROR + "Wrong argument type. Check ~>help " + imageboard).queue(message -> message.delete().queueAfter(10, TimeUnit.SECONDS));
} catch (Exception exception) {
event.getChannel().sendMessage(EmoteReference.SAD + "There was an error while looking for this tag...").queue();
}
break;
case RANDOM:
api.get(page, queryRating).async(requestedImages -> {
try {
if (isListNull(requestedImages, event))
return;
List<BoardImage> filter = (List<BoardImage>) requestedImages;
if (!nsfwOnly)
filter = requestedImages.stream().filter(data -> data.getRating().equals(finalRating)).collect(Collectors.toList());
if (filter.isEmpty()) {
channel.sendMessage(EmoteReference.SAD + "There are no images matching your search criteria...").queue();
return;
}
int number = r.nextInt(filter.size());
BoardImage image = filter.get(number);
String tags = image.getTags().stream().collect(Collectors.joining(", "));
imageEmbed(image.getURL(), String.valueOf(image.getWidth()), String.valueOf(image.getHeight()), tags, image.getRating(), imageboard, channel);
if (image.getRating().equals(Rating.EXPLICIT)) {
if (playerData.addBadgeIfAbsent(Badge.LEWDIE)) {
player.saveAsync();
}
TextChannelGround.of(event).dropItemWithChance(13, 3);
}
} catch (Exception e) {
event.getChannel().sendMessage(EmoteReference.SAD + "There was an unknown error while looking for a random image...").queue();
}
}, failure -> event.getChannel().sendMessage(EmoteReference.SAD + "There was an error while looking for a random image...").queue());
break;
}
}
Aggregations