Search in sources :

Example 16 with ProfileObject

use of com.github.vaerys.objects.ProfileObject in project DiscordSailv2 by Vaerys-Dawn.

the class TopUserForRole method execute.

@Override
public String execute(String args, CommandObject command) {
    // init index value
    int index = 1;
    // try to get role.
    IRole role = GuildHandler.getRoleFromName(args, command.guild.get());
    if (role == null) {
        try {
            // if role get fails, try again, but this time assume the first "word" is the rank the user wants to get.
            index = Integer.parseInt(new SplitFirstObject(args).getFirstWord());
        } catch (NumberFormatException e) {
            // not a valid number, can't find role, bork.
            return "> Invalid Role";
        }
        // remove index from string, try to get role again.
        args = new SplitFirstObject(args).getRest();
        role = GuildHandler.getRoleFromName(args, command.guild.get());
        if (role == null)
            return "> Invalid Role.";
    }
    IMessage working = RequestHandler.sendMessage("`Working...`", command.channel.get()).get();
    // populate list with users with role defined.
    List<Long> userIDs = command.guild.get().getUsersByRole(role).stream().map(IUser::getLongID).collect(Collectors.toList());
    if (userIDs.isEmpty()) {
        RequestHandler.deleteMessage(working);
        return "> Could not find any users with that role!";
    }
    userIDs.removeIf(f -> PixelHandler.rank(command.guild.users, command.guild.get(), f) == -1);
    userIDs.sort((o1, o2) -> {
        long rank1 = PixelHandler.rank(command.guild.users, command.guild.get(), o1);
        long rank2 = PixelHandler.rank(command.guild.users, command.guild.get(), o2);
        return Long.compare(rank1, rank2);
    });
    if (userIDs.size() == 0)
        return "> Could not find any ranked users with that role.";
    if (index > userIDs.size()) {
        RequestHandler.deleteMessage(working);
        return "> There's only " + userIDs.size() + (userIDs.size() == 1 ? " user" : " users") + " with that role.";
    }
    if (index == 1) {
        // show an embed with the top (at most) 5 users instead.
        RequestHandler.deleteMessage(working);
        getEmbed(command, role, userIDs);
        return null;
    }
    ProfileObject topUserProfile = command.guild.users.getUserByID(userIDs.get(index - 1));
    UserObject topUser = topUserProfile.getUser(command.guild);
    NumberFormat nf = NumberFormat.getInstance();
    RequestHandler.deleteMessage(working);
    return "> @" + topUser.username + ", **Pixels:** " + nf.format(topUserProfile.getXP()) + ", **Level:** " + topUserProfile.getCurrentLevel() + ", **User ID:** " + topUser.longID;
}
Also used : IRole(sx.blah.discord.handle.obj.IRole) IMessage(sx.blah.discord.handle.obj.IMessage) UserObject(com.github.vaerys.masterobjects.UserObject) SplitFirstObject(com.github.vaerys.objects.SplitFirstObject) ProfileObject(com.github.vaerys.objects.ProfileObject) NumberFormat(java.text.NumberFormat)

Example 17 with ProfileObject

use of com.github.vaerys.objects.ProfileObject in project DiscordSailv2 by Vaerys-Dawn.

the class TopUserForRole method getEmbed.

private void getEmbed(CommandObject command, IRole role, List<Long> userIDs) {
    XEmbedBuilder embed = new XEmbedBuilder(command);
    int showing = (userIDs.size() > 5 ? 5 : userIDs.size());
    embed.withTitle("Top " + (userIDs.size() == 1 ? " user" : showing + " users") + " for role " + role.getName());
    embed.withFooterText("Total ranked users with this role: " + userIDs.size());
    ProfileObject userProfile;
    UserObject userObject;
    NumberFormat nf = NumberFormat.getInstance();
    String titlef = "#%s. %s";
    String contentf = "**XP:** %s\t**Level:** %s\n**UID:** %s";
    for (int i = 0; i < showing; i++) {
        userProfile = command.guild.users.getUserByID(userIDs.get(i));
        userObject = userProfile.getUser(command.guild);
        embed.appendField(String.format(titlef, i + 1, userObject.displayName), String.format(contentf, nf.format(userProfile.getXP()), userProfile.getCurrentLevel(), userObject.longID), false);
    }
    embed.send(command.channel);
}
Also used : XEmbedBuilder(com.github.vaerys.objects.XEmbedBuilder) UserObject(com.github.vaerys.masterobjects.UserObject) ProfileObject(com.github.vaerys.objects.ProfileObject) NumberFormat(java.text.NumberFormat)

Example 18 with ProfileObject

use of com.github.vaerys.objects.ProfileObject in project DiscordSailv2 by Vaerys-Dawn.

the class TransferLevels method execute.

@Override
public String execute(String args, CommandObject command) {
    if (command.guild.config.xpGain) {
        return "> Cannot transfer levels, xp gain enabled.";
    }
    if (command.guild.config.getRewardRoles().size() == 0) {
        return "> No rewards available to grant. cannot transfer levels";
    }
    IMessage message = RequestHandler.sendMessage("`Working...`", command.channel.get()).get();
    Utility.sortRewards(command.guild.config.getRewardRoles());
    for (IUser user : command.guild.getUsers()) {
        if (!user.isBot()) {
            ProfileObject uObject = command.guild.users.getUserByID(user.getLongID());
            if (uObject == null) {
                uObject = command.guild.users.addUser(user.getLongID());
            }
            uObject.lastTalked = ZonedDateTime.now(ZoneOffset.UTC).toEpochSecond();
            uObject.setXp(0);
            uObject.setCurrentLevel(-1);
            for (RewardRoleObject r : command.guild.config.getRewardRoles()) {
                if (user.getRolesForGuild(command.guild.get()).contains(r.get(command.guild))) {
                    uObject.setXp(r.getXp());
                    uObject.setCurrentLevel(r.getLevel());
                }
            }
            GuildHandler.checkUsersRoles(uObject.getUserID(), command.guild);
        }
    }
    RequestHandler.deleteMessage(message);
    command.guild.config.xpGain = true;
    return "> Transfer Complete.";
}
Also used : RewardRoleObject(com.github.vaerys.objects.RewardRoleObject) IMessage(sx.blah.discord.handle.obj.IMessage) IUser(sx.blah.discord.handle.obj.IUser) ProfileObject(com.github.vaerys.objects.ProfileObject)

Example 19 with ProfileObject

use of com.github.vaerys.objects.ProfileObject in project DiscordSailv2 by Vaerys-Dawn.

the class ArtHandler method pinMessage.

public static void pinMessage(CommandObject command, UserObject reacted, UserObject owner) {
    IChannel channelIDS = command.guild.getChannelByType(ChannelSetting.ART);
    List<TrackLikes> likes = command.guild.channelData.getLikes();
    List<Long> pins = command.guild.channelData.getPinnedMessages();
    // exit if not pinning art
    if (!command.guild.config.artPinning)
        return;
    // exit if the art is already pinned
    if (command.message.get().isPinned())
        return;
    // exit if message owner is a bot
    if (owner.get().isBot())
        return;
    // exit if message has already been unpinned.
    IReaction reaction = command.message.getReationByName(Constants.EMOJI_REMOVE_PIN);
    if (reaction != null && reaction.getUserReacted(command.client.bot.get())) {
        RequestBuffer.request(() -> command.message.get().removeReaction(reacted.get(), Utility.getReaction(Constants.EMOJI_ADD_PIN))).get();
        return;
    }
    // exit if user has art pinning denied.
    ProfileObject profile = reacted.getProfile(command.guild);
    if (profile != null && profile.getSettings().contains(UserSetting.DENY_ART_PINNING))
        return;
    // exit if there is no art channel
    if (channelIDS == null)
        return;
    // exit if this is not the art channel
    if (channelIDS.getLongID() != command.channel.longID)
        return;
    // exit if there is no art to be found
    if (!checkAttachments(command) && !checkMessage(command))
        return;
    try {
        // pin message
        RequestBuffer.request(() -> command.channel.get().pin(command.message.get())).get();
        // debug builder
        String name;
        if (checkAttachments(command)) {
            name = "ATTACHMENT_PIN";
        } else {
            name = "MESSAGE_PIN";
        }
        String args;
        args = command.message.getContent();
        for (IMessage.Attachment a : command.message.getAttachments()) {
            args += " <" + a.getUrl() + ">";
        }
        if (command.message.getContent() == null || command.message.getContent().isEmpty()) {
            args = args.replace("  ", "");
        }
        command.guild.sendDebugLog(command, "ART_PINNED", name, args);
        // end debug
        // add to ping
        pins.add(command.message.longID);
        // add pin response
        RequestBuffer.request(() -> command.message.get().addReaction(Utility.getReaction(Constants.EMOJI_ADD_PIN)));
        if (command.guild.config.likeArt && command.guild.config.modulePixels) {
            // add heart
            RequestBuffer.request(() -> command.message.get().addReaction(Utility.getReaction(Constants.EMOJI_LIKE_PIN)));
            // add to list
            likes.add(new TrackLikes(command.message.longID));
        }
        String response;
        if (!command.guild.config.autoArtPinning) {
            if (owner.longID == reacted.longID) {
                response = "> **" + reacted.displayName + "** Has pinned their";
            } else {
                response = "> **" + reacted.displayName + "** Has pinned **" + owner.displayName + "'s**";
            }
            response += " art by reacting with the \uD83D\uDCCC emoji.";
        } else {
            response = "> I have pinned **" + owner.displayName + "'s** art.";
        }
        if (command.guild.config.likeArt && command.guild.config.modulePixels) {
            response += "\nYou can now react with a \u2764 emoji to give the user some pixels.";
        }
        IMessage pinResponse = RequestHandler.sendMessage(response, command.channel).get();
        Thread thread = new Thread(() -> {
            try {
                logger.trace("Deleting in 2 minutes.");
                Thread.sleep(2 * 60 * 1000);
                RequestHandler.deleteMessage(pinResponse);
            } catch (InterruptedException e) {
            // do nothing
            }
        });
        checkList(command);
        thread.start();
        return;
    } catch (DiscordException e) {
        if (e.getErrorMessage().contains("already pinned")) {
            return;
        } else {
            Utility.sendStack(e);
        }
    }
}
Also used : IChannel(sx.blah.discord.handle.obj.IChannel) IMessage(sx.blah.discord.handle.obj.IMessage) ProfileObject(com.github.vaerys.objects.ProfileObject) TrackLikes(com.github.vaerys.objects.TrackLikes) DiscordException(sx.blah.discord.util.DiscordException) IReaction(sx.blah.discord.handle.obj.IReaction)

Example 20 with ProfileObject

use of com.github.vaerys.objects.ProfileObject in project DiscordSailv2 by Vaerys-Dawn.

the class CCHandler method handleCommand.

public static void handleCommand(String args, CommandObject command) {
    // cc lockout handling
    SplitFirstObject commandName = new SplitFirstObject(args);
    CCommandObject commandObject = command.guild.customCommands.getCommand(commandName.getFirstWord(), command);
    String ccArgs = commandName.getRest();
    if (ccArgs == null) {
        ccArgs = "";
    }
    if (commandObject == null)
        return;
    List<IChannel> ccDenied = command.guild.getChannelsByType(ChannelSetting.CC_DENIED);
    if (ccDenied.contains(command.channel.get())) {
        RequestHandler.sendMessage("> Custom Command usage has been disabled for this channel.", command.channel);
        return;
    }
    ProfileObject object = command.guild.users.getUserByID(command.user.longID);
    if (object != null && object.getSettings().contains(UserSetting.DENY_USE_CCS)) {
        RequestHandler.sendMessage("> Nothing interesting happens. `(ERROR: 403)`", command.channel.get());
        return;
    }
    command.guild.sendDebugLog(command, "CUSTOM_COMMAND", commandObject.getName(command), ccArgs);
    String contents = commandObject.getContents(true);
    // shitpost handling
    if (commandObject.isShitPost() && command.guild.config.shitPostFiltering && !GuildHandler.testForPerms(command, Permissions.MANAGE_CHANNELS)) {
        List<IChannel> channels = command.guild.getChannelsByType(ChannelSetting.SHITPOST);
        if (channels.size() != 0 && !channels.contains(command.channel.get())) {
            channels = command.user.getVisibleChannels(channels);
            List<String> channelMentions = Utility.getChannelMentions(channels);
            RequestHandler.sendMessage(Utility.getChannelMessage(channelMentions), command.channel.get());
            return;
        }
    }
    // tag handling
    for (TagObject t : TagList.getType(TagType.CC)) {
        contents = t.handleTag(contents, command, ccArgs);
        if (contents == null)
            return;
    }
    RequestHandler.sendMessage(contents, command.channel.get());
}
Also used : CCommandObject(com.github.vaerys.objects.CCommandObject) IChannel(sx.blah.discord.handle.obj.IChannel) TagObject(com.github.vaerys.templates.TagObject) SplitFirstObject(com.github.vaerys.objects.SplitFirstObject) ProfileObject(com.github.vaerys.objects.ProfileObject)

Aggregations

ProfileObject (com.github.vaerys.objects.ProfileObject)34 UserObject (com.github.vaerys.masterobjects.UserObject)13 SplitFirstObject (com.github.vaerys.objects.SplitFirstObject)10 ArrayList (java.util.ArrayList)7 XEmbedBuilder (com.github.vaerys.objects.XEmbedBuilder)5 IChannel (sx.blah.discord.handle.obj.IChannel)5 UserSetting (com.github.vaerys.enums.UserSetting)4 RewardRoleObject (com.github.vaerys.objects.RewardRoleObject)4 IMessage (sx.blah.discord.handle.obj.IMessage)4 IUser (sx.blah.discord.handle.obj.IUser)4 CCommandObject (com.github.vaerys.objects.CCommandObject)3 ListIterator (java.util.ListIterator)3 IRole (sx.blah.discord.handle.obj.IRole)3 CommandObject (com.github.vaerys.commands.CommandObject)2 GuildObject (com.github.vaerys.masterobjects.GuildObject)2 TrackLikes (com.github.vaerys.objects.TrackLikes)2 NumberFormat (java.text.NumberFormat)2 ZonedDateTime (java.time.ZonedDateTime)2 ChannelSetting (com.github.vaerys.enums.ChannelSetting)1 SAILType (com.github.vaerys.enums.SAILType)1