fallback to default permissions if member is not found

This commit is contained in:
2023-06-17 11:40:09 +02:00
parent 5ffc1ad844
commit f7bafdbc3d
3 changed files with 8 additions and 17 deletions
+2 -10
View File
@@ -15,11 +15,7 @@ module.exports = {
.setRequired(false)), .setRequired(false)),
async execute (interaction: CommandInteraction) { async execute (interaction: CommandInteraction) {
// Pick the right goober // Pick the right goober
const member = interaction.member const member = interaction.member ?? undefined
if (member === null) {
void interaction.reply({ content: 'Something went wrong : cannot find member', ephemeral: true })
return
}
if (!(await checkMemberPermissions(member as GuildMember)).read) { if (!(await checkMemberPermissions(member as GuildMember)).read) {
void interaction.reply({ content: 'I am sorry dave, I\'m afraid I cannot do that\nYou do not have access to that command', ephemeral: true }) void interaction.reply({ content: 'I am sorry dave, I\'m afraid I cannot do that\nYou do not have access to that command', ephemeral: true })
return return
@@ -75,11 +71,7 @@ module.exports = {
const collector = response.createMessageComponentCollector({ componentType: ComponentType.Button, time: 3_600_00 }) const collector = response.createMessageComponentCollector({ componentType: ComponentType.Button, time: 3_600_00 })
collector.on('collect', async i => { collector.on('collect', async i => {
if (i.member === null) { if (!(await checkMemberPermissions(i.member as GuildMember ?? undefined)).delete) {
void i.reply({ content: 'Something went wrong : cannot find member', ephemeral: true })
return
}
if (!(await checkMemberPermissions(i.member as GuildMember)).delete) {
return return
} }
+1 -2
View File
@@ -51,8 +51,7 @@ module.exports = {
while (messages !== undefined && messages.size > 0) { while (messages !== undefined && messages.size > 0) {
const permissionFilter = await Promise.all((messages as unknown as Message[]).map(async e => { const permissionFilter = await Promise.all((messages as unknown as Message[]).map(async e => {
const member = await (e.guild?.members.fetch(e.author.id))?.catch(e => {}) const member = await (e.guild?.members.fetch(e.author.id))?.catch(e => undefined)
if (member === undefined) { console.error('member is undefined'); return }
return (await checkMemberPermissions(member)).create && e.reactions.resolve('🚫') === null return (await checkMemberPermissions(member)).create && e.reactions.resolve('🚫') === null
})) }))
+5 -5
View File
@@ -25,7 +25,8 @@ db.serialize(() => {
export interface PermsNumbers { create: number, read: number, delete: number } export interface PermsNumbers { create: number, read: number, delete: number }
export interface Perms { create: boolean, delete: boolean, read: boolean } export interface Perms { create: boolean, delete: boolean, read: boolean }
export async function getMemberPermissionsRaw (member: GuildMember): Promise<PermsNumbers> { export async function getMemberPermissionsRaw (member?: GuildMember): Promise<PermsNumbers> {
if (member === undefined) return { create: 1, read: 1, delete: 0 }
const allPermissions = await execute('SELECT * FROM permissions WHERE guild=$guild', { $guild: member.guild.id }) as Array<PermsNumbers & { role: string }> const allPermissions = await execute('SELECT * FROM permissions WHERE guild=$guild', { $guild: member.guild.id }) as Array<PermsNumbers & { role: string }>
const userPerms = allPermissions.reduce<PermsNumbers>((acc, val) => { const userPerms = allPermissions.reduce<PermsNumbers>((acc, val) => {
if (!member?.roles.cache.some(r => r.id === val.role.toString())) return acc if (!member?.roles.cache.some(r => r.id === val.role.toString())) return acc
@@ -38,7 +39,7 @@ export async function getMemberPermissionsRaw (member: GuildMember): Promise<Per
return userPerms return userPerms
} }
export async function checkMemberPermissions (member: GuildMember): Promise<Perms> { export async function checkMemberPermissions (member?: GuildMember): Promise<Perms> {
const userPerms = await getMemberPermissionsRaw(member) const userPerms = await getMemberPermissionsRaw(member)
return { return {
create: userPerms.create > 0, create: userPerms.create > 0,
@@ -111,10 +112,9 @@ export async function loadPreviousGoob (client: Client): Promise<void> {
while (messages !== undefined && messages.size > 0) { while (messages !== undefined && messages.size > 0) {
loaded += messages.size loaded += messages.size
const permissionFilter = await Promise.all((messages as unknown as Message[]).map(async e => { const permissionFilter = await Promise.all((messages as unknown as Message[]).map(async e => {
let member = e.member let member = e.member ?? undefined
if (member === null) { if (member === null) {
const member2 = await (e.guild?.members.fetch(e.author.id))?.catch(e => {}) const member2 = await (e.guild?.members.fetch(e.author.id))?.catch(e => undefined)
if (member2 === undefined) return
member = member2 member = member2
} }
return (await checkMemberPermissions(member)).create && e.reactions.resolve('🚫') === null return (await checkMemberPermissions(member)).create && e.reactions.resolve('🚫') === null