Difference between revisions of "Script:Command Shell"
From Roll20 Wiki
(→Changelog) |
|||
Line 9: | Line 9: | ||
It is recommended that this script be used in conjunction with the [[Script:IsGM Auth Module|IsGM Auth Module]], which will improve detection of messages coming from the GM. In the absence of that module, a player will only be detected as GM when sending chat as their player name (i.e. not speaking as a character). | It is recommended that this script be used in conjunction with the [[Script:IsGM Auth Module|IsGM Auth Module]], which will improve detection of messages coming from the GM. In the absence of that module, a player will only be detected as GM when sending chat as their player name (i.e. not speaking as a character). | ||
− | === | + | === Syntax === |
− | + | By default, commands may only be executed by a GM. The <code>!shell-permission</code> command is provided to set permissions to allow or deny execution by other players, while the <code>!help</code> command may be used to list all available commands. By default, the <code>!help</code> command has world-execute permission, but that permission can be revoked like any other command. | |
− | + | {{syntaxbox top|CommandShell|formal=true}} | |
− | + | {{API command|shell-permission}} {{API parameter|name=action}} {{API parameter|name=command name}} {{API parameter|name=player|optional=true}}<br> | |
− | + | {{API command|help}} | |
− | + | {{Formal API command| | |
− | + | {{token|S}} {{rarr}} {{API command|shell-permission}} {{token|action}} {{token|command}} {{token|player|-}} | |
− | + | {{token|S}} {{rarr}} {{API command|help}} | |
− | + | {{token|action}} {{rarr}} add<br> | |
− | + | {{token|action}} {{rarr}} remove<br> | |
− | | | + | {{token|command}} {{rarr}} {{string|-}} |
− | | | + | {{token|player}} {{rarr}} {{epsilon}} |
− | | | + | {{token|player}} {{rarr}} {{string}} |
− | | | + | }} |
− | | | + | {{syntaxbox end}} |
− | | | + | |
− | |} | + | |
− | + | {{param description top}} | |
+ | {{param description|name=action|value=Valid values are <code>add</code> and <code>remove</code>. This will add or remove permission for a specified player (or all players, if no player is specified) to use the given command. World-execute permission is stored separately from player-specific permission, so if world-execute permision is revoked, any player-specific permissions will remain.}} | ||
+ | {{param description|name=command name|value=The name of the command to alter permissions for. The command given must be registered to the shell. (See below)}} | ||
+ | {{param description|name=player|value=Optional. If set, the permission for the given player will be added or removed for the given command. If omitted, world-execute permission will be changed instead.}} | ||
+ | {{param description bottom}} | ||
− | === | + | === Registering Commands === |
− | + | Each usable command in a script needs to be registered in code somewhere. Commands may also be unregistered. | |
− | {{syntaxbox top| | + | |
− | + | Registered commands can be executed by name (e.g. <code>!mycommand</code>). If a user attempts to execute a command for which they lack permission, they will receive an error message and execution will fail. | |
+ | {{syntaxbox top|nocat=true}} | ||
+ | Shell.registerCommand(''command'', ''signature'', ''description'', ''callback'')<br> | ||
+ | Shell.unregisterCommand(''command'') | ||
{{syntaxbox end}} | {{syntaxbox end}} | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | === | + | ==== Parameters ==== |
− | + | ; command | |
− | + | : The command name. Multiple commands of the same name may not be registered. Scripts may include or omit the leading exclamation mark; the shell will handle its requirement automatically. | |
− | + | ; signature | |
+ | : Example syntax of the command (e.g. <code>"!mycommand [some arguments]"</code>). This will be used in the automatically-generated help output. | ||
+ | ; description | ||
+ | : A more detailed description of the command and how to use it. This will be used in the automatically-generated help output. | ||
+ | ; callback | ||
+ | : The function which will be called whenever the command is invoked by a user with appropriate permission. The function should accept an array of the command arguments (e.g. <code>["!mycommand", "foo", "bar"]</code>) and the original command string (e.g. <code>"!mycommand foo bar"</code>). | ||
=== Utility Functions === | === Utility Functions === | ||
− | + | Several utility functions are also made available by the shell. | |
− | + | {{syntaxbox top|nocat=true}} | |
− | + | Shell.write(''message''[, ''to''[, ''style''[, ''from'']]])<br> | |
− | + | Shell.rawWrite(''message''[, ''to''[, ''style''[, ''from'']]])<br> | |
− | + | Shell.writeAndLog(''message''[, ''to''])<br> | |
− | + | Shell.writeErr(''message'')<br> | |
− | + | Shell.tokenize(''message'') | |
− | + | {{syntaxbox end}} | |
− | + | ||
− | + | * <code>write</code> sends ''message'' to the chat, preserving whitespace and angle brackets. | |
− | + | * <code>rawWrite</code> sends ''message'' to the chat without preserving any special characters. Useful for writing HTML directly to the chat. | |
+ | * <code>writeAndLog</code> is equivalent to <code>write</code> while additionally logging ''message'' to the console. | ||
+ | * <code>writeErr</code> is equivalent to <code>writeAndLog(message, 'gm')</code> | ||
+ | * <code>tokenize</code> splits the given string around whitespace; quotes within the ''message'' may be used to preserve the whitespace. Useful for splitting an input message into command arguments. | ||
+ | |||
+ | ==== Parameters ==== | ||
+ | ; message | ||
+ | : A message to output or parse | ||
+ | ; to | ||
+ | : Player or character to send ''message'' to. If not specified, the message will be visible to everyone. | ||
+ | ; style | ||
+ | : Inline CSS to include in the <div> that wraps the message. | ||
+ | ; from | ||
+ | : Used as first argument to <code>sendChat</code>. If not specified, the name "Shell" will be used instead. | ||
=== Changelog === | === Changelog === | ||
{{changelog version|1.0|2015-01-07|* Release}} | {{changelog version|1.0|2015-01-07|* Release}} |
Revision as of 20:22, 13 January 2015
Version: 1.0
Last Modified: 2015-01-07
Code: CommandShell
Dependencies: None
Conflicts: None
CommandShell is a framework for chat commands, intended to ease their processing and avoid command name collisions. CommandShell provides a central system for registering commands and marshalling chat commands to the appropriate callback, POSIX-style argument parsing, access control, and simple output functions.
It is recommended that this script be used in conjunction with the IsGM Auth Module, which will improve detection of messages coming from the GM. In the absence of that module, a player will only be detected as GM when sending chat as their player name (i.e. not speaking as a character).
Contents |
Syntax
By default, commands may only be executed by a GM. The !shell-permission
command is provided to set permissions to allow or deny execution by other players, while the !help
command may be used to list all available commands. By default, the !help
command has world-execute permission, but that permission can be revoked like any other command.
!shell-permission <action> <command name> [player]
!helpFormally:
S
→ !shell-permissionaction
command
player
S
→ !help
action
→ add
action
→ remove
command
→ string
player
→ ε
player
→ string
Parameter | Values |
---|---|
action | Valid values are add and remove . This will add or remove permission for a specified player (or all players, if no player is specified) to use the given command. World-execute permission is stored separately from player-specific permission, so if world-execute permision is revoked, any player-specific permissions will remain.
|
command name | The name of the command to alter permissions for. The command given must be registered to the shell. (See below) |
player | Optional. If set, the permission for the given player will be added or removed for the given command. If omitted, world-execute permission will be changed instead. |
Registering Commands
Each usable command in a script needs to be registered in code somewhere. Commands may also be unregistered.
Registered commands can be executed by name (e.g. !mycommand
). If a user attempts to execute a command for which they lack permission, they will receive an error message and execution will fail.
Shell.registerCommand(command, signature, description, callback)
Shell.unregisterCommand(command)
Parameters
- command
- The command name. Multiple commands of the same name may not be registered. Scripts may include or omit the leading exclamation mark; the shell will handle its requirement automatically.
- signature
- Example syntax of the command (e.g.
"!mycommand [some arguments]"
). This will be used in the automatically-generated help output. - description
- A more detailed description of the command and how to use it. This will be used in the automatically-generated help output.
- callback
- The function which will be called whenever the command is invoked by a user with appropriate permission. The function should accept an array of the command arguments (e.g.
["!mycommand", "foo", "bar"]
) and the original command string (e.g."!mycommand foo bar"
).
Utility Functions
Several utility functions are also made available by the shell.
Shell.write(message[, to[, style[, from]]])
Shell.rawWrite(message[, to[, style[, from]]])
Shell.writeAndLog(message[, to])
Shell.writeErr(message)
Shell.tokenize(message)
-
write
sends message to the chat, preserving whitespace and angle brackets. -
rawWrite
sends message to the chat without preserving any special characters. Useful for writing HTML directly to the chat. -
writeAndLog
is equivalent towrite
while additionally logging message to the console. -
writeErr
is equivalent towriteAndLog(message, 'gm')
-
tokenize
splits the given string around whitespace; quotes within the message may be used to preserve the whitespace. Useful for splitting an input message into command arguments.
Parameters
- message
- A message to output or parse
- to
- Player or character to send message to. If not specified, the message will be visible to everyone.
- style
- Inline CSS to include in the <div> that wraps the message.
- from
- Used as first argument to
sendChat
. If not specified, the name "Shell" will be used instead.
Changelog
v1.0 (2015-01-07)
- Release