private String editRolePermission(Operation op, Permission permission, IRole role) {
   IGuild parent = role.getGuild();
   DiscordGuild g =
       cacheService.findGuildById(parent.getID()).orElseGet(() -> new DiscordGuild(parent));
   DiscordRole edit = null;
   for (DiscordRole r : g.getRoles()) {
     if (r.getId().equals(role.getID())) {
       edit = r;
       break;
     }
   }
   if (edit == null) {
     edit = new DiscordRole(role);
     g.getRoles().add(edit);
   }
   if (edit.getName() == null) {
     edit.setName(role.getName());
   }
   changePermission(op, permission, edit);
   g = cacheService.saveGuild(g);
   log.info("Saving new guild/role permission settings: {}", g);
   permissionService.evict();
   return String.format(
       "Modified role %s: %s permission %s",
       edit.getName(), op.name().toLowerCase(), permission.getName());
 }
 private String editUserPermission(Operation op, Permission permission, IUser user) {
   DiscordUser u = cacheService.findUserById(user.getID()).orElseGet(() -> new DiscordUser(user));
   changePermission(op, permission, u);
   u = cacheService.saveUser(u);
   log.info("Saving new user permission settings: {}", u);
   permissionService.evict();
   return String.format(
       "Modified user %s: %s permission %s",
       u.getName(), op.name().toLowerCase(), permission.getName());
 }
 private String editGuildPermission(Operation op, Permission permission, IGuild guild) {
   DiscordGuild g =
       cacheService.findGuildById(guild.getID()).orElseGet(() -> new DiscordGuild(guild));
   changePermission(op, permission, g);
   g = cacheService.saveGuild(g);
   log.info("Saving new guild permission settings: {}", g);
   permissionService.evict();
   return String.format(
       "Modified server %s: %s permission %s",
       g.getName(), op.name().toLowerCase(), permission.getName());
 }
 private String editChannelPermission(Operation op, Permission permission, IChannel channel) {
   if (channel.isPrivate()) {
     throw new IllegalArgumentException("No private channels allowed!");
   }
   DiscordGuild g =
       cacheService
           .findGuildById(channel.getGuild().getID())
           .orElseGet(() -> new DiscordGuild(channel.getGuild()));
   g = cacheService.saveGuild(g);
   DiscordChannel ch =
       cacheService.findChannelById(channel.getID()).orElseGet(() -> new DiscordChannel(channel));
   ch.setGuild(g);
   g.getChannels().add(ch);
   changePermission(op, permission, ch);
   ch = cacheService.saveChannel(ch);
   cacheService.saveGuild(g);
   log.info("Saving new permission data: {}", g);
   permissionService.evict();
   return String.format(
       "Modified channel %s: %s permission %s",
       ch.getName(), op.name().toLowerCase(), permission.getName());
 }