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;
}
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);
}
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.";
}
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);
}
}
}
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());
}
Aggregations