# command
**Repository Path**: tera-toolbox/command
## Basic Information
- **Project Name**: command
- **Description**: TERA Toolbox core module that provides an ingame chat command interface for network mods.
- **Primary Language**: JavaScript
- **License**: GPL-3.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2022-12-18
- **Last Updated**: 2022-12-19
## Categories & Tags
**Categories**: Uncategorized
**Tags**: tera-proxy, tera-toolbox
## README
Original command module by Pinkie Pie (https://discord.gg/RR9zf85), modified and added auto-updating functionality.
## Usage
Type `/toolbox` or `/8` into chat to switch to the command line, then enter the specified command. To pass strings containing spaces as arguments, enclose them in quotes (`""` or `''`). To enclude quotes or backslashes in arguments, precede them with a backslash `\`.
### Examples
```
/toolbox mymod
```
```
/toolbox mymod dostuff
```
```
/toolbox mymod 123 456 'Hello!'
```
```
/toolbox mymod "This is a string containing 'quotes', \"similar quotes\", and \\backslashes."
```
## Developers
To use Command in your module, you can just use `mod.command`. It is guaranteed to be installed, even if the user attempts to delete it.
### Examples
```js
module.exports = function MyMod(mod) {
mod.command.add('mymod', (x, y, z) => {
mod.command.message('Parameters: ' + [x, y, z].join(', '))
})
}
```
#### Sub-Commands:
```js
module.exports = function SubCommandTest(mod) {
mod.command.add('test', {
$default() { mod.command.message('Usage: test [echo|hello]') },
echo(...args) {
if(args[0] === undefined) mod.command.message('Usage: test echo [msg]')
else mod.command.message(args.join(' '))
},
hello: {
$default() { mod.command.message('Usage: test hello [blue|red]') },
blue() { mod.command.message('Hello!') },
red() { mod.command.message('Hello!') }
}
})
}
```
## Command
### Methods
#### `add(command, callback[, context])`
Adds one or more command hooks. All commands must be unique and are case insensitive.
`command` may be a string or an array of strings.
`callback` may be a function or an object. Callback receives a variable number of input string arguments. If an object is provided, the object's keys are registered as sub-commands which may in turn be either a callback or another object. Two special keys are usable for sub-commands:
* `$none` called if there were no arguments.
* `$default` called if no other hook was matched.
`context` optional `this` to pass to callbacks. Default is unspecified.
#### `remove(command)`
Removes one or more command hooks.
`command` may be a string or an array of strings.
#### `message(msg)`
Sends a message in the `[Toolbox]` channel. May contain HTML.
#### `exec(str)`
Executes a raw command string. If `str` is an array then it will be interpreted as arguments instead.
Returns `true` on command found, `false` otherwise. May throw an exception if the callback contains an error.