Files
Yumi/src/utils/DiscordModule.ts
T
2022-06-06 14:59:53 +07:00

137 lines
4.1 KiB
TypeScript

import {
Guild,
Interaction,
Message,
GuildMember,
CommandInteraction,
ButtonInteraction,
TextBasedChannel,
MessageComponentInteraction,
User,
SelectMenuInteraction
} from 'discord.js';
export default class DiscordModule {
public id?: string;
public commands?: string[] | null = null;
public commandInteractionName?: string | null = null;
constructor({
id,
command,
commandInteractionName
}: {
id?: string;
command?: string[] | null;
commandInteractionName?: string | null;
} = {}) {
this.id = id;
this.commands = command;
this.commandInteractionName = commandInteractionName;
}
Init(): void | Promise<void | any> {}
Ready(): void | Promise<void | any> {}
GuildOnCommand(command: string, args: any, message: Message): void | Promise<void | any> {}
GuildOnModuleCommand(args: any, message: Message): void | Promise<void | any> {}
GuildInteractionCreate(interaction: Interaction): void | Promise<void | any> {}
GuildModuleInteractionCreate(interaction: Interaction): void | Promise<void | any> {}
GuildCommandInteractionCreate(interaction: CommandInteraction): void | Promise<void | any> {}
GuildModuleCommandInteractionCreate(
interaction: CommandInteraction
): void | Promise<void | any> {}
GuildSelectMenuInteractionCreate(
interaction: SelectMenuInteraction
): void | Promise<void | any> {}
GuildButtonInteractionCreate(interaction: ButtonInteraction): void | Promise<void | any> {}
GuildCreate(guild: Guild): void | Promise<void | any> {}
GuildMemberAdd(member: GuildMember): void | Promise<void | any> {}
GuildMessageCreate(message: Message): void | Promise<void | any> {}
}
export class HybridInteractionMessage {
public data: Interaction | Message;
constructor(data: Interaction | Message) {
this.data = data;
}
public isInteraction(): boolean {
return this.data instanceof Interaction;
}
public isSlashCommand(): boolean {
return this.data instanceof CommandInteraction && this.data.isCommand();
}
public isButton(): boolean {
return this.data instanceof ButtonInteraction && this.data.isButton();
}
public isSelectMenu(): boolean {
return this.data instanceof SelectMenuInteraction && this.data.isSelectMenu();
}
public isMessage(): boolean {
return this.data instanceof Message;
}
public getChannel(): TextBasedChannel | null {
return this.data.channel;
}
public getGuild(): Guild | null {
return this.data.guild;
}
public getUser(): User | null {
return this.isInteraction() ? this.getInteraction().user : this.getMessage().author;
}
public getMember(): GuildMember | null {
return this.data.member as GuildMember;
}
public getInteraction(): Interaction {
if (this.isMessage()) throw new Error('Unable to cast interaction to message');
return this.data as Interaction;
}
public getSlashCommand(): CommandInteraction {
if (this.isInteraction() && !(this.data as CommandInteraction))
throw new Error('Unable to cast to MessageComponentInteraction');
return this.data as CommandInteraction;
}
public getSelectMenu(): SelectMenuInteraction {
if (this.isInteraction() && !(this.data as SelectMenuInteraction))
throw new Error('Unable to cast to SelectMenuInteraction');
return this.data as SelectMenuInteraction;
}
public getMessageComponentInteraction(): MessageComponentInteraction {
if (this.isInteraction() && !(this.data as MessageComponentInteraction))
throw new Error('Unable to cast to MessageComponentInteraction');
return this.data as MessageComponentInteraction;
}
public getMessage(): Message {
if (this.isInteraction()) throw new Error('Unable to cast message to interaction');
return this.data as Message;
}
public getRaw(): Interaction | Message {
return this.data;
}
}