ci/woodpecker/push/test Pipeline was successful
Details
|
||
---|---|---|
.woodpecker | ||
docs | ||
extra | ||
src/poetrybot | ||
tests | ||
.dockerignore | ||
.editorconfig | ||
.flake8 | ||
.gitignore | ||
Dockerfile | ||
LICENSE | ||
README.rst | ||
justfile | ||
poetry.lock | ||
pyproject.toml |
README.rst
poetrybot
poetrybot is a Telegram bot to quote poems between friends. It's written in Python and it is released under the EUPL 1.2 license.
Friends are defined by an allow list in which every account have to
be in order to to use the bot. The management of the bot is provided by
a REST API defined in the subpackage poetrybot.web
.
Installation
Create your bot using Telegram @BotFather.
Install (preferably inside a virtualenv) the bot using:
pip install poetrybot
The bot uses environment variables as configuration, you have to export the following before starting it:
export AUTH_TOKEN=<my secret auth token> export DATABASE_URL=sqlite:////absolute/path/to/poetrybot.db export TELEGRAM_TOKEN=<telegram bot API key>
AUTH_TOKEN
is used to authenticate to the REST API used to manage the bot. Full specification is in thedocs/openapi.yml
file. Just create a long enough random string, for example usingpwgen -sy 50
.Launch the bot:
poetrybot
To use the REST API install a WSGI HTTP Server, for example gunicorn, and then:
gunicorn poetrybot.web.wsgi:app
Use the REST API to insert allowed friends, poets and poems. The fastest way to look at the API is to load the API specification into https://editor.swagger.io
An alternative is to clone the repository and use the provided
Dockerfile
.
Usage
To use the bot you only have to use the /quote
command.
The bot can be added to one or more channels but it's not required. But
remember that only friends in allow list will be able to interact with
the bot.
The /quote
command used without parameters will make the
bot to quote a random poem, but optionally the author and the argument
can be specified:
/quote
returns a random poem;/quote AUTHOR
returns a random poem byAUTHOR
.AUTHOR
is the name or part of the name of the poet case insensitive:/quote Giovanni Pascoli /quote pascoli /quote ascol
will return a random poem by Giovanni Pascoli, if you don't have another poet with ascol inside the name;
/quote AUTHOR about ARGUMENT
returns a random poem byAUTHOR
aboutARGUMENT
.ARGUMENT
is, likeAUTHOR
, case insensitive and can be part of a word.about
is, instead, case sensitive;/quote about ARGUMENT
returns a random poem aboutARGUMENT
.