From cfffe23a1515e00299acf079149c56aa7ab04947 Mon Sep 17 00:00:00 2001 From: samfundev Date: Sat, 6 Aug 2022 13:30:57 -0400 Subject: [PATCH 1/5] feat: resolve message interactions --- src/lib/resolvers/message.ts | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/src/lib/resolvers/message.ts b/src/lib/resolvers/message.ts index 004d2eb20..bc6cc7bf7 100644 --- a/src/lib/resolvers/message.ts +++ b/src/lib/resolvers/message.ts @@ -10,7 +10,7 @@ import { import { container } from '@sapphire/pieces'; import { Result } from '@sapphire/result'; import type { Awaitable } from '@sapphire/utilities'; -import { Message, Permissions, Snowflake, User } from 'discord.js'; +import { BaseCommandInteraction, Message, Permissions, Snowflake, User } from 'discord.js'; import { Identifiers } from '../errors/Identifiers'; /** @@ -34,12 +34,21 @@ export interface MessageResolverOptions { scan?: boolean; } -export async function resolveMessage(parameter: string, options: MessageResolverOptions): Promise> { - const message = - (await resolveById(parameter, options)) ?? - (await resolveByLink(parameter, options.message)) ?? - (await resolveByChannelAndMessage(parameter, options.message)); - if (message) return Result.ok(message); +export async function resolveMessage( + parameter: string | BaseCommandInteraction, + options: MessageResolverOptions +): Promise> { + if (typeof parameter === 'string') { + const message = + (await resolveById(parameter, options)) ?? + (await resolveByLink(parameter, options.message)) ?? + (await resolveByChannelAndMessage(parameter, options.message)); + if (message) return Result.ok(message); + } else { + const message = parameter.options.resolved.messages?.first(); + if (message) return resolveMessage(message.id, options); + } + return Result.err(Identifiers.ArgumentMessageError); } From f4e658afca042ea2f56e6b0c8b559212cf92b598 Mon Sep 17 00:00:00 2001 From: Jeroen Claassens Date: Thu, 11 Aug 2022 21:14:50 +0200 Subject: [PATCH 2/5] chore: made it to compile... permalink: http://whatthecommit.com/b076cb77ab61c8329157bea552786ffc --- src/arguments/CoreMessage.ts | 12 +++- src/lib/resolvers/channel.ts | 8 ++- src/lib/resolvers/date.ts | 14 ++++- src/lib/resolvers/dmChannel.ts | 5 +- src/lib/resolvers/float.ts | 14 ++++- src/lib/resolvers/guildChannel.ts | 6 +- src/lib/resolvers/integer.ts | 14 ++++- src/lib/resolvers/member.ts | 6 +- src/lib/resolvers/message.ts | 91 +++++++++++++++++++-------- src/lib/resolvers/number.ts | 13 +++- src/lib/resolvers/partialDMChannel.ts | 5 +- src/lib/resolvers/role.ts | 6 +- src/lib/resolvers/user.ts | 6 +- 13 files changed, 153 insertions(+), 47 deletions(-) diff --git a/src/arguments/CoreMessage.ts b/src/arguments/CoreMessage.ts index b78fb13ad..3f9ac917c 100644 --- a/src/arguments/CoreMessage.ts +++ b/src/arguments/CoreMessage.ts @@ -8,9 +8,17 @@ export class CoreArgument extends Argument { super(context, { name: 'message' }); } - public async run(parameter: string, context: Omit & Argument.Context): Argument.AsyncResult { + public async run( + parameter: string, + context: Omit & Argument.Context + ): Argument.AsyncResult { const channel = context.channel ?? context.message.channel; - const resolved = await resolveMessage(parameter, { message: context.message, channel: context.channel, scan: context.scan ?? false }); + const resolved = await resolveMessage(parameter, { + messageOrInteraction: context.message, + channel: context.channel, + scan: context.scan ?? false + }); + return resolved.mapErrInto((identifier) => this.error({ parameter, diff --git a/src/lib/resolvers/channel.ts b/src/lib/resolvers/channel.ts index 341645f51..493d6019e 100644 --- a/src/lib/resolvers/channel.ts +++ b/src/lib/resolvers/channel.ts @@ -1,12 +1,16 @@ import { ChannelMentionRegex, ChannelTypes } from '@sapphire/discord.js-utilities'; import { container } from '@sapphire/pieces'; import { Result } from '@sapphire/result'; -import type { Message, Snowflake } from 'discord.js'; +import type { Message } from 'discord.js'; import { Identifiers } from '../errors/Identifiers'; export function resolveChannel(parameter: string, message: Message): Result { const channelId = (ChannelMentionRegex.exec(parameter)?.[1] ?? parameter) as Snowflake; const channel = (message.guild ? message.guild.channels : container.client.channels).cache.get(channelId); - if (channel) return Result.ok(channel as ChannelTypes); + + if (channel) { + return Result.ok(channel as ChannelTypes); + } + return Result.err(Identifiers.ArgumentChannelError); } diff --git a/src/lib/resolvers/date.ts b/src/lib/resolvers/date.ts index 6f3b40513..e82ee2637 100644 --- a/src/lib/resolvers/date.ts +++ b/src/lib/resolvers/date.ts @@ -8,10 +8,18 @@ export function resolveDate( const parsed = new Date(parameter); const time = parsed.getTime(); - if (Number.isNaN(time)) return Result.err(Identifiers.ArgumentDateError); - if (typeof options?.minimum === 'number' && time < options.minimum) return Result.err(Identifiers.ArgumentDateTooEarly); - if (typeof options?.maximum === 'number' && time > options.maximum) return Result.err(Identifiers.ArgumentDateTooFar); + if (Number.isNaN(time)) { + return Result.err(Identifiers.ArgumentDateError); + } + + if (typeof options?.minimum === 'number' && time < options.minimum) { + return Result.err(Identifiers.ArgumentDateTooEarly); + } + + if (typeof options?.maximum === 'number' && time > options.maximum) { + return Result.err(Identifiers.ArgumentDateTooFar); + } return Result.ok(parsed); } diff --git a/src/lib/resolvers/dmChannel.ts b/src/lib/resolvers/dmChannel.ts index 53ef7231a..677aa713c 100644 --- a/src/lib/resolvers/dmChannel.ts +++ b/src/lib/resolvers/dmChannel.ts @@ -10,7 +10,10 @@ export function resolveDMChannel( ): Result { const result = resolveChannel(parameter, message); return result.mapInto((value) => { - if (isDMChannel(value) && !value.partial) return Result.ok(value); + if (isDMChannel(value) && !value.partial) { + return Result.ok(value); + } + return Result.err(Identifiers.ArgumentDMChannelError); }); } diff --git a/src/lib/resolvers/float.ts b/src/lib/resolvers/float.ts index be57d4640..7dd143476 100644 --- a/src/lib/resolvers/float.ts +++ b/src/lib/resolvers/float.ts @@ -6,10 +6,18 @@ export function resolveFloat( options?: { minimum?: number; maximum?: number } ): Result { const parsed = Number(parameter); - if (Number.isNaN(parsed)) return Result.err(Identifiers.ArgumentFloatError); - if (typeof options?.minimum === 'number' && parsed < options.minimum) return Result.err(Identifiers.ArgumentFloatTooSmall); - if (typeof options?.maximum === 'number' && parsed > options.maximum) return Result.err(Identifiers.ArgumentFloatTooLarge); + if (Number.isNaN(parsed)) { + return Result.err(Identifiers.ArgumentFloatError); + } + + if (typeof options?.minimum === 'number' && parsed < options.minimum) { + return Result.err(Identifiers.ArgumentFloatTooSmall); + } + + if (typeof options?.maximum === 'number' && parsed > options.maximum) { + return Result.err(Identifiers.ArgumentFloatTooLarge); + } return Result.ok(parsed); } diff --git a/src/lib/resolvers/guildChannel.ts b/src/lib/resolvers/guildChannel.ts index 51152627f..3e56c5173 100644 --- a/src/lib/resolvers/guildChannel.ts +++ b/src/lib/resolvers/guildChannel.ts @@ -6,7 +6,11 @@ import { Identifiers } from '../errors/Identifiers'; export function resolveGuildChannel(parameter: string, guild: Guild): Result { const channel = resolveById(parameter, guild) ?? resolveByQuery(parameter, guild); - if (channel) return Result.ok(channel); + + if (channel) { + return Result.ok(channel); + } + return Result.err(Identifiers.ArgumentGuildChannelError); } diff --git a/src/lib/resolvers/integer.ts b/src/lib/resolvers/integer.ts index af54614f6..da01a7206 100644 --- a/src/lib/resolvers/integer.ts +++ b/src/lib/resolvers/integer.ts @@ -6,10 +6,18 @@ export function resolveInteger( options?: { minimum?: number; maximum?: number } ): Result { const parsed = Number(parameter); - if (!Number.isInteger(parsed)) return Result.err(Identifiers.ArgumentIntegerError); - if (typeof options?.minimum === 'number' && parsed < options.minimum) return Result.err(Identifiers.ArgumentIntegerTooSmall); - if (typeof options?.maximum === 'number' && parsed > options.maximum) return Result.err(Identifiers.ArgumentIntegerTooLarge); + if (!Number.isInteger(parsed)) { + return Result.err(Identifiers.ArgumentIntegerError); + } + + if (typeof options?.minimum === 'number' && parsed < options.minimum) { + return Result.err(Identifiers.ArgumentIntegerTooSmall); + } + + if (typeof options?.maximum === 'number' && parsed > options.maximum) { + return Result.err(Identifiers.ArgumentIntegerTooLarge); + } return Result.ok(parsed); } diff --git a/src/lib/resolvers/member.ts b/src/lib/resolvers/member.ts index 4feaa490d..a0ac9ed16 100644 --- a/src/lib/resolvers/member.ts +++ b/src/lib/resolvers/member.ts @@ -5,7 +5,11 @@ import { Identifiers } from '../errors/Identifiers'; export async function resolveMember(parameter: string, guild: Guild): Promise> { const member = (await resolveById(parameter, guild)) ?? (await resolveByQuery(parameter, guild)); - if (member) return Result.ok(member); + + if (member) { + return Result.ok(member); + } + return Result.err(Identifiers.ArgumentMemberError); } diff --git a/src/lib/resolvers/message.ts b/src/lib/resolvers/message.ts index bc6cc7bf7..a693dcd50 100644 --- a/src/lib/resolvers/message.ts +++ b/src/lib/resolvers/message.ts @@ -5,12 +5,13 @@ import { isNewsChannel, isTextBasedChannel, isTextChannel, + runsOnInteraction, TextBasedChannelTypes } from '@sapphire/discord.js-utilities'; import { container } from '@sapphire/pieces'; import { Result } from '@sapphire/result'; import type { Awaitable } from '@sapphire/utilities'; -import { BaseCommandInteraction, Message, Permissions, Snowflake, User } from 'discord.js'; +import { CommandInteraction, Message, Permissions, Snowflake, User } from 'discord.js'; import { Identifiers } from '../errors/Identifiers'; /** @@ -23,9 +24,9 @@ export interface MessageResolverOptions { */ channel?: TextBasedChannelTypes; /** - * Base message to resolve the message from (e.g. pick the channel if not given). + * Base {@link Message} or {@link CommandInteraction} to resolve the message from (e.g. pick the channel if not given). */ - message: Message; + messageOrInteraction: Message | CommandInteraction; /** * Whether to scan the entire guild cache for the message. * If channel is given with this option, this option is ignored. @@ -41,60 +42,100 @@ export async function resolveMessage( if (typeof parameter === 'string') { const message = (await resolveById(parameter, options)) ?? - (await resolveByLink(parameter, options.message)) ?? - (await resolveByChannelAndMessage(parameter, options.message)); - if (message) return Result.ok(message); + (await resolveByLink(parameter, options)) ?? + (await resolveByChannelAndMessage(parameter, options)); + + if (message) { + return Result.ok(message); + } } else { const message = parameter.options.resolved.messages?.first(); - if (message) return resolveMessage(message.id, options); + if (message) { + return resolveMessage(message.id, options); + } } return Result.err(Identifiers.ArgumentMessageError); } function resolveById(parameter: string, options: MessageResolverOptions): Awaitable { - if (!SnowflakeRegex.test(parameter)) return null; + if (!SnowflakeRegex.test(parameter)) { + return null; + } - if (options.channel) return options.channel.messages.fetch(parameter as Snowflake); + if (options.channel) { + return options.channel.messages.fetch(parameter as Snowflake); + } - if (options.scan && isGuildBasedChannel(options.message.channel)) { - for (const channel of options.message.channel.guild.channels.cache.values()) { + if (options.scan && isGuildBasedChannel(options.messageOrInteraction.channel)) { + for (const channel of options.messageOrInteraction.channel.guild.channels.cache.values()) { if (!isTextBasedChannel(channel)) continue; const message = channel.messages.cache.get(parameter); - if (message) return message; + if (message) { + return message; + } } } - return options.message.channel.messages.fetch(parameter as Snowflake); + return options.messageOrInteraction.channel?.messages.fetch(parameter as Snowflake) ?? null; } -async function resolveByLink(parameter: string, message: Message): Promise { - if (!message.guild) return null; +async function resolveByLink(parameter: string, options: MessageResolverOptions): Promise { + if (!options.messageOrInteraction.guild) { + return null; + } const matches = MessageLinkRegex.exec(parameter); - if (!matches) return null; + if (!matches) { + return null; + } + const [, guildId, channelId, messageId] = matches; const guild = container.client.guilds.cache.get(guildId as Snowflake); - if (guild !== message.guild) return null; + if (guild !== options.messageOrInteraction.guild) { + return null; + } - return getMessageFromChannel(channelId, messageId, message.author); + return getMessageFromChannel( + channelId, + messageId, + runsOnInteraction(options.messageOrInteraction) ? options.messageOrInteraction.user : options.messageOrInteraction.author + ); } -async function resolveByChannelAndMessage(parameter: string, message: Message): Promise { +async function resolveByChannelAndMessage(parameter: string, options: MessageResolverOptions): Promise { const result = ChannelMessageRegex.exec(parameter)?.groups; - if (!result) return null; - return getMessageFromChannel(result.channelId, result.messageId, message.author); + if (!result) { + return null; + } + + return getMessageFromChannel( + result.channelId, + result.messageId, + runsOnInteraction(options.messageOrInteraction) ? options.messageOrInteraction.user : options.messageOrInteraction.author + ); } async function getMessageFromChannel(channelId: Snowflake, messageId: Snowflake, originalAuthor: User): Promise { const channel = container.client.channels.cache.get(channelId) as GuildBasedChannelTypes; - if (!channel) return null; - if (!(isNewsChannel(channel) || isTextChannel(channel))) return null; - if (!channel.viewable) return null; - if (!channel.permissionsFor(originalAuthor)?.has(Permissions.FLAGS.VIEW_CHANNEL)) return null; + if (!channel) { + return null; + } + + if (!(isNewsChannel(channel) || isTextChannel(channel))) { + return null; + } + + if (!channel.viewable) { + return null; + } + + if (!channel.permissionsFor(originalAuthor)?.has(Permissions.FLAGS.VIEW_CHANNEL)) { + return null; + } return channel.messages.fetch(messageId); } diff --git a/src/lib/resolvers/number.ts b/src/lib/resolvers/number.ts index cbd200abb..bb42f61c5 100644 --- a/src/lib/resolvers/number.ts +++ b/src/lib/resolvers/number.ts @@ -6,10 +6,17 @@ export function resolveNumber( options?: { minimum?: number; maximum?: number } ): Result { const parsed = Number(parameter); - if (Number.isNaN(parsed)) return Result.err(Identifiers.ArgumentNumberError); + if (Number.isNaN(parsed)) { + return Result.err(Identifiers.ArgumentNumberError); + } - if (typeof options?.minimum === 'number' && parsed < options.minimum) return Result.err(Identifiers.ArgumentNumberTooSmall); - if (typeof options?.maximum === 'number' && parsed > options.maximum) return Result.err(Identifiers.ArgumentNumberTooLarge); + if (typeof options?.minimum === 'number' && parsed < options.minimum) { + return Result.err(Identifiers.ArgumentNumberTooSmall); + } + + if (typeof options?.maximum === 'number' && parsed > options.maximum) { + return Result.err(Identifiers.ArgumentNumberTooLarge); + } return Result.ok(parsed); } diff --git a/src/lib/resolvers/partialDMChannel.ts b/src/lib/resolvers/partialDMChannel.ts index c465b7010..8283a40da 100644 --- a/src/lib/resolvers/partialDMChannel.ts +++ b/src/lib/resolvers/partialDMChannel.ts @@ -10,7 +10,10 @@ export function resolvePartialDMChannel( ): Result { const result = resolveChannel(parameter, message); return result.mapInto((channel) => { - if (isDMChannel(channel)) return Result.ok(channel); + if (isDMChannel(channel)) { + return Result.ok(channel); + } + return Result.err(Identifiers.ArgumentDMChannelError); }); } diff --git a/src/lib/resolvers/role.ts b/src/lib/resolvers/role.ts index a2ac75bf1..be2ff7abc 100644 --- a/src/lib/resolvers/role.ts +++ b/src/lib/resolvers/role.ts @@ -5,7 +5,11 @@ import { Identifiers } from '../errors/Identifiers'; export async function resolveRole(parameter: string, guild: Guild): Promise> { const role = (await resolveById(parameter, guild)) ?? resolveByQuery(parameter, guild); - if (role) return Result.ok(role); + + if (role) { + return Result.ok(role); + } + return Result.err(Identifiers.ArgumentRoleError); } diff --git a/src/lib/resolvers/user.ts b/src/lib/resolvers/user.ts index e920ccc46..acb7cca5c 100644 --- a/src/lib/resolvers/user.ts +++ b/src/lib/resolvers/user.ts @@ -7,6 +7,10 @@ import { Identifiers } from '../errors/Identifiers'; export async function resolveUser(parameter: string): Promise> { const userId = UserOrMemberMentionRegex.exec(parameter) ?? SnowflakeRegex.exec(parameter); const user = userId ? await container.client.users.fetch(userId[1] as Snowflake).catch(() => null) : null; - if (user) return Result.ok(user); + + if (user) { + return Result.ok(user); + } + return Result.err(Identifiers.ArgumentUserError); } From 0c98ea471e94aa0f7551d1a3403ded97680ffc36 Mon Sep 17 00:00:00 2001 From: samfundev Date: Sat, 13 Aug 2022 16:52:14 -0400 Subject: [PATCH 3/5] fix: allow interactions to provide resolver context --- src/lib/resolvers/channel.ts | 4 ++-- src/lib/resolvers/dmChannel.ts | 4 ++-- src/lib/resolvers/member.ts | 17 +++++++++++----- src/lib/resolvers/message.ts | 26 ++++++++----------------- src/lib/resolvers/role.ts | 17 +++++++++++----- src/lib/utils/resolvers/resolveGuild.ts | 9 +++++++++ 6 files changed, 45 insertions(+), 32 deletions(-) create mode 100644 src/lib/utils/resolvers/resolveGuild.ts diff --git a/src/lib/resolvers/channel.ts b/src/lib/resolvers/channel.ts index 493d6019e..fe9b6bcae 100644 --- a/src/lib/resolvers/channel.ts +++ b/src/lib/resolvers/channel.ts @@ -1,10 +1,10 @@ import { ChannelMentionRegex, ChannelTypes } from '@sapphire/discord.js-utilities'; import { container } from '@sapphire/pieces'; import { Result } from '@sapphire/result'; -import type { Message } from 'discord.js'; +import type { CommandInteraction, Message, Snowflake } from 'discord.js'; import { Identifiers } from '../errors/Identifiers'; -export function resolveChannel(parameter: string, message: Message): Result { +export function resolveChannel(parameter: string, message: Message | CommandInteraction): Result { const channelId = (ChannelMentionRegex.exec(parameter)?.[1] ?? parameter) as Snowflake; const channel = (message.guild ? message.guild.channels : container.client.channels).cache.get(channelId); diff --git a/src/lib/resolvers/dmChannel.ts b/src/lib/resolvers/dmChannel.ts index 677aa713c..a948007f3 100644 --- a/src/lib/resolvers/dmChannel.ts +++ b/src/lib/resolvers/dmChannel.ts @@ -1,12 +1,12 @@ import { isDMChannel } from '@sapphire/discord.js-utilities'; import { Result } from '@sapphire/result'; -import type { DMChannel, Message } from 'discord.js'; +import type { CommandInteraction, DMChannel, Message } from 'discord.js'; import { Identifiers } from '../errors/Identifiers'; import { resolveChannel } from './channel'; export function resolveDMChannel( parameter: string, - message: Message + message: Message | CommandInteraction ): Result { const result = resolveChannel(parameter, message); return result.mapInto((value) => { diff --git a/src/lib/resolvers/member.ts b/src/lib/resolvers/member.ts index a0ac9ed16..8cf101868 100644 --- a/src/lib/resolvers/member.ts +++ b/src/lib/resolvers/member.ts @@ -1,13 +1,20 @@ import { SnowflakeRegex, UserOrMemberMentionRegex } from '@sapphire/discord-utilities'; import { Result } from '@sapphire/result'; -import type { Guild, GuildMember, Snowflake } from 'discord.js'; +import type { BaseCommandInteraction, Guild, GuildMember, Snowflake } from 'discord.js'; import { Identifiers } from '../errors/Identifiers'; +import resolveGuild from '../utils/resolvers/resolveGuild'; -export async function resolveMember(parameter: string, guild: Guild): Promise> { - const member = (await resolveById(parameter, guild)) ?? (await resolveByQuery(parameter, guild)); +export async function resolveMember( + parameter: string, + guildOrInteraction: Guild | BaseCommandInteraction +): Promise> { + const guild = resolveGuild(guildOrInteraction); + if (guild) { + const member = (await resolveById(parameter, guild)) ?? (await resolveByQuery(parameter, guild)); - if (member) { - return Result.ok(member); + if (member) { + return Result.ok(member); + } } return Result.err(Identifiers.ArgumentMemberError); diff --git a/src/lib/resolvers/message.ts b/src/lib/resolvers/message.ts index a693dcd50..37f74c8b0 100644 --- a/src/lib/resolvers/message.ts +++ b/src/lib/resolvers/message.ts @@ -35,24 +35,14 @@ export interface MessageResolverOptions { scan?: boolean; } -export async function resolveMessage( - parameter: string | BaseCommandInteraction, - options: MessageResolverOptions -): Promise> { - if (typeof parameter === 'string') { - const message = - (await resolveById(parameter, options)) ?? - (await resolveByLink(parameter, options)) ?? - (await resolveByChannelAndMessage(parameter, options)); - - if (message) { - return Result.ok(message); - } - } else { - const message = parameter.options.resolved.messages?.first(); - if (message) { - return resolveMessage(message.id, options); - } +export async function resolveMessage(parameter: string, options: MessageResolverOptions): Promise> { + const message = + (await resolveById(parameter, options)) ?? + (await resolveByLink(parameter, options)) ?? + (await resolveByChannelAndMessage(parameter, options)); + + if (message) { + return Result.ok(message); } return Result.err(Identifiers.ArgumentMessageError); diff --git a/src/lib/resolvers/role.ts b/src/lib/resolvers/role.ts index be2ff7abc..aeba3366d 100644 --- a/src/lib/resolvers/role.ts +++ b/src/lib/resolvers/role.ts @@ -1,13 +1,20 @@ import { RoleMentionRegex, SnowflakeRegex } from '@sapphire/discord-utilities'; import { Result } from '@sapphire/result'; -import type { Guild, Role, Snowflake } from 'discord.js'; +import type { BaseCommandInteraction, Guild, Role, Snowflake } from 'discord.js'; import { Identifiers } from '../errors/Identifiers'; +import resolveGuild from '../utils/resolvers/resolveGuild'; -export async function resolveRole(parameter: string, guild: Guild): Promise> { - const role = (await resolveById(parameter, guild)) ?? resolveByQuery(parameter, guild); +export async function resolveRole( + parameter: string, + guildOrInteraction: Guild | BaseCommandInteraction +): Promise> { + const guild = resolveGuild(guildOrInteraction); + if (guild) { + const role = (await resolveById(parameter, guild)) ?? resolveByQuery(parameter, guild); - if (role) { - return Result.ok(role); + if (role) { + return Result.ok(role); + } } return Result.err(Identifiers.ArgumentRoleError); diff --git a/src/lib/utils/resolvers/resolveGuild.ts b/src/lib/utils/resolvers/resolveGuild.ts new file mode 100644 index 000000000..dd3e3d316 --- /dev/null +++ b/src/lib/utils/resolvers/resolveGuild.ts @@ -0,0 +1,9 @@ +import type { Guild, Interaction } from 'discord.js'; + +export default function resolveGuild(guildOrInteraction: Guild | Interaction): Guild | null { + return isGuild(guildOrInteraction) ? guildOrInteraction : guildOrInteraction.guild; +} + +function isGuild(guildOrInteraction: Guild | Interaction): guildOrInteraction is Guild { + return (guildOrInteraction as Interaction).guild !== undefined; +} From 3f39b99a4cfabd4d3343452100111a3d8d8607f6 Mon Sep 17 00:00:00 2001 From: Jeroen Claassens Date: Sat, 13 Aug 2022 23:33:21 +0200 Subject: [PATCH 4/5] chore: fixes I want and this is quicker than GH review --- package.json | 12 +- src/lib/resolvers/boolean.ts | 10 +- src/lib/resolvers/channel.ts | 9 +- src/lib/resolvers/dmChannel.ts | 6 +- src/lib/resolvers/member.ts | 9 +- src/lib/resolvers/message.ts | 13 +- src/lib/resolvers/role.ts | 9 +- src/lib/utils/resolvers/resolveGuild.ts | 9 -- yarn.lock | 150 ++++++++++++------------ 9 files changed, 109 insertions(+), 118 deletions(-) delete mode 100644 src/lib/utils/resolvers/resolveGuild.ts diff --git a/package.json b/package.json index b910355e7..890b8d62f 100644 --- a/package.json +++ b/package.json @@ -30,7 +30,7 @@ "dependencies": { "@discordjs/builders": "^0.16.0", "@sapphire/discord-utilities": "^2.11.5", - "@sapphire/discord.js-utilities": "^4.11.3", + "@sapphire/discord.js-utilities": "^4.12.0", "@sapphire/lexure": "^1.0.1", "@sapphire/pieces": "^3.5.0", "@sapphire/ratelimits": "^2.4.4", @@ -51,12 +51,12 @@ "@sapphire/prettier-config": "^1.4.3", "@sapphire/ts-config": "^3.3.4", "@types/jest": "^28.1.6", - "@types/node": "^18.6.4", + "@types/node": "^18.7.3", "@types/ws": "^8.5.3", - "@typescript-eslint/eslint-plugin": "^5.32.0", - "@typescript-eslint/parser": "^5.32.0", + "@typescript-eslint/eslint-plugin": "^5.33.0", + "@typescript-eslint/parser": "^5.33.0", "cz-conventional-changelog": "^3.3.0", - "discord.js": "^13.9.2", + "discord.js": "^13.10.2", "eslint": "^8.21.0", "eslint-config-prettier": "^8.5.0", "eslint-plugin-prettier": "^4.2.1", @@ -67,7 +67,7 @@ "pinst": "^3.0.0", "prettier": "^2.7.1", "pretty-quick": "^3.1.3", - "rollup": "^2.77.2", + "rollup": "^2.77.3", "rollup-plugin-version-injector": "^1.3.3", "ts-jest": "^28.0.7", "typedoc": "^0.23.10", diff --git a/src/lib/resolvers/boolean.ts b/src/lib/resolvers/boolean.ts index 01ecd2f8e..e5c901a91 100644 --- a/src/lib/resolvers/boolean.ts +++ b/src/lib/resolvers/boolean.ts @@ -9,8 +9,14 @@ export function resolveBoolean( customs?: { truths?: readonly string[]; falses?: readonly string[] } ): Result { const boolean = parameter.toLowerCase(); - if ([...baseTruths, ...(customs?.truths ?? [])].includes(boolean)) return Result.ok(true); - if ([...baseFalses, ...(customs?.falses ?? [])].includes(boolean)) return Result.ok(false); + + if ([...baseTruths, ...(customs?.truths ?? [])].includes(boolean)) { + return Result.ok(true); + } + + if ([...baseFalses, ...(customs?.falses ?? [])].includes(boolean)) { + return Result.ok(false); + } return Result.err(Identifiers.ArgumentBooleanError); } diff --git a/src/lib/resolvers/channel.ts b/src/lib/resolvers/channel.ts index fe9b6bcae..8ec939ca5 100644 --- a/src/lib/resolvers/channel.ts +++ b/src/lib/resolvers/channel.ts @@ -1,12 +1,15 @@ import { ChannelMentionRegex, ChannelTypes } from '@sapphire/discord.js-utilities'; import { container } from '@sapphire/pieces'; import { Result } from '@sapphire/result'; -import type { CommandInteraction, Message, Snowflake } from 'discord.js'; +import type { BaseCommandInteraction, Message, Snowflake } from 'discord.js'; import { Identifiers } from '../errors/Identifiers'; -export function resolveChannel(parameter: string, message: Message | CommandInteraction): Result { +export function resolveChannel( + parameter: string, + messageOrInteraction: Message | BaseCommandInteraction +): Result { const channelId = (ChannelMentionRegex.exec(parameter)?.[1] ?? parameter) as Snowflake; - const channel = (message.guild ? message.guild.channels : container.client.channels).cache.get(channelId); + const channel = (messageOrInteraction.guild ? messageOrInteraction.guild.channels : container.client.channels).cache.get(channelId); if (channel) { return Result.ok(channel as ChannelTypes); diff --git a/src/lib/resolvers/dmChannel.ts b/src/lib/resolvers/dmChannel.ts index a948007f3..96bc8922d 100644 --- a/src/lib/resolvers/dmChannel.ts +++ b/src/lib/resolvers/dmChannel.ts @@ -1,14 +1,14 @@ import { isDMChannel } from '@sapphire/discord.js-utilities'; import { Result } from '@sapphire/result'; -import type { CommandInteraction, DMChannel, Message } from 'discord.js'; +import type { BaseCommandInteraction, DMChannel, Message } from 'discord.js'; import { Identifiers } from '../errors/Identifiers'; import { resolveChannel } from './channel'; export function resolveDMChannel( parameter: string, - message: Message | CommandInteraction + messageOrInteraction: Message | BaseCommandInteraction ): Result { - const result = resolveChannel(parameter, message); + const result = resolveChannel(parameter, messageOrInteraction); return result.mapInto((value) => { if (isDMChannel(value) && !value.partial) { return Result.ok(value); diff --git a/src/lib/resolvers/member.ts b/src/lib/resolvers/member.ts index 8cf101868..b6e2c69b6 100644 --- a/src/lib/resolvers/member.ts +++ b/src/lib/resolvers/member.ts @@ -1,14 +1,9 @@ import { SnowflakeRegex, UserOrMemberMentionRegex } from '@sapphire/discord-utilities'; import { Result } from '@sapphire/result'; -import type { BaseCommandInteraction, Guild, GuildMember, Snowflake } from 'discord.js'; +import type { Guild, GuildMember, Snowflake } from 'discord.js'; import { Identifiers } from '../errors/Identifiers'; -import resolveGuild from '../utils/resolvers/resolveGuild'; -export async function resolveMember( - parameter: string, - guildOrInteraction: Guild | BaseCommandInteraction -): Promise> { - const guild = resolveGuild(guildOrInteraction); +export async function resolveMember(parameter: string, guild: Guild): Promise> { if (guild) { const member = (await resolveById(parameter, guild)) ?? (await resolveByQuery(parameter, guild)); diff --git a/src/lib/resolvers/message.ts b/src/lib/resolvers/message.ts index 37f74c8b0..b9721c826 100644 --- a/src/lib/resolvers/message.ts +++ b/src/lib/resolvers/message.ts @@ -1,17 +1,18 @@ import { ChannelMessageRegex, MessageLinkRegex, SnowflakeRegex } from '@sapphire/discord-utilities'; import { + AnyInteraction, GuildBasedChannelTypes, + isAnyInteraction, isGuildBasedChannel, isNewsChannel, isTextBasedChannel, isTextChannel, - runsOnInteraction, TextBasedChannelTypes } from '@sapphire/discord.js-utilities'; import { container } from '@sapphire/pieces'; import { Result } from '@sapphire/result'; import type { Awaitable } from '@sapphire/utilities'; -import { CommandInteraction, Message, Permissions, Snowflake, User } from 'discord.js'; +import { Message, Permissions, Snowflake, User } from 'discord.js'; import { Identifiers } from '../errors/Identifiers'; /** @@ -24,9 +25,9 @@ export interface MessageResolverOptions { */ channel?: TextBasedChannelTypes; /** - * Base {@link Message} or {@link CommandInteraction} to resolve the message from (e.g. pick the channel if not given). + * Base {@link Message} or {@link AnyInteraction} to resolve the message from (e.g. pick the channel if not given). */ - messageOrInteraction: Message | CommandInteraction; + messageOrInteraction: Message | AnyInteraction; /** * Whether to scan the entire guild cache for the message. * If channel is given with this option, this option is ignored. @@ -91,7 +92,7 @@ async function resolveByLink(parameter: string, options: MessageResolverOptions) return getMessageFromChannel( channelId, messageId, - runsOnInteraction(options.messageOrInteraction) ? options.messageOrInteraction.user : options.messageOrInteraction.author + isAnyInteraction(options.messageOrInteraction) ? options.messageOrInteraction.user : options.messageOrInteraction.author ); } @@ -105,7 +106,7 @@ async function resolveByChannelAndMessage(parameter: string, options: MessageRes return getMessageFromChannel( result.channelId, result.messageId, - runsOnInteraction(options.messageOrInteraction) ? options.messageOrInteraction.user : options.messageOrInteraction.author + isAnyInteraction(options.messageOrInteraction) ? options.messageOrInteraction.user : options.messageOrInteraction.author ); } diff --git a/src/lib/resolvers/role.ts b/src/lib/resolvers/role.ts index aeba3366d..415ccc3a2 100644 --- a/src/lib/resolvers/role.ts +++ b/src/lib/resolvers/role.ts @@ -1,14 +1,9 @@ import { RoleMentionRegex, SnowflakeRegex } from '@sapphire/discord-utilities'; import { Result } from '@sapphire/result'; -import type { BaseCommandInteraction, Guild, Role, Snowflake } from 'discord.js'; +import type { Guild, Role, Snowflake } from 'discord.js'; import { Identifiers } from '../errors/Identifiers'; -import resolveGuild from '../utils/resolvers/resolveGuild'; -export async function resolveRole( - parameter: string, - guildOrInteraction: Guild | BaseCommandInteraction -): Promise> { - const guild = resolveGuild(guildOrInteraction); +export async function resolveRole(parameter: string, guild: Guild): Promise> { if (guild) { const role = (await resolveById(parameter, guild)) ?? resolveByQuery(parameter, guild); diff --git a/src/lib/utils/resolvers/resolveGuild.ts b/src/lib/utils/resolvers/resolveGuild.ts deleted file mode 100644 index dd3e3d316..000000000 --- a/src/lib/utils/resolvers/resolveGuild.ts +++ /dev/null @@ -1,9 +0,0 @@ -import type { Guild, Interaction } from 'discord.js'; - -export default function resolveGuild(guildOrInteraction: Guild | Interaction): Guild | null { - return isGuild(guildOrInteraction) ? guildOrInteraction : guildOrInteraction.guild; -} - -function isGuild(guildOrInteraction: Guild | Interaction): guildOrInteraction is Guild { - return (guildOrInteraction as Interaction).guild !== undefined; -} diff --git a/yarn.lock b/yarn.lock index bd22d9116..891f24de3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1087,22 +1087,22 @@ __metadata: languageName: node linkType: hard -"@sapphire/discord-utilities@npm:^2.11.2, @sapphire/discord-utilities@npm:^2.11.5": +"@sapphire/discord-utilities@npm:^2.11.5": version: 2.11.5 resolution: "@sapphire/discord-utilities@npm:2.11.5" checksum: 5a507d845372f51012486d5bb6ec82fa4ac7e305b49d336517539d05267f82603ce4c0add3d7903afd19f0046efc6986f1837c041d0ec1edecd77cad48d27061 languageName: node linkType: hard -"@sapphire/discord.js-utilities@npm:^4.11.3": - version: 4.11.3 - resolution: "@sapphire/discord.js-utilities@npm:4.11.3" +"@sapphire/discord.js-utilities@npm:^4.12.0": + version: 4.12.0 + resolution: "@sapphire/discord.js-utilities@npm:4.12.0" dependencies: - "@sapphire/discord-utilities": ^2.11.2 - "@sapphire/time-utilities": ^1.7.4 - "@sapphire/utilities": ^3.6.2 + "@sapphire/discord-utilities": ^2.11.5 + "@sapphire/time-utilities": ^1.7.5 + "@sapphire/utilities": ^3.9.0 tslib: ^2.4.0 - checksum: 92a1040ecba4c1b7abfcc33edb7d97406f67f0d030cc7f741284946fa9c0f96517bfdcb8294828eb9590558810bacdeaf49eb8905399757f0b1211afb787bf2b + checksum: 7f71f9205993be15fee97c9128997304cfadc3d5b420885e2588f3ec2c0653fcdda29138d277ec6f13950ecc8ac01fa904c94cf2414e355bb05edcd5fe9b54c9 languageName: node linkType: hard @@ -1141,7 +1141,7 @@ __metadata: "@favware/npm-deprecate": ^1.0.5 "@favware/rollup-type-bundler": ^1.0.10 "@sapphire/discord-utilities": ^2.11.5 - "@sapphire/discord.js-utilities": ^4.11.3 + "@sapphire/discord.js-utilities": ^4.12.0 "@sapphire/eslint-config": ^4.3.7 "@sapphire/lexure": ^1.0.1 "@sapphire/pieces": ^3.5.0 @@ -1152,13 +1152,13 @@ __metadata: "@sapphire/ts-config": ^3.3.4 "@sapphire/utilities": ^3.9.0 "@types/jest": ^28.1.6 - "@types/node": ^18.6.4 + "@types/node": ^18.7.3 "@types/object-hash": ^2.2.1 "@types/ws": ^8.5.3 - "@typescript-eslint/eslint-plugin": ^5.32.0 - "@typescript-eslint/parser": ^5.32.0 + "@typescript-eslint/eslint-plugin": ^5.33.0 + "@typescript-eslint/parser": ^5.33.0 cz-conventional-changelog: ^3.3.0 - discord.js: ^13.9.2 + discord.js: ^13.10.2 eslint: ^8.21.0 eslint-config-prettier: ^8.5.0 eslint-plugin-prettier: ^4.2.1 @@ -1170,7 +1170,7 @@ __metadata: pinst: ^3.0.0 prettier: ^2.7.1 pretty-quick: ^3.1.3 - rollup: ^2.77.2 + rollup: ^2.77.3 rollup-plugin-version-injector: ^1.3.3 ts-jest: ^28.0.7 tslib: ^2.4.0 @@ -1245,7 +1245,7 @@ __metadata: languageName: node linkType: hard -"@sapphire/time-utilities@npm:^1.7.4": +"@sapphire/time-utilities@npm:^1.7.4, @sapphire/time-utilities@npm:^1.7.5": version: 1.7.5 resolution: "@sapphire/time-utilities@npm:1.7.5" dependencies: @@ -1264,7 +1264,7 @@ __metadata: languageName: node linkType: hard -"@sapphire/utilities@npm:^3.6.2, @sapphire/utilities@npm:^3.7.0, @sapphire/utilities@npm:^3.8.0, @sapphire/utilities@npm:^3.9.0": +"@sapphire/utilities@npm:^3.7.0, @sapphire/utilities@npm:^3.8.0, @sapphire/utilities@npm:^3.9.0": version: 3.9.0 resolution: "@sapphire/utilities@npm:3.9.0" checksum: 2d8fdf173abc39d7f8bdeb593daebe8b1e2fb71ffa91951cb4ef57845eec45938bfd1d4f5db2e78a0b9ab212c0d033a4fbefcf6335a28afb8a1cea7f44926160 @@ -1447,10 +1447,10 @@ __metadata: languageName: node linkType: hard -"@types/node@npm:*, @types/node@npm:>=12, @types/node@npm:^18.6.4": - version: 18.6.4 - resolution: "@types/node@npm:18.6.4" - checksum: fc453dd2b541f5812ba1a8f957f577727cf2d8aee886f1d5c03eb153b2b3373d2e0953c5bd2b7a5b184073bc317f54ec91f1ec4830a58eda4a833e90654021de +"@types/node@npm:*, @types/node@npm:>=12, @types/node@npm:^18.7.3": + version: 18.7.3 + resolution: "@types/node@npm:18.7.3" + checksum: f51ed436a112235ac068d739b4823090a37b869cc186b64dd5c250dd285139c286990fcbeff2fb3ecba5d605fa885de4275247d332e5b96eafdfbb1da62e3ced languageName: node linkType: hard @@ -1514,13 +1514,13 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/eslint-plugin@npm:^5.28.0, @typescript-eslint/eslint-plugin@npm:^5.32.0": - version: 5.32.0 - resolution: "@typescript-eslint/eslint-plugin@npm:5.32.0" +"@typescript-eslint/eslint-plugin@npm:^5.28.0, @typescript-eslint/eslint-plugin@npm:^5.33.0": + version: 5.33.0 + resolution: "@typescript-eslint/eslint-plugin@npm:5.33.0" dependencies: - "@typescript-eslint/scope-manager": 5.32.0 - "@typescript-eslint/type-utils": 5.32.0 - "@typescript-eslint/utils": 5.32.0 + "@typescript-eslint/scope-manager": 5.33.0 + "@typescript-eslint/type-utils": 5.33.0 + "@typescript-eslint/utils": 5.33.0 debug: ^4.3.4 functional-red-black-tree: ^1.0.1 ignore: ^5.2.0 @@ -1533,42 +1533,42 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: 9785c34d9742b51130237bfe244924ca6dfd529bdcc5932a5cf81558f0235099c963a11125df393037db51ce451f7ab9442aba3c3a8bb2e0607569a0e31480c8 + checksum: d408f3f474b34fefde8ee65d98deb126949fd7d8e211a7f95c5cc2b507dedbf8eb239f3895e0c37aa6338989531e37c5f35c2e0de36a126c52f0846e89605487 languageName: node linkType: hard -"@typescript-eslint/parser@npm:^5.28.0, @typescript-eslint/parser@npm:^5.32.0": - version: 5.32.0 - resolution: "@typescript-eslint/parser@npm:5.32.0" +"@typescript-eslint/parser@npm:^5.28.0, @typescript-eslint/parser@npm:^5.33.0": + version: 5.33.0 + resolution: "@typescript-eslint/parser@npm:5.33.0" dependencies: - "@typescript-eslint/scope-manager": 5.32.0 - "@typescript-eslint/types": 5.32.0 - "@typescript-eslint/typescript-estree": 5.32.0 + "@typescript-eslint/scope-manager": 5.33.0 + "@typescript-eslint/types": 5.33.0 + "@typescript-eslint/typescript-estree": 5.33.0 debug: ^4.3.4 peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 peerDependenciesMeta: typescript: optional: true - checksum: 3fcfa183cad125c3198fd63701c6e13dad1cc984d309e8cd40ec9a2eb857902abfd7e9ee3f030b18eb1c18c795a61ea289ef147a7f9dfac38df905e7514316af + checksum: 2617aba987a70ee6b16ecc6afa6d245422df33a9d056018ff2e316159e667a0ab9d9c15fcea95e0ba65832661e71cc2753a221e77f0b0fab278e52c4497b8278 languageName: node linkType: hard -"@typescript-eslint/scope-manager@npm:5.32.0": - version: 5.32.0 - resolution: "@typescript-eslint/scope-manager@npm:5.32.0" +"@typescript-eslint/scope-manager@npm:5.33.0": + version: 5.33.0 + resolution: "@typescript-eslint/scope-manager@npm:5.33.0" dependencies: - "@typescript-eslint/types": 5.32.0 - "@typescript-eslint/visitor-keys": 5.32.0 - checksum: 69bdeb029f39d1112299dc0cb0ddef30e51bdb782fdb79cc4e72fa448e00d71e39938d3bff3fa4ee43b3416c2e3b4564de2c37252914772b07eeedafb14412d6 + "@typescript-eslint/types": 5.33.0 + "@typescript-eslint/visitor-keys": 5.33.0 + checksum: b2cbea9abd528d01a5acb2d68a2a5be51ec6827760d3869bdd70920cf6c3a4f9f96d87c77177f8313009d9db71253e4a75f8393f38651e2abaf91ef28e60fb9d languageName: node linkType: hard -"@typescript-eslint/type-utils@npm:5.32.0": - version: 5.32.0 - resolution: "@typescript-eslint/type-utils@npm:5.32.0" +"@typescript-eslint/type-utils@npm:5.33.0": + version: 5.33.0 + resolution: "@typescript-eslint/type-utils@npm:5.33.0" dependencies: - "@typescript-eslint/utils": 5.32.0 + "@typescript-eslint/utils": 5.33.0 debug: ^4.3.4 tsutils: ^3.21.0 peerDependencies: @@ -1576,23 +1576,23 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: 4063808ca054789bebc6adb376d15c13e38f8ea14fa2842c38ae616d77fb77681b67a04b77887cf9ceb6f801ab3fc5eddfb6325779ab821404c62f36c56310bb + checksum: a1d1ffb42fe96bfc2339cc2875e218aa82fa9391be04c1a266bb11da1eca6835555687e81cde75477c60e6702049cd4dde7d2638e7e9b9d8cf4b7b2242353a6e languageName: node linkType: hard -"@typescript-eslint/types@npm:5.32.0": - version: 5.32.0 - resolution: "@typescript-eslint/types@npm:5.32.0" - checksum: 6758f54d8d7763893cd7c1753f525ef1777eee8b558bf3d54fd2a2ce691ca0cf813c68a26e4db83a1deae4e4a62b247f1195e15a1f3577f1293849f9e55a232c +"@typescript-eslint/types@npm:5.33.0": + version: 5.33.0 + resolution: "@typescript-eslint/types@npm:5.33.0" + checksum: 8bbddda84cb3adf5c659b0d42547a2d6ab87f4eea574aca5dd63a3bd85169f32796ecbddad3b27f18a609070f6b1d18a54018d488bad746ae0f6ea5c02206109 languageName: node linkType: hard -"@typescript-eslint/typescript-estree@npm:5.32.0": - version: 5.32.0 - resolution: "@typescript-eslint/typescript-estree@npm:5.32.0" +"@typescript-eslint/typescript-estree@npm:5.33.0": + version: 5.33.0 + resolution: "@typescript-eslint/typescript-estree@npm:5.33.0" dependencies: - "@typescript-eslint/types": 5.32.0 - "@typescript-eslint/visitor-keys": 5.32.0 + "@typescript-eslint/types": 5.33.0 + "@typescript-eslint/visitor-keys": 5.33.0 debug: ^4.3.4 globby: ^11.1.0 is-glob: ^4.0.3 @@ -1601,33 +1601,33 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: 6aee08be5d36603d038fb8340f324f5cb38519150c9b37c012f0c1ff2a4d8cf22fbc6835de31d069949c2b3d8ed3e729076a724ef29db4289d9fe73b97c9d310 + checksum: 26f9005cdfb14654125a33d90d872b926820e560dff8970c4629fd5f6f47ad2a31e4c63161564d21bb42a8fc3ced0033994854ee37336ae07d90ccf6300d702b languageName: node linkType: hard -"@typescript-eslint/utils@npm:5.32.0": - version: 5.32.0 - resolution: "@typescript-eslint/utils@npm:5.32.0" +"@typescript-eslint/utils@npm:5.33.0": + version: 5.33.0 + resolution: "@typescript-eslint/utils@npm:5.33.0" dependencies: "@types/json-schema": ^7.0.9 - "@typescript-eslint/scope-manager": 5.32.0 - "@typescript-eslint/types": 5.32.0 - "@typescript-eslint/typescript-estree": 5.32.0 + "@typescript-eslint/scope-manager": 5.33.0 + "@typescript-eslint/types": 5.33.0 + "@typescript-eslint/typescript-estree": 5.33.0 eslint-scope: ^5.1.1 eslint-utils: ^3.0.0 peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - checksum: cfd88d93508c8fb0db17d2726691e1383db390357fa0637bd8111558fbe72da5130d995294001d71b1d929d620fbce3f20a70b277a77ca21a4241b3b470dc758 + checksum: 6ce5ee5eabeb6d73538b24e6487f811ecb0ef3467bd366cbd15bf30d904bdedb73fc6f48cf2e2e742dda462b42999ea505e8b59255545825ec9db86f3d423ea7 languageName: node linkType: hard -"@typescript-eslint/visitor-keys@npm:5.32.0": - version: 5.32.0 - resolution: "@typescript-eslint/visitor-keys@npm:5.32.0" +"@typescript-eslint/visitor-keys@npm:5.33.0": + version: 5.33.0 + resolution: "@typescript-eslint/visitor-keys@npm:5.33.0" dependencies: - "@typescript-eslint/types": 5.32.0 + "@typescript-eslint/types": 5.33.0 eslint-visitor-keys: ^3.3.0 - checksum: 1f9b756d648c2346a6e8538ffde729d3d9ce6621fded3d9f15c96aa0ebf8f511daf8232470423fb36359c2113538a4daaf3336181be78a0cfbfd297af91ce9ba + checksum: d7e3653de6bac6841e6fcc54226b93ad6bdca4aa76ebe7d83459c016c3eebcc50d4f65ee713174bc267d765295b642d1927a778c5de707b8389e3fcc052aa4a1 languageName: node linkType: hard @@ -2738,9 +2738,9 @@ __metadata: languageName: node linkType: hard -"discord.js@npm:^13.9.2": - version: 13.9.2 - resolution: "discord.js@npm:13.9.2" +"discord.js@npm:^13.10.2": + version: 13.10.2 + resolution: "discord.js@npm:13.10.2" dependencies: "@discordjs/builders": ^0.16.0 "@discordjs/collection": ^0.7.0 @@ -2751,7 +2751,7 @@ __metadata: form-data: ^4.0.0 node-fetch: ^2.6.7 ws: ^8.8.1 - checksum: e49228e2d786262ef06e611ba0d0edd3b1a773e04ce19f1536dbb5590eecc26a3667280ac8fe6801df55ae7964d01043c7060034fc306176fbbee97efce9efd6 + checksum: b8033cba91309f454c6018237fd7221913c1b78aea41b24adad8ceac5ee67f14c6da62fa0d747f20bf40f333f34898f8534ec3d1958e2c15e7fe9cf5c5535a77 languageName: node linkType: hard @@ -5932,9 +5932,9 @@ __metadata: languageName: node linkType: hard -"rollup@npm:^2.77.2": - version: 2.77.2 - resolution: "rollup@npm:2.77.2" +"rollup@npm:^2.77.2, rollup@npm:^2.77.3": + version: 2.77.3 + resolution: "rollup@npm:2.77.3" dependencies: fsevents: ~2.3.2 dependenciesMeta: @@ -5942,7 +5942,7 @@ __metadata: optional: true bin: rollup: dist/bin/rollup - checksum: 5a84fb98a6f858906bceba091430442f6c1f362b07c5fa9123b708f87e39f52640e34a189cd9a1776ceae61300055c78ba648205fa03188451539ebeb19797df + checksum: b179c68249584565ddb5664a241e8e48c293b2207718d885b08ee25797d98857a383f06b544bb89819407da5a71557f4713309a278f61c4778bb32b1d3321a1c languageName: node linkType: hard From ca93cc20d0483f69fe1efb298df6d047d5fb1eeb Mon Sep 17 00:00:00 2001 From: samfundev Date: Sat, 13 Aug 2022 18:20:10 -0400 Subject: [PATCH 5/5] chore: unnecessary check --- src/lib/resolvers/member.ts | 8 +++----- src/lib/resolvers/role.ts | 8 +++----- 2 files changed, 6 insertions(+), 10 deletions(-) diff --git a/src/lib/resolvers/member.ts b/src/lib/resolvers/member.ts index b6e2c69b6..a0ac9ed16 100644 --- a/src/lib/resolvers/member.ts +++ b/src/lib/resolvers/member.ts @@ -4,12 +4,10 @@ import type { Guild, GuildMember, Snowflake } from 'discord.js'; import { Identifiers } from '../errors/Identifiers'; export async function resolveMember(parameter: string, guild: Guild): Promise> { - if (guild) { - const member = (await resolveById(parameter, guild)) ?? (await resolveByQuery(parameter, guild)); + const member = (await resolveById(parameter, guild)) ?? (await resolveByQuery(parameter, guild)); - if (member) { - return Result.ok(member); - } + if (member) { + return Result.ok(member); } return Result.err(Identifiers.ArgumentMemberError); diff --git a/src/lib/resolvers/role.ts b/src/lib/resolvers/role.ts index 415ccc3a2..be2ff7abc 100644 --- a/src/lib/resolvers/role.ts +++ b/src/lib/resolvers/role.ts @@ -4,12 +4,10 @@ import type { Guild, Role, Snowflake } from 'discord.js'; import { Identifiers } from '../errors/Identifiers'; export async function resolveRole(parameter: string, guild: Guild): Promise> { - if (guild) { - const role = (await resolveById(parameter, guild)) ?? resolveByQuery(parameter, guild); + const role = (await resolveById(parameter, guild)) ?? resolveByQuery(parameter, guild); - if (role) { - return Result.ok(role); - } + if (role) { + return Result.ok(role); } return Result.err(Identifiers.ArgumentRoleError);