ObjectParameter

This commit is contained in:
mmacierzanka committed 2021-08-08 13:51:44 +02:00
1 parent a8fd1c2ce7
commit 6144f3e577
3 files changed
+45 -1

No files matched your search

+5
View File
@@ -4,6 +4,7 @@ import {
BooleanParameter, BooleanParameter,
InputParameter, InputParameter,
NumberParameter, NumberParameter,
ObjectParameter,
StringParameter, StringParameter,
} from "./Parameter.js"; } from "./Parameter.js";
import { Command } from "./Command.js"; import { Command } from "./Command.js";
@@ -216,6 +217,10 @@ export class CommandManager {
case "channel": case "channel":
case "role": case "role":
case "user": case "user":
parameters.push(
new ObjectParameter(p, inputParam?.value)
);
break;
case "string": case "string":
parameters.push( parameters.push(
new StringParameter(p, inputParam?.value) new StringParameter(p, inputParam?.value)
+25
View File
@@ -1,3 +1,4 @@
import { Guild } from "discord.js";
import { ParameterType, ParameterResolvable, Choice } from "./types.js"; import { ParameterType, ParameterResolvable, Choice } from "./types.js";
export interface ParameterSchema { export interface ParameterSchema {
name: string; name: string;
@@ -72,3 +73,27 @@ export class NumberParameter extends InputParameter {
super(parameter, parseFloat(value ? value.toString() : "")); super(parameter, parseFloat(value ? value.toString() : ""));
} }
} }
export class ObjectParameter extends InputParameter {
constructor(parameter: Parameter, value: ParameterResolvable) {
if (
parameter.type != "channel" &&
parameter.type != "mentionable" &&
parameter.type != "user" &&
parameter.type != "role"
) {
throw new Error(`Parameter type mismatch`);
}
super(parameter, value);
}
async toObject(guild: Guild, type: "channel" | "user" | "role") {
switch (type) {
case "channel":
return await guild.channels.fetch(this.value?.toString() || "");
case "role":
return await guild.roles.fetch(this.value?.toString() || "");
case "user":
return await guild.members.fetch(this.value?.toString() || "");
}
}
}
+15 -1
View File
@@ -1,8 +1,13 @@
import { import {
CategoryChannel,
ClientOptions, ClientOptions,
ColorResolvable, ColorResolvable,
CommandInteraction, CommandInteraction,
GuildMember,
ReplyMessageOptions, ReplyMessageOptions,
Role,
TextChannel,
VoiceChannel,
} from "discord.js"; } from "discord.js";
import { InputParameter, ParameterSchema } from "./Parameter.js"; import { InputParameter, ParameterSchema } from "./Parameter.js";
import { PermissionResolvable, Message, MessageEmbed } from "discord.js"; import { PermissionResolvable, Message, MessageEmbed } from "discord.js";
@@ -66,7 +71,16 @@ export type ParameterType =
| "role" | "role"
| "channel" | "channel"
| "mentionable"; | "mentionable";
export type ParameterResolvable = string | boolean | number | undefined; export type ParameterResolvable =
| string
| boolean
| number
| Role
| GuildMember
| TextChannel
| VoiceChannel
| CategoryChannel
| undefined;
export interface Choice { export interface Choice {
name: string; name: string;
value: string; value: string;