Extend it without forking it
Plugins are declarative first. A manifest states what the plugin adds and what it
is allowed to touch, and the core does the rest. Install one from a directory, a
ZIP, or a registry you point the server at.
- Slash commands
- Declared in the manifest, routed by the core, answered by the plugin.
- Interface slots
- A plugin can put a control in the message toolbar or a tab in settings, without touching the client.
- Profile fields
- Add fields to a person's profile, with their own read and write endpoints.
- Awards
- Declare the rules; the core enforces them and owns the data and the display.
- Lifecycle hooks
- Run before and after an action, and cancel it outright when that is the right answer.
- Permissions
- Every manifest states what it wants. Anything it did not ask for, it does not get.
plugin.json
{
"id": "com.tulpar.dice",
"name": "Dice Roller",
"type": "slash_command",
"capabilities": {
"slashCommands": [{
"command": "dice",
"usage": "/dice [NdN]"
}],
"uiExtensions": [{
"slot": "message-toolbar",
"icon": "dices",
"label": "Roll dice"
}]
},
"permissions": ["messages.write"]
}
A plugin that ships with the product, unedited.