108 lines
3.4 KiB
Java
108 lines
3.4 KiB
Java
package wtf.beatrice.hidekobot.commands.base;
|
||
|
||
import net.dv8tion.jda.api.EmbedBuilder;
|
||
import net.dv8tion.jda.api.entities.User;
|
||
import net.dv8tion.jda.api.utils.ImageProxy;
|
||
import wtf.beatrice.hidekobot.Cache;
|
||
import wtf.beatrice.hidekobot.objects.MessageResponse;
|
||
|
||
public class ProfileImage
|
||
{
|
||
|
||
private ProfileImage() {
|
||
throw new IllegalStateException("Utility class");
|
||
}
|
||
|
||
public static int parseResolution(int resolution)
|
||
{
|
||
int[] acceptedSizes = Cache.getSupportedAvatarResolutions();
|
||
|
||
// method to find closest value to accepted values
|
||
int distance = Math.abs(acceptedSizes[0] - resolution);
|
||
int idx = 0;
|
||
for(int c = 1; c < acceptedSizes.length; c++){
|
||
int cdistance = Math.abs(acceptedSizes[c] - resolution);
|
||
if(cdistance < distance){
|
||
idx = c;
|
||
distance = cdistance;
|
||
}
|
||
}
|
||
|
||
return acceptedSizes[idx];
|
||
}
|
||
|
||
public static MessageResponse buildResponse(int resolution, User user, ImageType imageType)
|
||
{
|
||
String imageTypeName = imageType.name().toLowerCase();
|
||
String resolutionString;
|
||
String imageLink = null;
|
||
|
||
User.Profile userProfile = user.retrieveProfile().complete();
|
||
ImageProxy bannerProxy = userProfile.getBanner();
|
||
|
||
if(imageType == ImageType.AVATAR)
|
||
{
|
||
resolutionString = resolution + " × " + resolution;
|
||
imageLink = user.getEffectiveAvatar().getUrl(resolution);
|
||
} else {
|
||
int verticalRes = 361 * resolution / 1024;
|
||
resolutionString = resolution + " × " + verticalRes;
|
||
if(bannerProxy != null)
|
||
imageLink = bannerProxy.getUrl(resolution);
|
||
}
|
||
|
||
int[] acceptedSizes = Cache.getSupportedAvatarResolutions();
|
||
EmbedBuilder embedBuilder = new EmbedBuilder();
|
||
|
||
|
||
embedBuilder.setColor(Cache.getBotColor());
|
||
embedBuilder.setTitle("Profile " + imageTypeName);
|
||
|
||
embedBuilder.addField("User", user.getAsMention(), false);
|
||
|
||
embedBuilder.addField("Current resolution", resolutionString, false);
|
||
|
||
// string builder to create a string that links to all available resolutions
|
||
StringBuilder links = new StringBuilder();
|
||
for(int pos = 0; pos < acceptedSizes.length; pos++)
|
||
{
|
||
int currSize = acceptedSizes[pos];
|
||
|
||
String currLink;
|
||
if(imageType == ImageType.AVATAR)
|
||
{
|
||
currLink = user.getEffectiveAvatar().getUrl(currSize);
|
||
} else {
|
||
if(bannerProxy == null) break;
|
||
currLink = bannerProxy.getUrl(currSize);
|
||
}
|
||
|
||
links.append("**[").append(currSize).append("px](").append(currLink).append(")**");
|
||
if(pos + 1 != acceptedSizes.length) // don't add a separator on the last iteration
|
||
{
|
||
links.append(" | ");
|
||
}
|
||
}
|
||
|
||
embedBuilder.addField("Available resolutions", links.toString(), false);
|
||
|
||
|
||
|
||
if(imageLink != null)
|
||
embedBuilder.setImage(imageLink);
|
||
|
||
|
||
if(imageLink == null) {
|
||
String error = "I couldn't find " + user.getAsMention() + "'s " + imageTypeName + "!";
|
||
return new MessageResponse(error, null);
|
||
} else {
|
||
return new MessageResponse(null, embedBuilder.build());
|
||
}
|
||
}
|
||
|
||
public enum ImageType
|
||
{
|
||
AVATAR, BANNER;
|
||
}
|
||
}
|