use of de.btobastian.javacord.listener.user.UserRoleAddListener in project Javacord by BtoBastian.
the class GuildMemberUpdateHandler method handle.
@Override
public void handle(JSONObject packet) {
final ImplServer server = (ImplServer) api.getServerById(packet.getString("guild_id"));
final User user = api.getOrCreateUser(packet.getJSONObject("user"));
if (server != null) {
// update nickname
if (packet.has("nick")) {
String newNick = packet.isNull("nick") ? null : packet.getString("nick");
final String oldNick = server.getNickname(user);
if (newNick != null && !newNick.equals(oldNick) || ((oldNick != null) && !oldNick.equals(newNick))) {
server.setNickname(user, newNick);
listenerExecutorService.submit(new Runnable() {
@Override
public void run() {
List<UserChangeNicknameListener> listeners = api.getListeners(UserChangeNicknameListener.class);
synchronized (listeners) {
for (UserChangeNicknameListener listener : listeners) {
try {
listener.onUserChangeNickname(api, server, user, oldNick);
} catch (Throwable t) {
logger.warn("Uncaught exception in UserChangeNicknameListener!", t);
}
}
}
}
});
}
}
// get array with all roles
JSONArray jsonRoles = packet.getJSONArray("roles");
Role[] roles = new Role[jsonRoles.length()];
for (int i = 0; i < jsonRoles.length(); i++) {
roles[i] = server.getRoleById(jsonRoles.getString(i));
}
// iterate throw all current roles and remove roles which aren't in the roles array
for (final Role role : user.getRoles(server)) {
boolean contains = false;
for (Role r : roles) {
if (role == r) {
contains = true;
break;
}
}
if (!contains) {
((ImplRole) role).removeUserNoUpdate(user);
api.getThreadPool().getSingleThreadExecutorService("listeners").submit(new Runnable() {
@Override
public void run() {
List<UserRoleRemoveListener> listeners = api.getListeners(UserRoleRemoveListener.class);
synchronized (listeners) {
for (UserRoleRemoveListener listener : listeners) {
try {
listener.onUserRoleRemove(api, user, role);
} catch (Throwable t) {
logger.warn("Uncaught exception in UserRoleRemoveListenerListener!", t);
}
}
}
}
});
}
}
// iterate throw all roles of the roles array and remove add roles which aren't in the current roles list
for (final Role role : roles) {
if (!user.getRoles(server).contains(role)) {
((ImplRole) role).addUserNoUpdate(user);
api.getThreadPool().getSingleThreadExecutorService("listeners").submit(new Runnable() {
@Override
public void run() {
List<UserRoleAddListener> listeners = api.getListeners(UserRoleAddListener.class);
synchronized (listeners) {
for (UserRoleAddListener listener : listeners) {
try {
listener.onUserRoleAdd(api, user, role);
} catch (Throwable t) {
logger.warn("Uncaught exception in UserRoleAddListener!", t);
}
}
}
}
});
}
}
}
}
Aggregations