Skip to content

Commit fe8ac23

Browse files
committed
fix: attachment type
1 parent 05ab84d commit fe8ac23

8 files changed

+40
-14
lines changed

src/handlers/MessageCommandHandler.ts

+9-6
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { Client, Collection, CommandInteractionOptionResolver, Guild, Message, MessageActionRow, MessageSelectMenu, SelectMenuInteraction, TextChannel, User } from 'discord.js';
1+
import { Client, Collection, CommandInteractionOptionResolver, Guild, Message, MessageActionRow, MessageAttachment, MessageSelectMenu, SelectMenuInteraction, TextChannel, User } from 'discord.js';
22
import type { GClient } from '../lib/GClient';
33
import { CommandContext } from '../lib/structures/contexts/CommandContext';
44
import { CommandType } from '../lib/structures/Command';
@@ -8,10 +8,11 @@ import { Logger, Events } from '../lib/util/logger/Logger';
88
import { Argument, ArgumentType } from '../lib/structures/Argument';
99
import { MessageArgumentTypeBase, MessageArgumentTypes } from '../lib/structures/arguments/base';
1010
import { Util } from '../lib/util/Util';
11+
import { AttachmentType } from '../lib/structures/arguments/Attachment';
1112

1213
const cooldowns = new Collection<string, Collection<string, number>>();
1314

14-
const checkValidation = async(arg: MessageArgumentTypes, content: string, client: Client, guild: Guild, argument: Argument, channel: TextChannel, user: User) => {
15+
const checkValidation = async(arg: MessageArgumentTypes, content: string | MessageAttachment, client: Client, guild: Guild, argument: Argument, channel: TextChannel, user: User) => {
1516
if (!content) {
1617
const text = `${user.toString()}, please define argument \`${argument.name}\`, type: ${Util.toPascalCase(ArgumentType[argument.type.toString()])}`
1718
if (argument.type === ArgumentType.STRING && argument.choices?.length !== 0) {
@@ -43,13 +44,15 @@ const checkValidation = async(arg: MessageArgumentTypes, content: string, client
4344
channel.send(text);
4445
const message = await channel.awaitMessages({ filter: (m) => m.author.id === user.id && m.channelId === channel.id, time: 60000, max: 1 });
4546

46-
content = [...message.values()]?.[0]?.content;
47+
// @ts-expect-error TODO: Use ArgumentType.ATTACHMENT | Need wait for https://github.com/Garlic-Team/gcommands/pull/314 to be merged (:
48+
if (argument.type == 11) {
49+
content = [...[...message.values()]?.[0]?.attachments?.values()]?.[0];
50+
}
51+
else content = [...message.values()]?.[0]?.content;
4752
}
4853
}
4954

50-
if (!content) return channel.send(`${user.toString()}, Time :(`);
51-
52-
const validate = arg.validate(content);
55+
const validate = arg instanceof AttachmentType ? arg.validate(content) : arg.validate(content as string);
5356
if (!validate) return checkValidation(arg, null, client, guild, argument, channel, user);
5457

5558
return arg.resolve(argument, client, guild);
+19-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,24 @@
1+
import { MessageAttachment } from 'discord.js';
2+
import { Argument, ArgumentType } from '../Argument';
13
import { MessageArgumentTypeBase } from './base';
24

35
export class AttachmentType extends MessageArgumentTypeBase {
4-
validate() {
5-
return true;
6+
value;
7+
8+
validate(attachment: string | MessageAttachment) {
9+
if (attachment instanceof MessageAttachment) {
10+
this.value = attachment;
11+
return true;
12+
}
13+
14+
return false;
15+
}
16+
17+
resolve(argument: Argument) {
18+
return {
19+
...argument.toJSON(),
20+
type: ArgumentType[argument.type],
21+
attachment: this.value
22+
};
623
}
724
}

src/lib/structures/arguments/base.ts

+7-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { Util } from '../../util/Util';
22
import { Argument, ArgumentType } from '../Argument';
3+
import type { AttachmentType } from './Attachment';
34
import type { BooleanType } from './Boolean';
45
import type { ChannelType } from './Channel';
56
import type { IntegerType } from './Integer';
@@ -9,7 +10,7 @@ import type { RoleType } from './Role';
910
import type { StringType } from './String';
1011
import type { UserType } from './User';
1112

12-
export type MessageArgumentTypes = BooleanType | ChannelType | IntegerType | MentionableType | NumberType | RoleType | StringType | UserType;
13+
export type MessageArgumentTypes = BooleanType | ChannelType | IntegerType | MentionableType | NumberType | RoleType | StringType | UserType | AttachmentType;
1314

1415
export class MessageArgumentTypeBase {
1516
// eslint-disable-next-line @typescript-eslint/no-unused-vars
@@ -57,6 +58,11 @@ export class MessageArgumentTypeBase {
5758
const { UserType } = await import('./User');
5859
return new UserType();
5960
}
61+
// @ts-expect-error TODO: Use ArgumentType.ATTACHMENT | Need wait for https://github.com/Garlic-Team/gcommands/pull/314 to be merged (:
62+
case 11: {
63+
const { AttachmentType } = await import('./Attachment');
64+
return new AttachmentType();
65+
}
6066
}
6167
}
6268
}

src/listeners/AutocompleteHandler.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { Listener } from '../lib/structures/Listener';
22
import type { Interaction } from 'discord.js';
33
import { Handlers } from '../lib/managers/HandlerManager';
4-
import { Logger } from './logger/Logger';;
4+
import { Logger } from '../lib/util/logger/Logger';
55

66
new Listener({
77
event: 'interactionCreate',

src/listeners/ComponentHandler.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { Listener } from '../lib/structures/Listener';
22
import type { Interaction } from 'discord.js';
33
import { Handlers } from '../lib/managers/HandlerManager';
4-
import { Logger } from './logger/Logger';;
4+
import { Logger } from '../lib/util/logger/Logger';
55

66
new Listener({
77
event: 'interactionCreate',

src/listeners/InteractionCommandHandler.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { Listener } from '../lib/structures/Listener';
22
import type { Interaction } from 'discord.js';
33
import { Handlers } from '../lib/managers/HandlerManager';
4-
import { Logger } from './logger/Logger';;
4+
import { Logger } from '../lib/util/logger/Logger';
55

66
new Listener({
77
event: 'interactionCreate',

src/listeners/MessageCommandHandler.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { Listener } from '../lib/structures/Listener';
22
import type { GClient } from '../lib/GClient';
33
import type { Message } from 'discord.js';
44
import { Handlers } from '../lib/managers/HandlerManager';
5-
import { Logger } from './logger/Logger';;
5+
import { Logger } from '../lib/util/logger/Logger';
66

77
new Listener({
88
event: 'messageCreate',

src/listeners/Ready.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { Listener } from '../lib/structures/Listener';
22
import type { GClient } from '../lib/GClient';
33
import type { Client } from 'discord.js';
44
import { sync } from '../lib/util/sync';
5-
import { Logger } from './logger/Logger';;
5+
import { Logger } from '../lib/util/logger/Logger';
66

77
new Listener({
88
event: 'ready',

0 commit comments

Comments
 (0)