- Go 73.3%
- TypeScript 13.9%
- Makefile 10.1%
- JavaScript 2.7%
Add early validation in OnConfigurationChange to verify the configured channel exists in Mattermost and the Shelfmark server is reachable, giving admins immediate feedback instead of discovering issues at runtime. - Add Ping() method to shelfmark.Client for lightweight reachability check - Add validateConfiguration() on Plugin that checks channel + Shelfmark - Add i18n messages for channel not found and Shelfmark unreachable - Add unit tests for Ping and validateConfiguration Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> |
||
|---|---|---|
| .github/workflows | ||
| assets | ||
| build | ||
| public | ||
| server | ||
| webapp | ||
| .editorconfig | ||
| .gitattributes | ||
| .gitignore | ||
| .gitpod.yml | ||
| .golangci.yml | ||
| .nvmrc | ||
| .woodpecker.yml | ||
| CLAUDE.md | ||
| go.mod | ||
| go.sum | ||
| LICENSE | ||
| Makefile | ||
| plugin.json | ||
| README.md | ||
Mattermost Plugin Shelfmark
A Mattermost plugin that integrates with Shelfmark to let users search and request books directly from Mattermost using the /requestbook slash command. Requested books are automatically downloaded and posted to a designated channel.
Features
- Book search -- Search by title, author, or ISBN via
/requestbook <query> - Language filtering -- Specify a preferred language with
--language <code>(e.g.,--language es), with a configurable default - Automatic downloads -- Background processing handles the full lifecycle: search, queue, download, and post
- Channel posting -- Books are posted with cover art to a configured channel, with the file attached as a reply
- User notifications -- Requestors receive DM updates on download progress and completion
- Localization -- User-facing messages available in English and Spanish, with locale-aware delivery
- Customizable posts -- Post format is configurable via Go
text/templatesyntax
Usage
/requestbook [--language <code>] <search query>
Examples:
/requestbook The Hitchhiker's Guide to the Galaxy
/requestbook --language es El Quijote
/requestbook 978-0-13-468599-1
The plugin will search Shelfmark for the best match, queue a download, and post the result to the configured channel once complete.
Configuration
Configure the plugin in System Console > Plugins > Mattermost Plugin Shelfmark.
| Setting | Description |
|---|---|
| Shelfmark Server URL | Base URL of your Shelfmark instance (e.g., http://shelfmark:8084) |
| Shelfmark Username | Username for Shelfmark authentication (leave empty if auth is disabled) |
| Shelfmark Password | Password for Shelfmark authentication (leave empty if auth is disabled) |
| Channel ID | Mattermost channel ID where book posts will be created |
| Default Language | ISO language code used when --language is not specified (e.g., en, es, fr) |
| Post Template | Go template for book post messages. Variables: {{.Title}}, {{.Authors}}, {{.AuthorsList}} |
Development
Prerequisites
- Go 1.25+
- A running Mattermost server with plugin uploads enabled
Building
make # lint, test, and build
make dist # create distributable plugin bundle
make test # run tests only
make coverage # generate test coverage report
The build produces a plugin bundle at dist/com.fmartingr.shelfmark.tar.gz with support for Linux (amd64/arm64), macOS (amd64/arm64), and Windows (amd64).
Deploying
Enable plugin uploads in your Mattermost config:
{
"PluginSettings": {
"EnableUploads": true
}
}
Then deploy with local mode:
make deploy
Or with credentials:
export MM_SERVICESETTINGS_SITEURL=http://localhost:8065
export MM_ADMIN_TOKEN=<your-token>
make deploy
Releasing
make patch # patch release (e.g., 1.0.1)
make minor # minor release (e.g., 1.1.0)
make major # major release (e.g., 2.0.0)
Release candidate variants are also available: make patch-rc, make minor-rc, make major-rc.
The version is determined automatically from git tags. See the Makefile for details.