Skip to content

Commit ed414f4

Browse files
authoredApr 10, 2023
feat(Args): add guild argument (#626)
* feat(Args): add guild argument * fix: rename guild argument * fix: some fixes Co-authored-by: Jeroen Claassens <support@favware.tech>
1 parent 37b1ac5 commit ed414f4

File tree

4 files changed

+40
-0
lines changed

4 files changed

+40
-0
lines changed
 

‎src/arguments/CoreGuild.ts

+22
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
import type { PieceContext } from '@sapphire/pieces';
2+
import type { Guild } from 'discord.js';
3+
import { resolveGuild } from '../lib/resolvers/guild';
4+
import { Argument } from '../lib/structures/Argument';
5+
6+
export class CoreArgument extends Argument<Guild> {
7+
public constructor(context: PieceContext) {
8+
super(context, { name: 'guild' });
9+
}
10+
11+
public async run(parameter: string, context: Argument.Context): Argument.AsyncResult<Guild> {
12+
const resolved = await resolveGuild(parameter);
13+
return resolved.mapErrInto((identifier) =>
14+
this.error({
15+
parameter,
16+
identifier,
17+
message: 'The given argument did not resolve to a Discord guild.',
18+
context
19+
})
20+
);
21+
}
22+
}

‎src/lib/errors/Identifiers.ts

+1
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ export enum Identifiers {
1212
ArgumentFloatError = 'floatError',
1313
ArgumentFloatTooLarge = 'floatTooLarge',
1414
ArgumentFloatTooSmall = 'floatTooSmall',
15+
ArgumentGuildError = 'guildError',
1516
ArgumentGuildCategoryChannelError = 'categoryChannelError',
1617
ArgumentGuildChannelError = 'guildChannelError',
1718
ArgumentGuildChannelMissingGuildError = 'guildChannelMissingGuildError',

‎src/lib/resolvers/guild.ts

+16
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import { SnowflakeRegex } from '@sapphire/discord-utilities';
2+
import { container } from '@sapphire/pieces';
3+
import { Result } from '@sapphire/result';
4+
import type { Guild } from 'discord.js';
5+
import { Identifiers } from '../errors/Identifiers';
6+
7+
export async function resolveGuild(parameter: string): Promise<Result<Guild, Identifiers.ArgumentGuildError>> {
8+
const guildId = SnowflakeRegex.exec(parameter)?.groups?.id;
9+
const guild = guildId ? await container.client.guilds.fetch(guildId).catch(() => null) : null;
10+
11+
if (guild) {
12+
return Result.ok(guild);
13+
}
14+
15+
return Result.err(Identifiers.ArgumentGuildError);
16+
}

‎src/lib/resolvers/index.ts

+1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ export * from './dmChannel';
55
export { resolveEmoji } from './emoji';
66
export * from './enum';
77
export * from './float';
8+
export * from './guild';
89
export * from './guildCategoryChannel';
910
export * from './guildChannel';
1011
export * from './guildNewsChannel';

0 commit comments

Comments
 (0)
Please sign in to comment.