package discord.jar;
import java.util.*;
public class DiscordAPIImpl implements DiscordAPI {
private Login loginTokens = new Login();
private List<User> availableDms = new ArrayList<User>();
private List<Server> availableServers = new ArrayList<Server>();
private Map<String, Group> userGroups = new HashMap<String, Group>();
private boolean debugMode = false;
private boolean allowLogMessages = true;
private EventManager eventManager = new EventManager();
private RequestManager requestManager;
private SelfData selfInfo;
private boolean loaded = false;
private String as = "";
private AccountManager accountManager = new AccountManagerImpl(this);
private final Long startedTime = System.currentTimeMillis();
private final List<String> unavailableServers = Collections.synchronizedList(new ArrayList<>());
private boolean sendReady;
private boolean isStopped;
public void sendReady() {
this.sendReady = true;
}
public boolean hasSentReady() {
return sendReady;
}
public List<String> getUnavailableServers() {
return unavailableServers;
}
public DiscordAPIImpl(String token) {
loginTokens.setToken(token);
}
public DiscordAPIImpl() {
}
public DiscordAPIImpl login(String token) throws BadUsernamePasswordException, DiscordFailedToConnectException {
loginTokens.setToken(token);
try {
login();
} catch (NoLoginDetailsException e) {
} catch (BadUsernamePasswordException | DiscordFailedToConnectException e) {
throw e;
}
return this;
}
public DiscordAPIImpl login() throws NoLoginDetailsException, BadUsernamePasswordException, DiscordFailedToConnectException {
if (loginTokens.getToken() == null)
throw new NoLoginDetailsException();
loginTokens.process(this);
return this;
}
public void log(String log) {
if (allowLogMessages) System.out.println("DiscordAPI: " + log);
}
public Group getGroupById(String id) {
for (User channel : availableDms) if (channel.getId().equals(id)) return channel.getGroup();
for (Server server : availableServers)
for (Group channel : server.getGroups()) if (channel.getId().equals(id)) return channel;
return null;
}
public Server getServerById(String id) {
for (Server server : availableServers) if (server.getId().equals(id)) return server;
return null;
}
public User getUserByUsername(String id) {
for (User user : availableDms) if (user.getUsername().equals(id)) return user;
return null;
}
public User getUserById(String id) {
for (User user : availableDms) if (user.equals(id)) return user;
return null;
}
public boolean isUserKnown(String id) {
return getUserById(id) != null;
}
public void stop() {
isStopped = true;
log("Shutting down!");
requestManager.getSocketClient().stop();
}
public void updateContact(User user) {
ArrayList<User> users = new ArrayList<User>();
for (User userA : availableDms) if (userA.getId().equals(user.getId())) users.add(userA);
availableDms.removeAll(users);
availableDms.add(user);
}
public Boolean joinInviteId(String id) {
PacketBuilder rb = new PacketBuilder(this);
rb.setUrl("https://discordapp.com/api/invite/" + id);
rb.setType(RequestType.POST);
return rb.makeRequest() != null;
}
public User getBlankUser() {
UserImpl user = new UserImpl(getSelfInfo().getUsername(), getSelfInfo().getId(), "Me", this);
user.setAvatarId(getSelfInfo().getAvatarId());
user.setAvatar(getSelfInfo().getAvatar());
return user;
}
public Login getLoginTokens() {
return this.loginTokens;
}
public List<User> getAvailableDms() {
return this.availableDms;
}
public List<Server> getAvailableServers() {
return this.availableServers;
}
public Map<String, Group> getUserGroups() {
return this.userGroups;
}
public boolean isDebugMode() {
return this.debugMode;
}
public void setDebugMode(final boolean debugMode) {
this.debugMode = debugMode;
}
public boolean isAllowLogMessages() {
return this.allowLogMessages;
}
public void setAllowLogMessages(final boolean allowLogMessages) {
this.allowLogMessages = allowLogMessages;
}
public EventManager getEventManager() {
return this.eventManager;
}
public RequestManager getRequestManager() {
return this.requestManager;
}
public void setRequestManager(final RequestManager requestManager) {
this.requestManager = requestManager;
}
public SelfData getSelfInfo() {
return this.selfInfo;
}
public void setSelfInfo(final SelfData selfInfo) {
this.selfInfo = selfInfo;
}
public boolean isLoaded() {
return this.loaded;
}
public void setLoaded() {
this.loaded = true;
getEventManager().executeEvent(new LoadedEvent(this));
}
public String getAs() {
return this.as;
}
public void setAs(final String as) {
this.as = as;
}
public AccountManager getAccountManager() {
return this.accountManager;
}
public void setAccountManager(final AccountManager accountManager) {
this.accountManager = accountManager;
}
public Long getStartedTime() {
return this.startedTime;
}
public void clear() {
availableDms.clear();
availableServers.clear();
availableServers.clear();
userGroups.clear();
}
public boolean isStopped() {
return isStopped;
}
}