Skip to content

Commit 852ee87

Browse files
favnaNytelife26
andauthored
fix(preconditions): properly check for null in ClientPermissions and UserPermissions (#262)
Co-authored-by: Tyler J Russell <[email protected]>
1 parent a8c9b39 commit 852ee87

File tree

3 files changed

+28
-2
lines changed

3 files changed

+28
-2
lines changed

src/lib/errors/Identifiers.ts

+3
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,9 @@ export const enum Identifiers {
5050
PreconditionGuildTextOnly = 'preconditionGuildTextOnly',
5151
PreconditionNSFW = 'preconditionNsfw',
5252
PreconditionClientPermissions = 'preconditionClientPermissions',
53+
PreconditionClientPermissionsNoClient = 'preconditionClientPermissionsNoClient',
54+
PreconditionClientPermissionsNoPermissions = 'preconditionClientPermissionsNoPermissions',
5355
PreconditionUserPermissions = 'preconditionUserPermissions',
56+
PreconditionUserPermissionsNoPermissions = 'preconditionUserPermissionsNoPermissions',
5457
PreconditionThreadOnly = 'preconditionThreadOnly'
5558
}

src/preconditions/ClientPermissions.ts

+16-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,22 @@ export class CorePrecondition extends Precondition {
2121
const required = (context.permissions as Permissions) ?? new Permissions();
2222
const channel = message.channel as TextChannel | NewsChannel;
2323

24-
const permissions = message.guild ? channel.permissionsFor(message.client.id!)! : this.dmChannelPermissions;
24+
if (!message.client.id) {
25+
return this.error({
26+
identifier: Identifiers.PreconditionClientPermissionsNoClient,
27+
message: 'There was no client to validate the permissions for.'
28+
});
29+
}
30+
31+
const permissions = message.guild ? channel.permissionsFor(message.client.id) : this.dmChannelPermissions;
32+
33+
if (!permissions) {
34+
return this.error({
35+
identifier: Identifiers.PreconditionClientPermissionsNoPermissions,
36+
message: 'I was unable to resolve my permissions in the command invocation channel.'
37+
});
38+
}
39+
2540
const missing = permissions.missing(required);
2641
return missing.length === 0
2742
? this.ok()

src/preconditions/UserPermissions.ts

+9-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,15 @@ export class CorePrecondition extends Precondition {
2323
const required = (context.permissions as Permissions) ?? new Permissions();
2424
const channel = message.channel as TextChannel | NewsChannel;
2525

26-
const permissions = message.guild ? channel.permissionsFor(message.author)! : this.dmChannelPermissions;
26+
const permissions = message.guild ? channel.permissionsFor(message.author) : this.dmChannelPermissions;
27+
28+
if (!permissions) {
29+
return this.error({
30+
identifier: Identifiers.PreconditionClientPermissionsNoPermissions,
31+
message: "I was unable to resolve the end-user's permissions in the command invocation channel."
32+
});
33+
}
34+
2735
const missing = permissions.missing(required);
2836
return missing.length === 0
2937
? this.ok()

0 commit comments

Comments
 (0)