如何使用JDA发送图像

时间:2018-03-30 23:22:34

标签: java discord

我正在开发我的Java机器人不和谐。我想发送一张图片。我尝试使用TextChannel.sendFile(File, Message),但它不是我想要的结果。我希望此文件显示为普通图像

导入:

import java.io.File;
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ThreadLocalRandom;

import javax.xml.namespace.QName;
import javax.xml.stream.FactoryConfigurationError;
import javax.xml.stream.XMLEventReader;
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.events.Attribute;
import javax.xml.stream.events.StartElement;
import javax.xml.stream.events.XMLEvent;

import org.apache.commons.io.FileUtils;

import net.dv8tion.jda.core.MessageBuilder;
import net.dv8tion.jda.core.entities.Message;
import net.dv8tion.jda.core.entities.TextChannel;
import net.dv8tion.jda.core.events.message.MessageReceivedEvent;

另一个代码:

        URL url = new URL(s.toString());
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();

        XMLEventReader reader = XMLInputFactory.newInstance().createXMLEventReader(conn.getInputStream());
        final List<String> files = new ArrayList<>();

        while (reader.hasNext()) {
            XMLEvent e = reader.nextEvent();

            if (e.isStartElement()) {
                StartElement se = e.asStartElement();

                if (se.getName().getLocalPart().equals("post")) {
                    Attribute purl = se.getAttributeByName(new QName("file_url"));
                    files.add(purl.getValue());
                }
            }
        }

        int rid = ThreadLocalRandom.current().nextInt(files.size() - 1);
        String p = files.get(rid);
        files.clear();

        URL u = new URL(p);

        final String[] dots = p.split("\\.");
        final String format = dots[dots.length - 1];

        File f = new File("its not a porn." + format);

        FileUtils.copyURLToFile(url, f);

        Message m = new MessageBuilder().append("okay :)").build();
        c.sendFile(f, m).queue();
}

我试图在某个地方找到解决方案,但我找不到任何有用的信息。

2 个答案:

答案 0 :(得分:1)

在 JDA 4.2.0_168

sendFile() 上的消息是您要发送到 Discord 服务器的文件的名称,因此它需要一个扩展名

示例:

File f = new File("image.png");
TextChannel.sendFile(f, "image.png").queue();

如果您想在消息中发表评论

File f = new File("image.png");
//the name doesn't need to be the same, just the same extension
TextChannel.sendFile(f, "another_name.png").append("okay :)").queue();

Result of last code

答案 1 :(得分:0)

阅读文档,您需要创建一个MessageEmbed并使用m.setEmbed(..)

将其添加到邮件中