package discord.jar;
import org.json.JSONArray;
import org.json.JSONObject;
import java.util.ArrayList;
import java.util.List;
public class ServerImpl implements Server {
private String id;
private String name;
private String location;
private String creatorId;
private String avatar;
private String token;
private String server;
private List<GroupUser> connectedClients = new ArrayList<>();
private List<Group> groups = new ArrayList<>();
private List<Webhook> webhooks = new ArrayList<>();
private DiscordAPIImpl api;
public ServerImpl(String id, DiscordAPIImpl api) {
this.api = api;
this.id = id;
loadWebhooks();
}
public String toString() {
return id;
}
@Override
public GroupUser getGroupUserById(String id) {
for (GroupUser user : connectedClients) if (user.getUser().getId().equals(id)) return user;
return null;
}
@Override
public Group getGroupById(String id) {
for (Group group : getGroups()) if (group.getId().equals(id)) return group;
return null;
}
@Override
public Webhook getWebhookById(String id) {
for (Webhook webhook : getWebhooks()) if (webhook.getId().equals(id)) return webhook;
return null;
}
@Override
public Webhook getWebhookByName(String name) {
for (Webhook webhook : getWebhooks()) if (webhook.getName().equals(name)) return webhook;
return null;
}
@Override
public List<Webhook> getWebhooks() {
return webhooks;
}
@Override
public List<Webhook> getWebhooksForGroup(Group group) {
return getWebhooksForGroup(group.getId());
}
@Override
public List<Webhook> getWebhooksForGroup(String groupId) {
List<Webhook> groupWebhooks = new ArrayList<>();
for (Webhook webhook : getWebhooks()) if (webhook.getGroupId().equals(groupId)) groupWebhooks.add(webhook);
return groupWebhooks;
}
public void loadWebhooks() {
//Delegate to some form of rate limit handler once it's implemented
PacketBuilder pb = new PacketBuilder(api);
pb.setType(RequestType.GET);
pb.setUrl("https://discordapp.com/api/guilds/" + id + "/webhooks");
String a = pb.makeRequest();
if (a != null && pb.getCode() == 200) {
if (!a.contains("message")) {
JSONArray webhooks = new JSONArray(a);
for (Object obj : webhooks) {
if (obj instanceof JSONObject) {
JSONObject webhook = (JSONObject) obj;
this.webhooks.add(new WebhookImpl(webhook.getString("name"), webhook.isNull("avatar") ? null : webhook.getString("avatar"), webhook.getString("token"), webhook.getString("id"), webhook.getString("channel_id"), api));
}
}
}
}
}
@Override
public GroupUser getGroupUserByUsername(String id) {
for (GroupUser user : connectedClients) if (user.getUser().getUsername().equals(id)) return user;
return null;
}
@Override
public void bc(String message) {
for (Group group : getGroups()) group.sendMessage(message);
}
@Override
public void kick(String user) {
PacketBuilder pb = new PacketBuilder(api);
pb.setUrl("https://discordapp.com/api/guilds/" + id + "/members/" + getGroupUserByUsername(user).getUser().getId());
pb.setType(RequestType.DELETE);
pb.makeRequest();
}
@Override
public void ban(String user) {
PacketBuilder pb = new PacketBuilder(api);
pb.setUrl("https://discordapp.com/api/guilds/" + id + "/bans/" + getGroupUserByUsername(user).getUser().getId() + "?delete-message-days=0");
pb.setType(RequestType.PUT);
pb.makeRequest();
}
public void updateUser(GroupUser user) {
ArrayList<GroupUser> users = new ArrayList<>();
for (GroupUser userA : connectedClients)
if (userA.getUser().getId().equals(user.getUser().getId())) users.add(userA);
connectedClients.removeAll(users);
connectedClients.add(user);
}
public String getId() {
return this.id;
}
public void setId(final String id) {
this.id = id;
}
public String getName() {
return this.name;
}
public void setName(final String name) {
this.name = name;
}
public String getLocation() {
return this.location;
}
public void setLocation(final String location) {
this.location = location;
}
public String getCreatorId() {
return this.creatorId;
}
public void setCreatorId(final String creatorId) {
this.creatorId = creatorId;
}
public String getAvatar() {
return this.avatar;
}
public void setAvatar(final String avatar) {
this.avatar = avatar;
}
public String getToken() {
return this.token;
}
public void setToken(final String token) {
this.token = token;
}
public String getServer() {
return this.server;
}
public void setServer(final String server) {
this.server = server;
}
public List<GroupUser> getConnectedClients() {
return this.connectedClients;
}
public void setConnectedClients(final List<GroupUser> connectedClients) {
this.connectedClients = connectedClients;
}
public List<Group> getGroups() {
return this.groups;
}
public void setGroups(final List<Group> groups) {
this.groups = groups;
}
}