001package co.aikar.commands; 002 003import net.dv8tion.jda.core.Permission; 004 005import java.util.HashMap; 006import java.util.Map; 007 008public class JDACommandPermissionResolver implements CommandPermissionResolver { 009 private Map<String, Integer> discordPermissionOffsets; 010 011 public JDACommandPermissionResolver() { 012 discordPermissionOffsets = new HashMap<>(); 013 for (Permission permission : Permission.values()) { 014 discordPermissionOffsets.put(permission.name().toLowerCase().replaceAll("_", "-"), permission.getOffset()); 015 } 016 } 017 018 @Override 019 public boolean hasPermission(JDACommandManager manager, JDACommandEvent event, String permission) { 020 // Explicitly return true if the issuer is the bot's owner. They are always allowed. 021 if (manager.getBotOwnerId() == event.getIssuer().getAuthor().getIdLong()) { 022 return true; 023 } 024 025 // Return false on webhook messages, as they cannot have permissions defined. 026 if (event.getIssuer().isWebhookMessage()) { 027 return false; 028 } 029 030 Integer permissionOffset = discordPermissionOffsets.get(permission); 031 if (permissionOffset == null) { 032 return false; 033 } 034 035 return event.getIssuer().getMember().hasPermission( 036 Permission.getFromOffset(permissionOffset) 037 ); 038 } 039}