78 lines
3.8 KiB
Markdown
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.
|