package discord.jar; import org.json.JSONArray; import org.json.JSONObject; import java.util.ArrayList; import java.util.List; import java.util.Objects; public class WebhookUpdatePoll implements Poll { private DiscordAPIImpl api; public WebhookUpdatePoll(DiscordAPIImpl api) { this.api = api; } @Override public void process(JSONObject content, JSONObject rawRequest, Server server) { System.out.println(content); System.out.println(rawRequest); Group group = server.getGroupById(content.getString("channel_id")); if (group != null) { PacketBuilder pb = new PacketBuilder(api); pb.setType(RequestType.GET); pb.setUrl("https://discordapp.com/api/channels/" + group.getId() + "/webhooks"); String a = pb.makeRequest(); if (a != null && pb.getCode() == 200) { if (!a.contains("message")) { JSONArray webhooks = new JSONArray(a); List<String> presentWebhooks = new ArrayList<>(webhooks.length()); for (Object obj : webhooks) { if (obj instanceof JSONObject) { JSONObject webhook = (JSONObject) obj; String webhookId = webhook.getString("id"); if(server.getWebhookById(webhookId) == null) { WebhookImpl webhookImpl = new WebhookImpl(webhook.getString("name"), webhook.isNull("avatar") ? null : webhook.getString("avatar"), webhook.getString("token"), webhook.getString("id"), webhook.getString("channel_id"), api); server.getWebhooks().add(webhookImpl); api.getEventManager().executeEvent(new WebhookCreatedEvent(webhookImpl)); } else { WebhookImpl webhookImpl = (WebhookImpl) server.getWebhookById(webhookId); String newName = webhook.getString("name"); String newAvatar = webhook.isNull("avatar") ? null : webhook.getString("avatar"); String newGroupId = webhook.getString("channel_id"); if(!Objects.equals(newName, webhookImpl.getName()) || !Objects.equals(newAvatar, webhookImpl.getAvatar()) || !(Objects.equals(newGroupId, webhookImpl.getGroupId()))) { webhookImpl.setName(newName); webhookImpl.setAvatar(newAvatar); webhookImpl.setGroupId(newGroupId); api.getEventManager().executeEvent(new WebhookUpdatedEvent(webhookImpl)); } } presentWebhooks.add(webhookId); } } for (int i = 0; i < group.getWebhooks().size(); i++) { Webhook webhook = group.getWebhooks().get(i); if (!presentWebhooks.contains(webhook.getId())) { server.getWebhooks().remove(webhook); api.getEventManager().executeEvent(new WebhookDeletedEvent((webhook))); } } } } } } }