use of net.dv8tion.jda.api.entities.MessageEmbed.Field in project Discord-Core-Bot-Apple by demodude4u.
the class CommandReporting method createEmbeds.
public List<MessageEmbed> createEmbeds() {
EmbedBuilder builder = new EmbedBuilder();
builder.setAuthor(author, null, authorIconURL);
if (commandStart != null) {
builder.setTimestamp(commandStart);
}
if (level != Level.INFO) {
builder.setColor(level.getColor());
}
if (command != null) {
builder.addField("Command", limitContent(1000, command), false);
}
if (commandStart != null) {
Duration responseTime = Duration.between(commandStart, Instant.now());
builder.addField("Response Time", responseTime.toMillis() + "ms", true);
}
for (Field field : fields) {
builder.addField(field);
}
if (!warnings.isEmpty()) {
builder.addField("Warnings", limitContent(1000, joinUnique(warnings)), true);
}
if (!debugs.isEmpty()) {
builder.addField("Debug", limitContent(1000, joinUnique(debugs)), true);
}
if (!exceptions.isEmpty()) {
List<String> exceptionMessages = exceptions.stream().map(e -> e.getClass().getSimpleName() + ": " + e.getMessage()).collect(Collectors.toList());
builder.addField("Exceptions", limitContent(1000, joinUnique(exceptionMessages)), true);
builder.addField("Stack Trace", limitContent(1000, exceptions.stream().map(e -> {
try (StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw)) {
e.printStackTrace(pw);
pw.flush();
return sw.toString();
} catch (IOException e1) {
e1.printStackTrace();
return "";
}
}).distinct().collect(Collectors.joining("\n\n"))), false);
}
if (!replies.isEmpty()) {
builder.addField("Replies", replies.stream().map(m -> "[Message](" + m.getJumpUrl() + ")").collect(Collectors.joining("\n")), false);
}
if (imageURL != null) {
builder.setImage(imageURL);
} else {
replies.stream().flatMap(m -> m.getEmbeds().stream()).filter(e -> e.getImage() != null).map(e -> e.getImage().getUrl()).findFirst().ifPresent(builder::setImage);
}
if (builder.isValidLength()) {
return ImmutableList.of(builder.build());
}
// Break up the fields to create multiple valid embeds
List<MessageEmbed> embeds = new ArrayList<>();
while (true) {
List<Field> excessFields = new ArrayList<>();
while (!builder.isValidLength()) {
excessFields.add(0, builder.getFields().remove(builder.getFields().size() - 1));
}
embeds.add(builder.build());
builder = new EmbedBuilder();
excessFields.forEach(builder::addField);
if (builder.isValidLength()) {
embeds.add(builder.build());
break;
}
}
return embeds;
}
Aggregations