PagerMaid-Modify/DEVELOPMENT.md
2020-02-19 23:31:39 +08:00

78 lines
3.8 KiB
Markdown

# Plugin Development
PagerMaid has a powerful plugin system, which enables convenient debugging of code sharing. This document explains
how to use the PagerMaid framework to develop your own PagerMaid plugin, and share code you have written for the
platform.
## Plugin Manager
The plugin manager is a utility to help you manage and share plugins installed to your PagerMaid instance.
### Install
To install a plugin, issue the plugin command replying to a message containing the plugin in it's attachments, with the
install argument. PagerMaid will download and validate the plugin, and restart after it is installed.
### Remove
To remove a plugin, issue the plugin command with the remove argument, and append the plugin name after the argument,
PagerMaid will look for the plugin and if present, remove it and restart.
### Enable
To enable a disabled plugin, issue the plugin command with the enable argument, and append the plugin name after the
argument, PagerMaid will look for the plugin and if present and disabled, enable it and restart.
### Disable
To disable an enabled plugin, issue the plugin command with the disable argument, and append the plugin name after the
argument, PagerMaid will look for the plugin and if present and enabled, disable it and restart.
### Upload
To upload a plugin, issue the plugin command with the upload argument, and append the plugin name after the argument,
PagerMaid will look for the plugin and if present, upload it to the current chat.
### Status
To view the status of plugins, issue the plugin command with the status argument, active plugins refer to plugins that
are enabled and loaded, failed plugins refer to plugins that are enabled but failed to load, disabled plugins refer to
plugins that are disabled.
## Event Listener
The most important part of a plugin is the event listener, which is how commands are implemented. To register an event
listener, import listener from pagermaid.listener and use the listener annotation on an async class.
```python
""" Plugin description. """
from pagermaid.listener import listener
@listener(outgoing=True, command="command", diagnostics=False, ignore_edited=False,
description="My PagerMaid plugin command.",
parameters="<name>")
async def command(context):
await context.edit(f"Hello, World! Welcome, {context.parameter[0]}.")
```
The outgoing variable specifies if the message has to be sent by the user, if it is set to False the event listener
will be invoked on every single message event.
The command variable specifies the command used to trigger the event listener, which will insert the arguments of the
command to context.pattern_match.group(1).
The pattern variable specifies a regex pattern that overrides the command to be used to trigger the event listener. Case
insensitivity is implemented within the listener.
The diagnostics variable specifies if exceptions of the event listener is handled by the diagnostics module which sends
the error report to Kat, defaults to True, you should disable it if you are using exceptions to trigger events.
The ignore_edited variable specifies if the event listener will be triggered by an edit of a message, defaults to False.
The description variable specifies the description that will appear in the help message.
the parameters variable specifies the parameters indicator that will appear in the help message.
## Logging
The PagerMaid framework includes two sets of logging: console and in-chat logging. In-Chat logging respects the
configuration file. To use logging, import log from the pagermaid class.
```python
from pagermaid import log
await log("This is a log message!")
```
The logging handler will output an entry to the console, and, if configured, will send a message into the logging
channel the user specified. Beware that log() is a coroutine object, so please do not forget to await it.