Как отправить изображение с помощью JDA

Я разрабатываю своего 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();
}

Я пытался где-то найти решение, но не нашел никакой информации, которая могла бы помочь.

поделитесь кодом, вы используете sx.blah.discord.Discord4J?

whoopdedoo 31.03.2018 01:34

@IddoE, мне нужно включить это в свой путь сборки, верно? Тогда как мне это сделать с помощью discord4j?

bumbread 31.03.2018 01:36

поделитесь текущим кодом, чтобы мы могли помочь, я спросил только потому, что вижу пример с этой библиотекой

whoopdedoo 31.03.2018 01:37

@IddoE нет, в моем проекте этого нет

bumbread 31.03.2018 01:39

@IddoE добавлен под вопрос. Я использую JDA

bumbread 31.03.2018 01:40
github.com/DV8FromTheWorld/JDA?
whoopdedoo 31.03.2018 01:43

@IddoE Ага, вот этот: D

bumbread 31.03.2018 01:46

образовательное предположение и поделитесь своим импортом, пожалуйста, попробуйте дать полный пример кода для вашей конкретной проблемы

whoopdedoo 31.03.2018 01:47

@IddoE добавил импорт: D

bumbread 31.03.2018 01:55
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
9
4 330
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Читая документацию, вам нужно создать Сообщение и добавить его в сообщение с помощью m.setEmbed (..)

На 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();

Результат последнего кода

Другие вопросы по теме