HCoop Meetbot Plugin¶
Release v0.6.12+5.be1bc13
hcoop-meetbot is a plugin for Limnoria, a bot framework for IRC. It is designed to help run meetings on IRC. It was originally written for quarterly board meetings at HCoop, when Ken was on the board there.
The code is based in part on the MeetBot plugin for Supybot written by Richard Darst. Supybot is the predecessor to Limnoria. Richard’s MeetBot was “inspired by the original MeetBot, by Holger Levsen, which was itself a derivative of Mootbot by the Ubuntu Scribes team”. So, this code has a relatively long history. For this version, much of the plugin was rewritten using Python 3, but it generally follows the pattern set by Richard’s original code.
Developer Documentation¶
Running a Meeting¶
If the plugin is already installed in your IRC channel, running a meeting is easy. Meeting commands all start with #
, and
are mostly compatible with the original MeetBot.
Note: Not all commands give feedback, and you won’t be warned about invalid commands unless a meeting is active.
Basic Meeting¶
You can run a basic meeting with just these few commands.
Command |
Who? |
Description |
---|---|---|
|
Anyone |
Start a new meeting. The user who starts the meeting becomes its chair. |
|
Chair |
End the active meeting. Writes log and minutes to the configured log directory. |
|
Chair |
Set a new discussion topic like |
|
Chair |
Document an agreement in the minutes, like |
Attendance¶
You can optionally document attendance using these commands.
Command |
Who? |
Description |
---|---|---|
|
Anyone |
Document attendance and optionally associate an IRC nickname to an alias. If IRC nick |
|
Chair |
Identify an IRC nickname for a user who hasn’t spoken, so they can be assigned actions, like
|
Note: When generating the minutes, nicks and aliases are always matched case-insensitively, as in IRC itself.
Agreement and Disagrement¶
You can document agreement and disagreement using these commands.
Command |
Who? |
Description |
---|---|---|
|
Chair |
Document an agreement in the minutes, like |
|
Chair |
Document disagreement in the minutes, like |
|
Chair |
Document a decision that could not be made, like |
Formal Voting¶
If you are running a formal meeting, you can document a motion and take votes using these commands.
Command |
Who? |
Description |
---|---|---|
|
Chair |
Indicate that a motion has been made, like |
|
Anyone |
Vote in favor of or against the motion, like |
|
Chair |
Close voting on the open motion, and report voting results. |
Important Information¶
Anyone can use these commands to log important information in the minutes.
Command |
Who? |
Description |
---|---|---|
|
Anyone |
Log important information in the minutes, like |
|
Anyone |
Document an action, like |
|
Anyone |
Add an idea to the minutes, like |
|
Anyone |
Add a call for help into the minutes. Use this command when you need to recruit someone to do a task. (Counter-intuitively, this does not not provide help for how to use the bot.) |
|
Anyone |
Add a link to the meeting minutes. Additionally, certain common URL patterns are auto-detected
even if you do not use |
Note: When you document an action with #action
, the bot will try to
identify any nick or alias associated with that action, so it can be listed in
the Action Items by Attendee section of the minutes. This works for any
nick or alias identified with #here
or #nick
, but only if the nick or
alias can be identified unambiguously in the action text — either
surrounded by whitespace or found at the very start or end of the text. There
are also some special cases for common constructs like parenthesis and colons.
To avoid confusion, it’s best to make your action text as simple and as clear
as possible. Remember that nicks and aliases are matched case-insensitively, as
in IRC itself.
Administrative Commands¶
A meeting chair may run a variety of administrative commands.
Command |
Who? |
Description |
---|---|---|
|
Chair |
By default, the meeting name is set to the channel name. Use |
|
Chair |
Add an IRC nickname to the list of meeting chairs. |
|
Chair |
Remove an IRC nickname from the list of meeting chairs. |
|
Chair |
Remove the most recent event (such as |
|
Chair |
Save the meeting to disk in its current state, without calling |
Using the Plugin¶
The plugin is distributed as a PyPI package. This mechanism makes it very easy to install the plugin, but prevents us from using the standard Limnoria configuration mechanism. This is because the supybot-wizard
command is not aware of the HcoopMeetbot
plugin. Instead, you have to create a small .conf
file on disk to configure the plugin.
Install and Configure Limnoria¶
First, install Limnoria following the instructions. There are also more details under getting-started.
Choose a directory and run supybot-wizard
to initialize a bot called meetbot
. Make sure to select y
for the the question Would you like to add an owner user for your bot? You will need to identify yourself to the bot to install the plugin.
Install and Configure HcoopMeetbot¶
Install the package from PyPI:
$ pip install hcoop-meetbot
Make sure to use pip
(or pip3
) for the same Python 3 installation that runs Limnoria, otherwise Limnoria won’t be able to find the package.
Next, add configuration. Create a file HcoopMeetbot.conf
in the conf
directory for your Limnoria bot. Fill four values into the file:
[HcoopMeetbot]
logDir = /home/myuser/meetings
urlPrefix = https://example.com/meetings
pattern = %Y/{name}.%Y%m%d.%H%M
timezone = UTC
If you skip this step and don’t create a config file, the plugin will try to use sensible defaults as shown below.
Parameter |
Default Value |
Description |
---|---|---|
|
|
Absolute path where meeting logs will be written on disk. |
|
|
URL prefix to place on generated links to logfiles that are reported when the meeting ends. This can be a simple path, but it is more useful if you set it to the base URL where the files will be served from, so participants see the entire public URL. |
|
|
Pattern for files generated in |
|
|
The timezone to use for files names and in generated content.
May be any standard IANA value, like |
|
|
Whether the bot should use the channel topic. If set to |
|
|
The output format to use. Optional. Currently, the only allowed value
is |
Run the Bot¶
Start Limnoria (for instance with supybot ./meetbot.conf
) and ensure that it connects to your IRC server.
Open a query to talk privately with the bot, using /q meetbot
. Identify yourself to the bot with identify <user> <password>
, using the username and password you configured above via supybot-wizard
- or use some other mechanism to identify yourself. At this point, you have the rights to make adminstrative changes in the bot.
Install the plugin using load HcoopMeetbot
. You should see a response The operation succeeded.
At this point, you can use the meetversion
command to confirm which version of the plugin you are using and list HcoopMeetbot
to see information about available commands:
(localhost)
02:22 -!- Irssi: Starting query in localhost with meetbot
02:22 <ken> identify ken thesecret
02:22 -meetbot(limnoria@127.0.0.1)- The operation succeeded.
02:22 <ken> load HcoopMeetbot
02:22 -meetbot(limnoria@127.0.0.1)- The operation succeeded.
02:22 <ken> meetversion
02:22 -meetbot(limnoria@127.0.0.1)- HcoopMeetbot v0.1.0 (17 Mar 2021)
02:22 <ken> list HcoopMeetbot
02:22 -meetbot(limnoria@127.0.0.1)- addchair, deletemeeting, listmeetings, meetversion, recent, and savemeetings
[02:22] [ken(+i)] [2:localhost/meetbot]
[meetbot]
Then you can join any channel that the Limnoria bot is configured to join, and start using the plugin immediately.
Later, if you update the plugin (pip install --upgrade
), you can either stop and start the bot process, or use @reload HcoopMeetbot
from within IRC. You may need to identify yourself to Limnoria before doing this.
Administrator Features¶
The administrator who owns the Limnoria bot has access to some additional features and can manage meetings across multiple channels. These commands are invoked in the traditional way, either by addressing the bot by its name or using the command prefix you configured when setting up the bot (often @
). These commands work in any channel the bot has joined, and do not require a meeting to be active.
Command |
Description |
---|---|
|
List all of the legal meeting commands ( |
|
Reply with the version of the bot that is running. |
|
List all of the active meetings in all channels. |
|
List all of the recently-completed meetings in all channels. |
|
Save all currently active meetings, like a chair calling |
|
Add an IRC nickname to the list of chairs for a meeting in a channel, like |
|
Delete a meeting, moving it out of active state without actually ending it, like
|
Command Line Tool¶
The Python package ships with a command line tool named meetbot
. This tool
implements utilities to be used outside of IRC:
$ meetbot --help
Usage: meetbot [OPTIONS] COMMAND [ARGS]...
Meetbot command line utilities.
Options:
--version Show the version and exit.
-h, --help Show this message and exit.
Commands:
regenerate Regenerate formatted output based on a raw log file.
Currently, the only utility available is regenerate
:
$ meetbot regenerate --help
Usage: meetbot regenerate [OPTIONS]
Regenerate formatted output based on a raw log file.
This parses a raw meeting log and regenerates formatted output into the
specified output directory. By default, the output directory is the current
working directory, but you can adjust that using the --output-dir switch.
The formatted output will be generated based on the rules in the meetbot
configuration file, which controls the output format, date format, time
zone, etc. Configuration for the file prefix is ignored and the new files
will be generated using the exact same prefix as the raw log file itself.
Options:
-c, --config <config> Path to config file or dir [required]
-r, --raw-log <raw-log> Path to the raw JSON log [required]
-d, --output-dir <output-dir> Where to write output, defaults to .
-h, --help Show this message and exit.
You can use this as an error-recovery tool (if for some reason the bot crashes when generating formatted output) or as a way to take advantage of new features in the bot (for instance, if output has been improved or there is a new output format).
Note: This utility only works for meetings that were run using v0.6.0 or later of the plugin, since earlier versions do not generate the raw JSON meeting log that is used as input.