TheRealJohan™
TheRealJohan™
Explore posts from servers
SIASapphire - Imagine a framework
Created by TheRealJohan™ on 8/21/2023 in #sapphire-support
Error: Module did not self-register
yeah, it's just when I have the source code compiled + run tests with vitest that it gives me that error 🤔 running with node works perfectly fine, thanks anyway tho
8 replies
SIASapphire - Imagine a framework
Created by TheRealJohan™ on 8/21/2023 in #sapphire-support
Error: Module did not self-register
yep, it's a strange issue, it works just fine if I delete the dist directory (currently using this as workaround) and I'm on LTS v18.17.1
8 replies
SIASapphire - Imagine a framework
Created by TheRealJohan™ on 8/21/2023 in #sapphire-support
Error: Module did not self-register
not sure if it's relevant but I'm using vitest and I'm on macOS (apple silicon) I already tried reinstalling node_modules, still the same error
8 replies
SIASapphire - Imagine a framework
Created by -Carlos🎃 on 8/18/2023 in #sapphire-support
Preconditions
you've already explained how you'd do it so I don't really get what you're stuck on? 😅 you'd just iterate over the command's preconditions to check if any of them fail and if so, delete the message based on that
7 replies
SIASapphire - Imagine a framework
Created by TheRealJohan™ on 6/26/2023 in #sapphire-support
How can I bypass required user permissions?
in case anyone is wondering how I implemented it in the future: CustomPreconditionContainerSingle.ts
export class CustomPreconditionContainerSingle extends PreconditionContainerSingle {
/** Same as {@link CooldownOptions.filteredUsers} but for preconditions. */
private readonly filterUsers: Snowflake[] = [/* TODO: add user IDs here */]

public override messageRun(message: Message<boolean>, command: MessageCommand, context?: PreconditionContext | undefined): PreconditionResult {
const precondition = container.stores.get('preconditions').get(this.name)

if (precondition && this.checkBypass(message, precondition)) return precondition.ok()

return super.messageRun(message, command, context)
}

// Check if it should get bypassed before running the native method

public override chatInputRun(
interaction: ChatInputCommandInteraction<CacheType>,
command: ChatInputCommand,
context?: PreconditionContext | undefined
): PreconditionResult {
const precondition = container.stores.get('preconditions').get(this.name)

if (precondition && this.checkBypass(interaction, precondition)) return precondition.ok()

return super.chatInputRun(interaction, command, context)
}

public override contextMenuRun(
interaction: ContextMenuCommandInteraction<CacheType>,
command: ContextMenuCommand,
context?: PreconditionContext | undefined
): PreconditionResult {
const precondition = container.stores.get('preconditions').get(this.name)

if (precondition && this.checkBypass(interaction, precondition)) return precondition.ok()

return super.contextMenuRun(interaction, command, context)
}

/** Returns whether the precondition should get bypassed. */
private checkBypass(messageOrInteraction: MessageOrInteraction, precondition: Precondition<PreconditionOptions>) {
const isMessage = messageOrInteraction instanceof Message
const author = isMessage ? messageOrInteraction.author : messageOrInteraction.user

// Bypass required user permissions
return precondition.name === 'UserPermissions' && this.filterUsers.includes(author.id)
}
}
export class CustomPreconditionContainerSingle extends PreconditionContainerSingle {
/** Same as {@link CooldownOptions.filteredUsers} but for preconditions. */
private readonly filterUsers: Snowflake[] = [/* TODO: add user IDs here */]

public override messageRun(message: Message<boolean>, command: MessageCommand, context?: PreconditionContext | undefined): PreconditionResult {
const precondition = container.stores.get('preconditions').get(this.name)

if (precondition && this.checkBypass(message, precondition)) return precondition.ok()

return super.messageRun(message, command, context)
}

// Check if it should get bypassed before running the native method

public override chatInputRun(
interaction: ChatInputCommandInteraction<CacheType>,
command: ChatInputCommand,
context?: PreconditionContext | undefined
): PreconditionResult {
const precondition = container.stores.get('preconditions').get(this.name)

if (precondition && this.checkBypass(interaction, precondition)) return precondition.ok()

return super.chatInputRun(interaction, command, context)
}

public override contextMenuRun(
interaction: ContextMenuCommandInteraction<CacheType>,
command: ContextMenuCommand,
context?: PreconditionContext | undefined
): PreconditionResult {
const precondition = container.stores.get('preconditions').get(this.name)

if (precondition && this.checkBypass(interaction, precondition)) return precondition.ok()

return super.contextMenuRun(interaction, command, context)
}

/** Returns whether the precondition should get bypassed. */
private checkBypass(messageOrInteraction: MessageOrInteraction, precondition: Precondition<PreconditionOptions>) {
const isMessage = messageOrInteraction instanceof Message
const author = isMessage ? messageOrInteraction.author : messageOrInteraction.user

// Bypass required user permissions
return precondition.name === 'UserPermissions' && this.filterUsers.includes(author.id)
}
}
CustomCommand.ts
export abstract class CustomCommand extends Command {
// Implementation to bypass required user permissions
protected override parseConstructorPreConditionsRequiredUserPermissions(options: Command.Options) {
const permissions = new PermissionsBitField(options.requiredUserPermissions)
if (permissions.bitfield !== 0n) {
const precondition = new CustomPreconditionContainerSingle({
name: 'UserPermissions',
context: { permissions }
})
this.preconditions.add(precondition)
}
}
}
export abstract class CustomCommand extends Command {
// Implementation to bypass required user permissions
protected override parseConstructorPreConditionsRequiredUserPermissions(options: Command.Options) {
const permissions = new PermissionsBitField(options.requiredUserPermissions)
if (permissions.bitfield !== 0n) {
const precondition = new CustomPreconditionContainerSingle({
name: 'UserPermissions',
context: { permissions }
})
this.preconditions.add(precondition)
}
}
}
9 replies
SIASapphire - Imagine a framework
Created by TheRealJohan™ on 6/26/2023 in #sapphire-support
How can I bypass required user permissions?
np, I'll extend the class and do it like that, thanks
9 replies
SIASapphire - Imagine a framework
Created by TheRealJohan™ on 6/26/2023 in #sapphire-support
How can I bypass required user permissions?
that's for cooldowns 😄 I already have that set up actually
9 replies
SIASapphire - Imagine a framework
Created by TheRealJohan™ on 6/24/2023 in #sapphire-support
I'm not receiving any Context Menu Command interactions
hm very weird, I tried to reproduce the issue in a new repository and now it's working for some reason I'll mess around some more and get back to you
6 replies
SIASapphire - Imagine a framework
Created by TheRealJohan™ on 6/24/2023 in #sapphire-support
I'm not receiving any Context Menu Command interactions
it doesn't, the only things I touched in the dashboard were the intents slash commands work perfectly fine tho edit: I added an interaction listener for debugging purposes and it looks like that's picking it up 😕 so that means it's not getting passed properly to contextMenuRun
6 replies