hemppa/README.md

2.9 KiB

Hemppa - generic modular Matrix bot

This bot is meant to be super easy platform to code Matrix bot functionality with Python. It uses matrix-nio library https://github.com/poljar/matrix-nio/ .

Type !help in room with this bot running to list active modules.

Module list

Help

Prints help on existing modules.

Echo

Simple example module that just echoes what user said.

Metar

Aviation weather metar service access.

TAF

Aviation weather TAF service access.

Uptime

Prints bot uptime.

Google Calendar (WIP)

Displays changes and daily report of a google calendar to a room. This is a bit pain to set up, sorry.

To set up, you'll need to generate credentials.json file - see https://console.developers.google.com/apis/credentials

When credentials.json is present, you must authenticate the bot to access calendar. There will be a link in console like this:

Please visit this URL to authorize this application: https://accounts.google.com/o/oauth2/auth?response_type=code&client_id=907....

Open the link and authenticate as needed. A new file token.pickle will be created in the directory and bot will read it in future.

Now the bot should be usable.

Use !googlecal add [calendar id] to add new calendar to a room. The bot lists availble calendar ID's on startup and you can find them in google calendar.

Commands:

  • !googlecal - Show next 10 events in calendar
  • !googlecal today - Show today's events
  • !googlecal add [calendar id] - Add new calendar to room
  • !googlecal calendars - List calendars in this room

Bot setup

  • Create a Matrix user
  • Get user's access token - In Riot Web see Settings / Help & about

Running on host

Run something like:

pip3 install pipenv
pipenv shell
pipenv install
MATRIX_USER="@user:matrix.org" MATRIX_ACCESS_TOKEN="MDAxOGxvYlotofcharacters53CgYAYFgo" MATRIX_SERVER="https://matrix.org" JOIN_ON_INVITE=True python3 bot.py

Running with Docker

Create .env file and set variables:

MATRIX_USER=@user:matrix.org
MATRIX_ACCESS_TOKEN=MDAxOGxvYlotofcharacters53CgYAYFgo
MATRIX_SERVER=https://matrix.org
JOIN_ON_INVITE=True

Note: without quotes!

Just run:

docker-compose up

Env variables

User, access token and server should be self-explanatory. Set JOIN_ON_INVITE to anything if you want the bot to join invites automatically.

You can set MATRIX_PASSWORD if you want to get access token. Normally you can use Riot to get it.

Module API

Just write a python file with desired command name and place it in modules. See current modules for examples. No need to register it anywhere else.

Functions:

  • matrix_start - Called once on startup
  • async matrix_message - Called when a message is sent to room starting with !module_name
  • matrix_stop - Called once before exit
  • async matrix_poll - Called every 10 seconds
  • help - Return one-liner help text

You only need to implement the ones you need. See existing bots for examples