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