slurpcord
Version:
Simple API wrapper for Discord
66 lines (57 loc) • 2.14 kB
JavaScript
const permissionFlags = {
ADMINISTRATOR: 0x00000008,
VIEW_AUDIT_LOG: 0x00000010,
MANAGE_GUILD: 0x00000020,
ADD_REACTIONS: 0x00000040,
VIEW_CHANNEL: 0x00000400,
SEND_MESSAGES: 0x00000800,
MANAGE_MESSAGES: 0x00002000,
MANAGE_ROLES: 0x00004000,
MANAGE_CHANNELS: 0x00008000,
KICK_MEMBERS: 0x00010000,
BAN_MEMBERS: 0x00020000
};
export async function getUserPermissions(token, userId, guildId) {
try {
const memberResponse = await fetch(`https://discord.com/api/v10/guilds/${guildId}/members/${userId}`, {
method: 'GET',
headers: {
'Authorization': `Bot ${token}`,
'Content-Type': 'application/json'
}
});
if (!memberResponse.ok) {
console.error('Failed to fetch member data:', await memberResponse.json());
return [];
}
const memberData = await memberResponse.json();
const rolesResponse = await fetch(`https://discord.com/api/v10/guilds/${guildId}/roles`, {
method: 'GET',
headers: {
'Authorization': `Bot ${token}`,
'Content-Type': 'application/json'
}
});
if (!rolesResponse.ok) {
console.error('Failed to fetch roles:', await rolesResponse.json());
return [];
}
const roles = await rolesResponse.json();
const userRoles = memberData.roles;
const userPermissions = new Set();
for (const role of roles) {
if (userRoles.includes(role.id)) {
const permissions = Number(role.permissions);
for (const [permission, flag] of Object.entries(permissionFlags)) {
if ((permissions & flag) === flag) {
userPermissions.add(permission);
}
}
}
}
return Array.from(userPermissions);
} catch (error) {
console.error('Error fetching user permissions:', error);
return [];
}
}