use of net.kodehawa.mantarobot.db.entities.DBUser 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.DBUser in project MantaroBot by Mantaro.
the class AudioLoader method loadSingle.
private void loadSingle(AudioTrack audioTrack, boolean silent) {
AudioTrackInfo trackInfo = audioTrack.getInfo();
audioTrack.setUserData(event.getAuthor().getId());
DBGuild dbGuild = MantaroData.db().getGuild(event.getGuild());
DBUser dbUser = MantaroData.db().getUser(event.getMember());
GuildData guildData = dbGuild.getData();
String title = trackInfo.title;
long length = trackInfo.length;
long queueLimit = !Optional.ofNullable(dbGuild.getData().getMusicQueueSizeLimit()).isPresent() ? MAX_QUEUE_LENGTH : dbGuild.getData().getMusicQueueSizeLimit();
int fqSize = guildData.getMaxFairQueue();
if (musicManager.getTrackScheduler().getQueue().size() > queueLimit && !dbUser.isPremium() && !dbGuild.isPremium()) {
if (!silent)
event.getChannel().sendMessage(String.format(":warning: Could not queue %s: Surpassed queue song limit!", title)).queue(message -> message.delete().queueAfter(30, TimeUnit.SECONDS));
return;
}
if (audioTrack.getInfo().length > MAX_SONG_LENGTH && !dbUser.isPremium() && !dbGuild.isPremium()) {
event.getChannel().sendMessage(String.format(":warning: Could not queue %s: Track is longer than 32 minutes! (%s)", title, AudioUtils.getLength(length))).queue();
return;
}
// Comparing if the URLs are the same to be 100% sure they're just not spamming the same url over and over again.
if (musicManager.getTrackScheduler().getQueue().stream().filter(track -> track.getInfo().uri.equals(audioTrack.getInfo().uri)).count() > fqSize && !silent) {
event.getChannel().sendMessage(EmoteReference.ERROR + String.format("**Surpassed fair queue level of %d (Too many songs which are exactly equal)**", fqSize + 1)).queue();
return;
}
musicManager.getTrackScheduler().queue(audioTrack, insertFirst);
musicManager.getTrackScheduler().setRequestedChannel(event.getChannel().getIdLong());
if (!silent) {
event.getChannel().sendMessage(new MessageBuilder().append(String.format("\uD83D\uDCE3 Added to queue -> **%s** **(%s)**", title, AudioUtils.getLength(length))).stripMentions(event.getGuild(), Message.MentionType.EVERYONE, Message.MentionType.HERE).build()).queue();
}
MantaroBot.getInstance().getStatsClient().increment("tracks_loaded");
}
use of net.kodehawa.mantarobot.db.entities.DBUser in project MantaroBot by Mantaro.
the class MantaroListener method handleNewPatron.
/**
* Handles automatic deliver of patreon keys. Should only deliver keys when
* - An user was already in the guild or just joined and got the "Patreon" role assigned by the Patreon bot
* - The user hasn't re-joined to get the role re-assigned
* - The user hasn't received any keys
* - The user pledged, obviously
*
* @param event The event that says that a role got added, obv.
*/
private void handleNewPatron(GenericGuildMemberEvent event) {
// Only in mantaro's guild...
if (event.getGuild().getIdLong() == 213468583252983809L && !MantaroData.config().get().isPremiumBot) {
shard.getThreadPool().execute(() -> {
User user = event.getUser();
// who...
DBUser dbUser = db.getUser(user);
if (event.getMember().getRoles().stream().anyMatch(r -> r.getId().equals("290257037072531466"))) {
// Thanks lombok for the meme names
if (!dbUser.getData().isHasReceivedFirstKey()) {
// Attempt to open a PM and send a key!
user.openPrivateChannel().queue(channel -> {
// Sellout message :^)
channel.sendMessage(EmoteReference.EYES + "Thanks you for donating, we'll deliver your premium key shortly! :heart:").queue(message -> {
message.editMessage(EmoteReference.POPPER + "You received a premium key due to your donation to mantaro. " + "If any doubts, please contact Kodehawa#3457.\n" + "Instructions: **Apply this key to yourself!**. " + "This key is a 365-day long subscription to Mantaro Premium. If you want more keys (>$2 donation) " + "or want to enable the patreon bot (>$4 donation) you need to contact Kodehawa to deliver your keys.\n" + "To apply this key, run the following command in any channel `~>activatekey " + PremiumKey.generatePremiumKey(user.getId(), PremiumKey.Type.USER).getId() + "`\n" + "Thanks you soo much for donating and helping to keep Mantaro alive! :heart:").queue(sent -> {
dbUser.getData().setHasReceivedFirstKey(true);
dbUser.saveAsync();
});
MantaroBot.getInstance().getStatsClient().increment("new_patrons");
// Celebrate internally! \ o /
LogUtils.log("Delivered premium key to " + user.getName() + "#" + user.getDiscriminator() + "(" + user.getId() + ")");
});
}, failure -> LogUtils.log(String.format("User: %s (%s#%s) couldn't receive the key, apply manually when asked!", user.getId(), user.getName(), user.getDiscriminator())));
}
}
});
}
}
use of net.kodehawa.mantarobot.db.entities.DBUser in project MantaroBot by Mantaro.
the class OwnerCmd method owner.
@Subscribe
public void owner(CommandRegistry cr) {
cr.register("owner", new SimpleCommand(Category.OWNER) {
@Override
public CommandPermission permission() {
return CommandPermission.OWNER;
}
@Override
public MessageEmbed help(GuildMessageReceivedEvent event) {
return helpEmbed(event, "Owner command").setDescription("`~>owner premium add <id> <days>` - Adds premium to the specified user for x days.").build();
}
@Override
public void call(GuildMessageReceivedEvent event, String content, String[] args) {
if (args.length < 1) {
onHelp(event);
return;
}
String option = args[0];
if (option.equals("premium")) {
String sub = args[1].substring(0, args[1].indexOf(' '));
if (sub.equals("add")) {
try {
String userId;
String[] values = SPLIT_PATTERN.split(args[1], 3);
try {
Long.parseLong(values[1]);
userId = values[1];
} catch (Exception e) {
if (!event.getMessage().getMentionedUsers().isEmpty()) {
userId = event.getMessage().getMentionedUsers().get(0).getId();
return;
} else {
event.getChannel().sendMessage(EmoteReference.ERROR + "Not a valid user id").queue();
return;
}
}
DBUser db = MantaroData.db().getUser(userId);
db.incrementPremium(TimeUnit.DAYS.toMillis(Long.parseLong(values[2])));
db.saveAsync();
event.getChannel().sendMessage(EmoteReference.CORRECT + "The premium feature for user " + db.getId() + " now is until " + new Date(db.getPremiumUntil())).queue();
return;
} catch (IndexOutOfBoundsException e) {
event.getChannel().sendMessage(EmoteReference.ERROR + "You need to specify id and number of days").queue();
e.printStackTrace();
return;
}
}
if (sub.equals("guild")) {
try {
String[] values = SPLIT_PATTERN.split(args[1], 3);
DBGuild db = MantaroData.db().getGuild(values[1]);
db.incrementPremium(TimeUnit.DAYS.toMillis(Long.parseLong(values[2])));
db.saveAsync();
event.getChannel().sendMessage(EmoteReference.CORRECT + "The premium feature for guild " + db.getId() + " now is until " + new Date(db.getPremiumUntil())).queue();
return;
} catch (IndexOutOfBoundsException e) {
event.getChannel().sendMessage(EmoteReference.ERROR + "You need to specify id and number of days").queue();
e.printStackTrace();
return;
}
}
}
onHelp(event);
}
@Override
public String[] splitArgs(String content) {
return SPLIT_PATTERN.split(content, 2);
}
});
}
Aggregations