/** * Creates an {@link net.dv8tion.jda.core.entities.Icon Icon} instance for * this attachment if {@link #isImage() isImage()} is {@code true}! * <br>This is a convenience method that can be used to retrieve an Icon from an attachment image link which * requires a set user-agent to be loaded. * * <p>When a global proxy was specified via {@link net.dv8tion.jda.core.JDABuilder JDABuilder} this will use the * specified proxy to create an {@link java.io.InputStream InputStream} otherwise it will use a normal {@link java.net.URLConnection URLConnection} * with the User-Agent for the currently logged in account. * * @throws IOException * If an IOError occurs while reading the image * @throws java.lang.IllegalStateException * If this is not an image attachment * * @return {@link net.dv8tion.jda.core.entities.Icon Icon} for this image attachment * * @since 3.4.0 */ public Icon getAsIcon() throws IOException { if (!isImage()) throw new IllegalStateException("Cannot create an Icon out of this attachment. This is not an image."); AtomicReference<Icon> icon = new AtomicReference<>(); withInputStream((in) -> icon.set(Icon.from(in))); return icon.get(); }
/** * Creates an {@link Icon Icon} with the specified {@link java.io.InputStream InputStream}. * <br>We here read the specified InputStream and forward the retrieved byte data to {@link #from(byte[])}. * * @param stream * A not-null InputStream. * * @throws IllegalArgumentException * if the provided stream is null * @throws IOException * If the first byte cannot be read for any reason other than the end of the file, * if the input stream has been closed, or if some other I/O error occurs. * * @return An Icon instance representing the specified InputStream * * @see net.dv8tion.jda.core.utils.IOUtil#readFully(InputStream) */ public static Icon from(InputStream stream) throws IOException { Checks.notNull(stream, "InputStream"); return from(IOUtil.readFully(stream)); }
/** * Creates an {@link Icon Icon} with the specified {@link java.io.File File}. * <br>We here read the specified File and forward the retrieved byte data to {@link #from(byte[])}. * * @param file * An existing, not-null file. * * @throws IllegalArgumentException * if the provided file is either null or does not exist * @throws IOException * if there is a problem while reading the file. * * @return An Icon instance representing the specified File * * @see net.dv8tion.jda.core.utils.IOUtil#readFully(File) */ public static Icon from(File file) throws IOException { Checks.notNull(file, "Provided File"); Checks.check(file.exists(), "Provided file does not exist!"); return from(IOUtil.readFully(file)); }
@Override public void onCommand(User sender, GuildWrapper guild, TextChannel channel, Message message, String[] args, Member member) { if (args.length == 0) { if (!message.getAttachments().isEmpty()) { Message.Attachment attachment = message.getAttachments().get(0); try { sender.getJDA().getSelfUser().getManager().setAvatar(Icon.from( new URL(attachment.getUrl()).openStream() )).complete(); } catch (IOException e) { channel.sendMessage("Failed to update avatar!! " + e).queue(); } channel.sendMessage("Success!").queue(); } else { channel.sendMessage("You must either attach an image or link to one!").queue(); } } else { try { sender.getJDA().getSelfUser().getManager().setAvatar(Icon.from( new URL(args[0]).openStream() )).complete(); } catch (IOException e) { channel.sendMessage("Failed to update avatar!! " + e).queue(); } channel.sendMessage("Success!").queue(); } }
@Override public String execute(DiscordBot bot, String[] args, MessageChannel channel, User author, Message inputMessage) { SimpleRank rank = bot.security.getSimpleRank(author); if (!rank.isAtLeast(SimpleRank.CREATOR)) { return Templates.no_permission.formatGuild(channel); } if (args.length <= 1) { try { Icon icon = Icon.from(Unirest.get(args[0]).asBinary().getBody()); bot.queue.add(channel.getJDA().getSelfUser().getManager().setAvatar(icon)); } catch (IOException | UnirestException e) { return "Error: " + e.getMessage(); } return ":+1:"; } return ":face_palm: I expected you to know how to use it"; } }
@Override protected void execute(CommandEvent event) { String url; if(event.getArgs().isEmpty()) if(!event.getMessage().getAttachments().isEmpty() && event.getMessage().getAttachments().get(0).isImage()) url = event.getMessage().getAttachments().get(0).getUrl(); else url = null; else url = event.getArgs(); InputStream s = OtherUtil.imageFromUrl(url); if(s==null) { event.reply(event.getClient().getError()+" Invalid or missing URL"); } else { try { event.getSelfUser().getManager().setAvatar(Icon.from(s)).queue( v -> event.reply(event.getClient().getSuccess()+" Successfully changed avatar."), t -> event.reply(event.getClient().getError()+" Failed to set avatar.")); } catch(IOException e) { event.reply(event.getClient().getError()+" Could not load from provided URL."); } } } }