https://github.com/eguven/slack-machine-plugins
Utility plugins for Slack-Machine, the sexy, simple, yet powerful and extendable Slack bot
https://github.com/eguven/slack-machine-plugins
Last synced: about 1 year ago
JSON representation
Utility plugins for Slack-Machine, the sexy, simple, yet powerful and extendable Slack bot
- Host: GitHub
- URL: https://github.com/eguven/slack-machine-plugins
- Owner: eguven
- License: mit
- Created: 2021-02-21T23:55:07.000Z (over 5 years ago)
- Default Branch: master
- Last Pushed: 2021-02-22T01:18:10.000Z (over 5 years ago)
- Last Synced: 2024-11-13T04:46:51.741Z (over 1 year ago)
- Language: Python
- Size: 9.77 KB
- Stars: 3
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# slack-machine-plugins
Utility plugins for Slack-Machine, the sexy, simple, yet powerful and extendable Slack bot.
```shell
pip install slack-machine-plugins
```
## commander
Commander provides two classes ``Command`` and ``CommandArgument`` for a declarative way to define chat commands and their arguments for input validation and error feedback for the user. Features include:
* Type and length validation for chat command arguments.
* Strict choices.
* Custom validation and error messages.
* Usage and error texts for user feedback.
### Example Usage
Taken from test case, realistic example.
```python
# command definition
####################
from machine_plugins.commander import Command, CommandArgument
scale_cmd = Command(
name='scale',
description='Scale a deployment.',
arguments=[
CommandArgument(
name='namespace',
target_type=str,
choices=['default', 'dev'],
description='Namespace of the deployment.',
),
CommandArgument(
name='deployment',
validation=(lambda d: d.startswith('deployment-prefix-'),),
description='Name of the deployment.',
),
CommandArgument(
name='replicas',
target_type=int,
validation=(lambda r: 2 <= int(r) <= 10, 'You can not scale under 2 or above 10 replicas.'),
),
],
)
# command usage in slack-machine
################################
from machine.plugins.base import MachineBasePlugin
from machine.plugins.decorators import respond_to
class DeploymentPlugin(MachineBasePlugin):
@respond_to(regex=r'^scale ?(?P.*)$')
def scale(self, msg, args):
errs = scale_cmd.errors(args)
if errs:
resp = '\n'.join(errs)
msg.say(f'```{resp}```')
return
# input validation complete, do your thing e.g `scale(*args.split())`
```