Update documentation: start adding Plugins; add Plang

This commit is contained in:
Pragmatic Software 2020-07-23 12:10:33 -07:00
parent 2f1d13ba74
commit 4998e9494e
4 changed files with 118 additions and 0 deletions

View File

@ -17,6 +17,7 @@ PBot is a versatile IRC Bot written in Perl
* [Selectors](#selectors) * [Selectors](#selectors)
* [Inline invocation](#inline-invocation) * [Inline invocation](#inline-invocation)
* [Background processing](#background-processing) * [Background processing](#background-processing)
* [Scripting interface](#scripting-interface)
* [Extensible](#extensible) * [Extensible](#extensible)
* [Factoids](#factoids) * [Factoids](#factoids)
* [Code Factoids](#code-factoids) * [Code Factoids](#code-factoids)
@ -186,6 +187,13 @@ The familiar [`ps`](doc/Admin.md#ps) and [`kill`](doc/Admin.md#kill) commands ca
You can also [`cmdset`](doc/Admin.md#cmdset) the `process-timeout` [command metadata](doc/Admin.md#command-metadata-list) to set the timeout, in seconds, before the command is automatically killed. Otherwise the `processmanager.default_timeout` [registry value](doc/Registry.md) will be used. You can also [`cmdset`](doc/Admin.md#cmdset) the `process-timeout` [command metadata](doc/Admin.md#command-metadata-list) to set the timeout, in seconds, before the command is automatically killed. Otherwise the `processmanager.default_timeout` [registry value](doc/Registry.md) will be used.
### Scripting interface
PBot uses [Plang](https://github.com/pragma-/Plang) as a scripting language. You can use the
scripting language to construct advanced commands that are capable of interacting with PBot
internal API functions.
[Learn more.](doc/Plugins/Plang.md)
### Extensible ### Extensible
PBot is extensible in multiple ways. Additional commands and functionality can be added to PBot through PBot is extensible in multiple ways. Additional commands and functionality can be added to PBot through
[Factoids](#factoids), [Plugins](#plugins), [Modules](#modules) and [Functions](#functions). [Factoids](#factoids), [Plugins](#plugins), [Modules](#modules) and [Functions](#functions).

20
doc/Plugins.md Normal file
View File

@ -0,0 +1,20 @@
# Plugins
<!-- md-toc-begin -->
* [About](#about)
* [PBot Plugins](#pbot-plugins)
<!-- md-toc-end -->
## About
A Plugin is an independent unit of PBot code that can be loaded and unloaded at will.
Plugins have full access to PBot internal APIs and state.
### PBot Plugins
These are the Plugins that come with PBot. Click a Plugin to learn more about it.
Plugin | Description
--- | ---
[Plang](Plugins/Plang.md) | Scripting interface to PBot
[Quotegrabs](Plugins/Quotegrabs.md) | Grabs and stores user messages for posterity.
Note that this list is probably incomplete. For the complete list of Plugins, see [the Plugins directory.](../Plugins/)

90
doc/Plugins/Plang.md Normal file
View File

@ -0,0 +1,90 @@
# Plang
<!-- md-toc-begin -->
* [About](#about)
* [The Plang Language](#the-plang-language)
* [PBot `plang` and `plangrepl` commands](#pbot-plang-and-plangrepl-commands)
* [`plang`](#plang-1)
* [`plangrepl`](#plangrepl)
* [PBot built-in Plang functions](#pbot-built-in-plang-functions)
* [factget](#factget)
* [factset](#factset)
* [factappend](#factappend)
* [userget](#userget)
<!-- md-toc-end -->
## About
This Plang plugin provides a scripting interface to PBot. It has access to PBot
internal APIs and state.
### The Plang Language
The scripting language is [Plang](https://github.com/pragma-/Plang). It was
written specifically for PBot, but is powerful enough to be used as a general-purpose
scripting language embedded into any Perl application.
This document describes PBot's Plang plugin. To learn how to use the Plang scripting
language, see the [Plang documentation](https://github.com/pragma-/Plang/README.md).
### PBot `plang` and `plangrepl` commands
#### `plang`
Use the `plang` command to run a Plang script.
Usage: `plang <code>`
#### `plangrepl`
The `plangrepl` command is identical to the `plang` command, except the environment
is preserved in-between commands and the types of values is output along with the value.
### PBot built-in Plang functions
[Plang](https://github.com/pragma-/Plang) lets you add custom built-in functions. We
have added several for PBot. They are described here.
#### factget
factget(channel, keyword, meta = "action")
Use the `factget` function to retrieve metadata from factoids.
The `factget` function takes three paramaters: `channel`, `keyword` and `meta`. The `meta`
parameter can be omitted and will default to `"action"`.
The `factget` function returns a `String` containing the value of the factoid metadata key.
#### factset
factset(channel, keyword, text)
Use the `factset` function to set the `action` metadata value for factoids.
The `factset` function takes three parameters: `channel`, `keyword` and `text`.
The `factset` function returns a `String` containing the value of `text`.
#### factappend
factappend(channel, keyword, text)
Use the `factappend` function to append text to the `action` metadata for factoids.
The `factappend` function takes three parameters: `channel`, `keyword` and `text`.
The `factappend` function returns a `String` containing the value of factoid's `action`
metadata with `text` appended.
#### userget
userget(name)
Use the `userget` function to retrieve user metadata.
The `userget` function takes one parameter: `name`.
The `userget` function returns a `Map` containing all the metadata of the user, or
`nil` if there is no user matching `name`.
See the [Plang Map documentation](https://github.com/pragma-/Plang#map) for a refresher on using Plang maps.
Examples:
<pragma-> !plang userget('pragma-')
<PBot> { channels: "global", hostmasks: "*!*\@unaffiliated/pragmatic-chaos", botowner: 1 }
<pragma-> !plang userget('pragma-')['botowner']
<PBot> 1