package discord.jar;
import org.json.JSONArray;
import org.json.JSONObject;
import java.awt.*;
import java.util.ArrayList;
public class Embed {
private String title;
private String type;
private String description;
private String url;
private Color color;
private EmbedFooter footer;
private EmbedImage image;
private EmbedImage thumbnail;
private EmbedMedia video;
private EmbedProvider provider;
private EmbedAuthor author;
private EmbedField[] fields;
public Embed(String title, String type, String description, String url, Color color, EmbedFooter footer, EmbedImage image, EmbedImage thumbnail, EmbedMedia video, EmbedProvider provider, EmbedAuthor author, EmbedField[] fields) {
this.title = title;
this.type = type;
this.description = description;
this.url = url;
this.color = color;
this.footer = footer;
this.image = image;
this.thumbnail = thumbnail;
this.video = video;
this.provider = provider;
this.author = author;
this.fields = fields;
}
public Embed(JSONObject json) {
if(json.has("title"))
title = json.getString("title");
if(json.has("type"))
type = json.getString("type");
if(json.has("description"))
description = json.getString("description");
if(json.has("url"))
url = json.getString("url");
if(json.has("color"))
color = new Color(json.getInt("color"));
if(json.has("footer"))
footer = new EmbedFooter(json.getJSONObject("footer"));
if(json.has("image"))
image = new EmbedImage(json.getJSONObject("image"));
if(json.has("thumbnail"))
thumbnail = new EmbedImage(json.getJSONObject("thumbnail"));
if(json.has("video"))
video = new EmbedMedia(json.getJSONObject("video"));
if(json.has("provider"))
provider = new EmbedProvider(json.getJSONObject("provider"));
if(json.has("author"))
author = new EmbedAuthor(json.getJSONObject("author"));
if(json.has("fields")) {
ArrayList<EmbedField> fields = new ArrayList<>();
for (Object obj : json.getJSONArray("fields"))
fields.add(new EmbedField((JSONObject) obj));
}
}
public String getTitle() {
return title;
}
public String getType() {
return type;
}
public String getDescription() {
return description;
}
public String getUrl() {
return url;
}
public Color getColor() {
return color;
}
public EmbedFooter getFooter() {
return footer;
}
public EmbedImage getImage() {
return image;
}
public EmbedImage getThumbnail() {
return thumbnail;
}
public EmbedMedia getVideo() {
return video;
}
public EmbedProvider getProvider() {
return provider;
}
public EmbedAuthor getAuthor() {
return author;
}
public EmbedField[] getFields() {
return fields;
}
public JSONObject toJson() {
JSONArray fieldArray = new JSONArray();
for (EmbedField field : fields) fieldArray.put(field.toJson());
return new JSONObject()
.put("title", title).put("type", type).put("description", description).put("url", url)
.put("color", color == null ? null : ((color.getRed() & 0xFF) << 16) | ((color.getGreen() & 0xFF) << 8) | (color.getBlue() & 0xFF))
.put("footer", footer == null ? null : footer.toJson()).put("image", image == null ? null : image.toJson()).put("thumbnail", thumbnail == null ? null : thumbnail.toJson())
.put("video", video == null ? null : video.toJson()).put("provider", provider == null ? null : provider.toJson()).put("author", author == null ? null : author.toJson()).put("fields", fieldArray);
}
static class EmbedFooter {
private String text;
private String iconUrl;
private String proxiedUrl;
EmbedFooter(String text, String iconUrl, String proxiedUrl) {
this.text = text;
this.iconUrl = iconUrl;
this.proxiedUrl = proxiedUrl;
}
public EmbedFooter(JSONObject footer) {
if(footer.has("text"))
this.text = footer.getString("text");
if(footer.has("icon_url"))
this.iconUrl = footer.getString("icon_url");
if(footer.has("proxied_url"))
this.proxiedUrl = footer.getString("proxied_url");
}
public String getText() {
return text;
}
public String getIconUrl() {
return iconUrl;
}
public String getProxiedUrl() {
return proxiedUrl;
}
public JSONObject toJson() {
return new JSONObject().put("text", text).put("iconUrl", iconUrl).put("proxiedUrl", proxiedUrl);
}
}
static class EmbedMedia {
private String url;
private int width;
private int height;
EmbedMedia(String url, int width, int height) {
this.url = url;
this.width = width;
this.height = height;
}
EmbedMedia(JSONObject media) {
if(media.has("url"))
this.url = media.getString("url");
if(media.has("width"))
this.width = media.getInt("width");
if(media.has("height"))
this.height = media.getInt("height");
}
public String getUrl() {
return url;
}
public int getWidth() {
return width;
}
public int getHeight() {
return height;
}
public JSONObject toJson() {
return new JSONObject().put("url", url).put("width", width).put("height", height);
}
}
static class EmbedImage extends EmbedMedia {
private String proxiedUrl;
EmbedImage(String url, String proxiedUrl, int width, int height) {
super(url, width, height);
this.proxiedUrl = proxiedUrl;
}
public EmbedImage(JSONObject image) {
super(image);
if(image.has("proxied_url"))
proxiedUrl = image.getString("proxied_url");
}
public String getProxiedUrl() {
return proxiedUrl;
}
@Override
public JSONObject toJson() {
return super.toJson().put("proxied_url", proxiedUrl);
}
}
static class EmbedProvider {
private String name;
private String url;
EmbedProvider(String name, String url) {
this.name = name;
this.url = url;
}
public EmbedProvider(JSONObject provider) {
if(provider.has("name"))
this.name = provider.getString("name");
if(provider.has("url"))
this.url = provider.getString("url");
}
public String getName() {
return name;
}
public String getUrl() {
return url;
}
public JSONObject toJson() {
return new JSONObject().put("name", name).put("url", url);
}
}
static class EmbedAuthor extends EmbedProvider {
private String iconUrl;
private String proxiedUrl;
EmbedAuthor(String name, String url, String iconUrl, String proxiedUrl) {
super(name, url);
this.iconUrl = iconUrl;
this.proxiedUrl = proxiedUrl;
}
public EmbedAuthor(JSONObject author) {
super(author);
if(author.has("icon_url"))
this.iconUrl = author.getString("icon_url");
if(author.has("proxied_url"))
this.proxiedUrl = author.getString("proxied_url");
}
public String getIconUrl() {
return iconUrl;
}
public String getProxiedUrl() {
return proxiedUrl;
}
@Override
public JSONObject toJson() {
return super.toJson().put("icon_url", iconUrl).put("proxied_url", proxiedUrl);
}
}
static class EmbedField {
private String name;
private String value;
private boolean inline;
EmbedField(String name, String value, boolean inline) {
this.name = name;
this.value = value;
this.inline = inline;
}
public EmbedField(JSONObject field) {
if(field.has("name"))
this.name = field.getString("name");
if(field.has("value"))
this.value = field.getString("value");
if(field.has("inline"))
this.inline = field.getBoolean("inline");
}
public String getName() {
return name;
}
public String getValue() {
return value;
}
public boolean isInline() {
return inline;
}
public JSONObject toJson() {
return new JSONObject().put("name", name).put("value", value).put("inline", inline);
}
}
}