use of sx.blah.discord.util.EmbedBuilder in project Shadbot by Shadorc.
the class LyricsCmd method execute.
@Override
public void execute(Context context) throws MissingArgumentException {
List<String> args = StringUtils.split(context.getArg(), 2, "-");
if (args.size() != 2) {
throw new MissingArgumentException();
}
LoadingMessage loadingMsg = new LoadingMessage("Loading lyrics...", context.getChannel());
loadingMsg.send();
try {
String artistSrch = NetUtils.encode(args.get(0).replaceAll("[^A-Za-z0-9]", "-"));
String titleSrch = NetUtils.encode(args.get(1).replaceAll("[^A-Za-z0-9]", "-"));
// Make a direct search with the artist and the title
String url = String.format("%s/lyrics/%s/%s", HOME_URL, artistSrch, titleSrch);
Response response = NetUtils.getResponse(url);
Document doc = NetUtils.getResponse(url).parse().outputSettings(PRESERVE_FORMAT);
// If the direct search found nothing
if (response.statusCode() == 404 || response.parse().text().contains("Oops! We couldn't find that page.")) {
url = String.format("%s/search/%s-%s?", HOME_URL, artistSrch, titleSrch);
// Make a search request on the site
Document searchDoc = NetUtils.getDoc(url);
Element trackListElement = searchDoc.getElementsByClass("tracks list").first();
if (trackListElement == null) {
loadingMsg.edit(TextUtils.noResult(context.getArg()));
return;
}
// Find the first element containing "title" (generally the best result) and get its URL
url = HOME_URL + trackListElement.getElementsByClass("title").attr("href");
doc = NetUtils.getDoc(url).outputSettings(PRESERVE_FORMAT);
}
String artist = doc.getElementsByClass("mxm-track-title__artist").html();
String title = StringUtils.remove(doc.getElementsByClass("mxm-track-title__track ").text(), "Lyrics");
String albumImg = "https:" + doc.getElementsByClass("banner-album-image").select("img").first().attr("src");
String lyrics = StringUtils.truncate(doc.getElementsByClass("mxm-lyrics__content ").html(), MAX_LYRICS_LENGTH);
EmbedBuilder embed = EmbedUtils.getDefaultEmbed().setLenient(true).withAuthorName(String.format("Lyrics (%s - %s)", artist, title)).withAuthorUrl(url).withThumbnail(albumImg).appendDescription(url + "\n\n" + lyrics);
loadingMsg.edit(embed.build());
} catch (IOException err) {
loadingMsg.delete();
Utils.handle("getting lyrics", context, err);
}
}
use of sx.blah.discord.util.EmbedBuilder in project Shadbot by Shadorc.
the class GifCmd method execute.
@Override
public void execute(Context context) throws MissingArgumentException {
LoadingMessage loadingMsg = new LoadingMessage("Loading gif...", context.getChannel());
loadingMsg.send();
try {
String url = String.format("https://api.giphy.com/v1/gifs/random?api_key=%s&tag=%s", APIKeys.get(APIKey.GIPHY_API_KEY), NetUtils.encode(context.getArg()));
String bodyText = NetUtils.getBody(url);
// If the body is HTML, Giphy did not returned JSON
if (bodyText.charAt(0) != '{') {
throw new HttpStatusException("Giphy did not return valid JSON.", 503, url);
}
JSONObject mainObj = new JSONObject(bodyText);
if (!mainObj.has("data")) {
throw new HttpStatusException("Giphy did not return valid JSON.", 503, url);
}
if (mainObj.get("data") instanceof JSONArray) {
loadingMsg.edit(TextUtils.noResult(context.getArg()));
return;
}
EmbedBuilder embed = new EmbedBuilder().withColor(Config.BOT_COLOR).withImage(mainObj.getJSONObject("data").getString("image_url"));
loadingMsg.edit(embed.build());
} catch (JSONException | IOException err) {
loadingMsg.delete();
Utils.handle("getting a gif", context, err);
}
}
use of sx.blah.discord.util.EmbedBuilder in project Shadbot by Shadorc.
the class ImageCmd method execute.
@Override
public void execute(Context context) throws MissingArgumentException {
if (!context.hasArg()) {
throw new MissingArgumentException();
}
LoadingMessage loadingMsg = new LoadingMessage("Loading image...", context.getChannel());
loadingMsg.send();
try {
JSONObject resultObj = this.getRandomPopularResult(NetUtils.encode(context.getArg()));
if (resultObj == null) {
loadingMsg.edit(TextUtils.noResult(context.getArg()));
return;
}
EmbedBuilder embed = EmbedUtils.getDefaultEmbed().withAuthorName("DeviantArt (Search: " + context.getArg() + ")").withAuthorUrl(resultObj.getString("url")).withThumbnail("http://www.pngall.com/wp-content/uploads/2016/04/Deviantart-Logo-Transparent.png").appendField("Title", resultObj.getString("title"), false).appendField("Author", resultObj.getJSONObject("author").getString("username"), false).appendField("Category", resultObj.getString("category_path"), false).withImage(resultObj.getJSONObject("content").getString("src"));
loadingMsg.edit(embed.build());
} catch (JSONException | IOException err) {
loadingMsg.delete();
Utils.handle("getting an image", context, err);
}
}
use of sx.blah.discord.util.EmbedBuilder in project Shadbot by Shadorc.
the class WallpaperCmd method execute.
@Override
public void execute(Context context) throws MissingArgumentException, IllegalCmdArgumentException {
LoadingMessage loadingMsg = new LoadingMessage("Loading wallpaper...", context.getChannel());
loadingMsg.send();
if (wallhaven == null) {
wallhaven = new Wallhaven(APIKeys.get(APIKey.WALLHAVEN_LOGIN), APIKeys.get(APIKey.WALLHAVEN_PASSWORD));
}
Options options = new Options();
options.addOption("p", PURITY, true, FormatUtils.format(Purity.values(), purity -> purity.toString().toLowerCase(), ", "));
options.addOption("c", CATEGORY, true, FormatUtils.format(Category.values(), cat -> cat.toString().toLowerCase(), ", "));
Option ratioOpt = new Option("rat", RATIO, true, "image ratio");
ratioOpt.setValueSeparator('x');
options.addOption(ratioOpt);
Option resOpt = new Option("res", RESOLUTION, true, "image resolution");
resOpt.setValueSeparator('x');
options.addOption(resOpt);
Option keyOpt = new Option("k", KEYWORD, true, KEYWORD);
keyOpt.setValueSeparator(',');
options.addOption(keyOpt);
CommandLine cmdLine;
try {
List<String> args = StringUtils.split(context.getArg());
cmdLine = new DefaultParser().parse(options, args.toArray(new String[args.size()]));
} catch (UnrecognizedOptionException | org.apache.commons.cli.MissingArgumentException err) {
loadingMsg.delete();
throw new IllegalCmdArgumentException(String.format("%s. Use `%shelp %s` for more information.", err.getMessage(), context.getPrefix(), this.getName()));
} catch (ParseException err) {
loadingMsg.delete();
Utils.handle("getting a wallpaper", context, err);
return;
}
Purity purity = this.parseEnum(loadingMsg, context, Purity.class, PURITY, cmdLine.getOptionValue(PURITY, Purity.SFW.toString()));
if ((purity.equals(Purity.NSFW) || purity.equals(Purity.SKETCHY)) && !context.getChannel().isNSFW()) {
loadingMsg.edit(TextUtils.mustBeNSFW(context.getPrefix()));
return;
}
SearchQueryBuilder queryBuilder = new SearchQueryBuilder();
queryBuilder.purity(purity);
if (cmdLine.hasOption(CATEGORY)) {
queryBuilder.categories(this.parseEnum(loadingMsg, context, Category.class, CATEGORY, cmdLine.getOptionValue(CATEGORY)));
}
if (cmdLine.hasOption(RATIO)) {
Dimension dim = this.parseDim(loadingMsg, context, RATIO, cmdLine.getOptionValues(RATIO));
queryBuilder.ratios(new Ratio((int) dim.getWidth(), (int) dim.getHeight()));
}
if (cmdLine.hasOption(RESOLUTION)) {
Dimension dim = this.parseDim(loadingMsg, context, RESOLUTION, cmdLine.getOptionValues(RESOLUTION));
queryBuilder.resolutions(new Resolution((int) dim.getWidth(), (int) dim.getHeight()));
}
if (cmdLine.hasOption(KEYWORD)) {
queryBuilder.keywords(cmdLine.getOptionValues(KEYWORD));
}
try {
List<Wallpaper> wallpapers = wallhaven.search(queryBuilder.pages(1).build());
if (wallpapers.isEmpty()) {
loadingMsg.edit(TextUtils.noResult(context.getMessage().getContent()));
return;
}
Wallpaper wallpaper = wallpapers.get(ThreadLocalRandom.current().nextInt(wallpapers.size()));
String tags = FormatUtils.format(wallpaper.getTags(), tag -> String.format("`%s`", StringUtils.remove(tag.toString(), "#")), " ");
EmbedBuilder embed = EmbedUtils.getDefaultEmbed().withAuthorName("Wallpaper").withAuthorUrl(wallpaper.getUrl()).withImage(wallpaper.getImageUrl()).appendField("Resolution", wallpaper.getResolution().toString(), false).appendField("Tags", tags, false);
loadingMsg.edit(embed.build());
} catch (ConnectionException err) {
loadingMsg.delete();
Utils.handle("getting a wallpaper", context, err.getCause());
}
}
use of sx.blah.discord.util.EmbedBuilder in project Shadbot by Shadorc.
the class RolelistCmd method execute.
@Override
public void execute(Context context) throws MissingArgumentException, IllegalCmdArgumentException {
List<IRole> roles = context.getMessage().getRoleMentions();
if (roles.isEmpty()) {
throw new MissingArgumentException();
}
List<IUser> users = roles.stream().flatMap(role -> context.getGuild().getUsersByRole(role).stream()).distinct().collect(Collectors.toList());
// Only keep elements common to all users list
roles.stream().forEach(role -> users.retainAll(context.getGuild().getUsersByRole(role)));
EmbedBuilder embed = EmbedUtils.getDefaultEmbed().withAuthorName("Role list").withDescription(String.format("Members with role(s) **%s**", FormatUtils.format(roles, IRole::getName, ", ")));
if (users.isEmpty()) {
embed.appendDescription(String.format("There is nobody with %s.", roles.size() == 1 ? "this role" : "these roles"));
} else {
FormatUtils.createColumns(users.stream().map(IUser::getName).collect(Collectors.toList()), 25).stream().forEach(embed::appendField);
}
BotUtils.sendMessage(embed.build(), context.getChannel());
}
Aggregations