package discord.jar; import org.apache.commons.codec.binary.Base64; import org.apache.commons.codec.binary.StringUtils; import org.apache.commons.io.IOUtils; import org.json.JSONObject; import java.io.IOException; import java.io.InputStream; public class AccountManagerImpl implements AccountManager { private DiscordAPIImpl discord; private String username; private String password; private String email; private String avatar; private String newpass; public boolean isOnline = true; public AccountManagerImpl(DiscordAPIImpl api) { discord = api; } @Override public void setOnlineStatus(boolean online) { isOnline = online; if (online) { JSONObject obj = new JSONObject().put("op", 3) .put("d", new JSONObject() .put("idle_since", JSONObject.NULL) //system millis .put("game_id", JSONObject.NULL)); discord.getRequestManager().getSocketClient().send(obj.toString()); } else { JSONObject obj = new JSONObject().put("op", 3) .put("d", new JSONObject() .put("idle_since", ((DiscordAPIImpl) discord).getStartedTime()) //system millis .put("game_id", JSONObject.NULL)); discord.getRequestManager().getSocketClient().send(obj.toString()); } } @Override public void setDisplayName(String displayName) { updateLocalVars(); this.username = displayName; updateEdits(); } @Override public void setAvatar(InputStream is) throws IOException { updateLocalVars(); this.avatar = "data:image/jpeg;base64," + StringUtils.newStringUtf8(Base64.encodeBase64(IOUtils.toByteArray (is), false)); updateEdits(); } @Override public void changePass(String pass) { updateLocalVars(); this.newpass = pass; updateEdits(); } @Override public void changeEmail(String email) { updateLocalVars(); this.email = email; updateEdits(); } private void updateLocalVars() { username = discord.getSelfInfo().getUsername(); email = discord.getSelfInfo().getEmail(); avatar = discord.getSelfInfo().getAvatarId(); newpass = null; } private void updateEdits() { PacketBuilder pb = new PacketBuilder(discord); pb.setUrl("https://discordapp.com/api/users/@me"); pb.setType(RequestType.PATCH); pb.setData(getJSON()); pb.makeRequest(); discord.getSelfInfo().setUsername(username); discord.getSelfInfo().setEmail(email); } private String getJSON() { JSONObject json = new JSONObject() .put("username", username) .put("email", email) .put("password", password) .put("new_password", newpass) .put("avatar", avatar); return json.toString(); } }