unnamed-lib
Advanced tools
Comparing version 1.0.5 to 1.0.6
{ | ||
"name": "unnamed-lib", | ||
"version": "1.0.5", | ||
"version": "1.0.6", | ||
"description": "A Discord Bot Lib.", | ||
@@ -5,0 +5,0 @@ "main": "src/main/index.js", |
@@ -212,19 +212,3 @@ const fetch = require('node-fetch'); | ||
}; | ||
/* | ||
THIS FUNCTION IS NOT FINISHED. PLEASE DO NOT USE IT. | ||
async function hasPermission(guild, member) { | ||
let Guild; | ||
const getFromCache = await this.guilds.get(guild) | ||
if(!getFromCache) { | ||
Guild = await this.getGuild(guild) | ||
} else { | ||
Guild = getFromCache; | ||
} | ||
const Member = await this.getGuildMember(guild, member) | ||
const MemberRoles = Member.roles | ||
let Roles = Guild.roles | ||
let Role = Roles.find(role => role.id === MemberRoles) | ||
return console.log(this.getReadablePerms(Role)); | ||
}; | ||
*/ | ||
module.exports = { | ||
@@ -243,3 +227,3 @@ addRole, | ||
unbanMember, | ||
//hasPermission | ||
} |
const flags = [ | ||
'CREATE\_INSTANT\_INVITE', | ||
'KICK\_MEMBERS', | ||
'BAN\_MEMBERS', | ||
'ADMINISTRATOR', | ||
'MANAGE\_CHANNELS', | ||
'MANAGE\_GUILD', | ||
'ADD\_REACTIONS', | ||
'VIEW\_AUDIT\_LOG', | ||
'PRIORITY\_SPEAKER', | ||
'STREAM', | ||
'VIEW\_CHANNEL', | ||
'SEND\_MESSAGES', | ||
'SEND\_TTS\_MESSAGES', | ||
'MANAGE\_MESSAGES', | ||
'EMBED\_LINKS', | ||
'ATTACH\_FILES', | ||
'READ\_MESSAGE\_HISTORY', | ||
'MENTION\_EVERYONE', | ||
'USE\_EXTERNAL\_EMOJIS', | ||
'VIEW\_GUILD\_INSIGHTS', | ||
'CONNECT', | ||
'SPEAK', | ||
'MUTE\_MEMBERS', | ||
'DEFEAN\_MEMBERS', | ||
'MOVE\_MEMBERS', | ||
'USE\_VAD', | ||
'CHANGE\_NICKNAME', | ||
'MANAGE\_NICKNAMES', | ||
'MANAGE\_ROLES', | ||
'MANAGE\_WEBHOOKS', | ||
'MANAGE\_EMOJIS', | ||
'USE\_SLASH\_COMMANDS', | ||
'REQUEST\_TO\_SPEAK', | ||
'MANAGE\_THREADS', | ||
'USE\_PUBLIC\_THREADS', | ||
'USE\_PRIVATE\_THREADS' | ||
].reduce((t, c, i) => (t[c] = 1 << i, t), {}); | ||
'CREATE_INSTANT_INVITE', | ||
'KICK_MEMBERS', | ||
'BAN_MEMBERS', | ||
'ADMINISTRATOR', | ||
'MANAGE_CHANNELS', | ||
'MANAGE_GUILD', | ||
'ADD_REACTIONS', | ||
'VIEW_AUDIT_LOG', | ||
'PRIORITY_SPEAKER', | ||
'STREAM', | ||
'VIEW_CHANNEL', | ||
'SEND_MESSAGES', | ||
'SEND_TTS_MESSAGES', | ||
'MANAGE_MESSAGES', | ||
'EMBED_LINKS', | ||
'ATTACH_FILES', | ||
'READ_MESSAGE_HISTORY', | ||
'MENTION_EVERYONE', | ||
'USE_EXTERNAL_EMOJIS', | ||
'VIEW_GUILD_INSIGHTS', | ||
'CONNECT', | ||
'SPEAK', | ||
'MUTE_MEMBERS', | ||
'DEFEAN_MEMBERS', | ||
'MOVE_MEMBERS', | ||
'USE_VAD', | ||
'CHANGE_NICKNAME', | ||
'MANAGE_NICKNAMES', | ||
'MANAGE_ROLES', | ||
'MANAGE_WEBHOOKS', | ||
'MANAGE_EMOJIS', | ||
'USE_SLASH_COMMANDS', | ||
'REQUEST_TO_SPEAK', | ||
'MANAGE_THREADS', | ||
'USE_PUBLIC_THREADS', | ||
'USE_PRIVATE_THREADS' | ||
].reduce((t, c, i) => (t[c] = 1n << BigInt(i), t), {}); | ||
function resolve(bit = 0n) { | ||
if (typeof bit === 'bigint' && bit >= 0n) return bit; | ||
if (Array.isArray(bit)) return bit.map(resolve).reduce((t, c) => t | c, 0n); | ||
if (typeof bit === 'string' && typeof flags[bit] !== 'undefined') return flags[bit]; | ||
throw new TypeError(`Invalid bitfield: ${bit}`); | ||
} | ||
function has(bit, main) { | ||
if (Array.isArray(bit)) return bit.map(c => has(c, main)); | ||
bit = resolve(bit); | ||
return (resolve(main) & bit) === bit; | ||
} | ||
function getReadablePerms(bitfield) { | ||
return Object.keys(flags).filter(flag => has(flag, bitfield)); | ||
} | ||
async function hasPermissions(guild, member, ...permissions) { | ||
guild = guild?.id ?? guild; | ||
member = member?.id ?? member; | ||
const g = ((await this.guilds.get(guild)) || (await this.getGuild(guild))); | ||
const guildRoles = g.roles; | ||
const memberRoles = await this.getGuildMember(guild, member).then(m => m.roles); | ||
const perms = getReadablePerms(guildRoles.filter(r => memberRoles.includes(r.id)).map(r => BigInt(r.permissions))); | ||
function resolve(bit = 0) { | ||
if (typeof bit === 'number' && bit >= 0) return bit; | ||
if (Array.isArray(bit)) return bit.map(resolve).reduce((t, c) => t | c, 0); | ||
if (typeof bit === 'string' && typeof flags[bit] !== 'undefined') return flags[bit]; | ||
throw new TypeError('Invalid bitfield'); | ||
} | ||
function has(bit, main) { | ||
if (Array.isArray(bit)) return bit.map(c => has(c, main)); | ||
bit = resolve(bit); | ||
return (main & bit) === bit; | ||
} | ||
function getReadablePerms(bitfield) { | ||
return Object.keys(flags).filter(flag => has(flag, bitfield)); | ||
} | ||
return g.ownerID === member || perms.includes('ADMINISTRATOR') ? new Array(permissions.length).fill(true) : has(permissions, perms); | ||
} | ||
module.exports = { | ||
resolve, | ||
has, | ||
getReadablePerms | ||
getReadablePerms, | ||
hasPermissions | ||
} |
69124
21
1386
48