Bot.ts comes with many built-in type resolvers for common data types like strings, numbers, arrays, and Discord-specific types. However, you might want to add your own custom type resolver for specific use cases.
{% hint style="warning" %} Custom type resolvers are not supported in slash commands. {% endhint %}
A type resolver is responsible for converting raw string input into a specific data type. For example, the built-in "number" resolver converts string inputs like "123" or "1_000" into actual JavaScript numbers.
To add a custom type, you'll need to add a new TypeResolver
to the types
array in src/types.ts
. Here's the basic structure:
new argument.TypeResolver("yourTypeName", {
resolver: async (value) => {
// Your resolver logic here
// If validation fails, throw a TypeResolverError
// Return the resolved value
},
})
Here's an example of how to create a custom type resolver for hex colors:
new argument.TypeResolver("color", {
resolver: async (value) => {
const hexColorRegex = /^#?([0-9A-Fa-f]{6})$/
const match = String(value).match(hexColorRegex)
if (!match) {
throw new argument.TypeResolverError("Invalid hex color", {
expected: ["#FF0000", "FF0000"],
provided: value,
})
}
return `#${match[1].toUpperCase()}`
},
})
Once you've added your type resolver, you can use it in your commands like any other type:
import { Command } from "#core/command"
export default new Command({
name: "setcolor",
description: "Set a color using hex code",
options: [
{
name: "color",
type: "color",
description: "The hex color code",
required: true,
},
],
run: (message) => {
message.reply(`Setting color to ${message.args.color}`)
},
})
When creating a custom type resolver, you should:
- Validate the input thoroughly
- Throw a
TypeResolverError
with a clear message when validation fails - Include examples of valid inputs in the
expected
array - Always include the
provided
value in the error
bot.ts includes several built-in type resolvers that you can use as reference:
- Basic types:
string
,number
,boolean
,regex
,date
,duration
,json
- Array types:
array
,string[]
,number[]
,boolean[]
,date[]
- Discord types:
user
,member
,channel
,role
,emote
,invite
- Command types:
command
,slashCommand
You can find their implementations in src/types.ts
to use as examples for your own custom types.