Skip to main content

A basic bot for Matrix

Project description

python-matrixbot

A Python module meant to act as a base class for a Matrix bot.

Compatibility

Python 3.6+

Installation

pip install python-matrixbot

Usage

The MatrixBot class will connect to the Matrix server, start a listener on each joined room, and listen for room invites from other users. It also includes helper methods you can use to extend the functionality. It is built on the Matrix Python SDK which can be directly accessed via MatrixBot.client

from matrixbot import MatrixBot

# create a new bot
bot = MatrixBot(
    host="example.com",
    display_name="Example Bot",
    token=access_token,
    user_id="@bot:example.com"
)
# run forever
bot.start()

Get a list of joined rooms:

room_ids = bot.rooms.keys()
room_objects = bot.rooms.values()

Leave abandoned 1-on-1 rooms

for room in bot.rooms.values():
    bot.leave_if_empty(room)

Cache results from external API calls

To prevent abuse of commands that rely on external API calls, MatrixBot includes a very basic caching mechanism. Wrap all API calls in MatrixBot.fetch() to return cached results and automatically refresh stale data.

def get_url(url):
  return response.get(url)

result = bot.fetch(
    "cache_key", lambda: get_url("https://example.com"), timeout=900
)

By default the module uses an in-memory cache which is lost between restarts. To create a persistent cache provide the constructor with the path to a sqlite database:

bot = MatrixBot(
    ...
    cache_db="/path/to/sqlite_database"
)

Sub-classing

Create a subclass to extend and override default features

class MyBot(MatrixBot):
    # override `process_message()` to filter/parse/react to room events:
    def process_message(self, room, event):
        # say hello when a user joins the room
        if event["type"] == "m.room.member":
            if event["content"]["membership"] == "join":
                self.say(room, "Hello!", mention=event["sender"])

    # override `accept_invite()` to disable auto-join:
    def accept_invite(self, room_id):
        pass

bot = MyBot(...)

License

MIT

Maintainer

Brian Ó blacksam@gibberfish.org

Contributions welcome.

About Gibberfish

Gibberfish, Inc is a volunteer nonprofit that develops free tools to promote online privacy for activists and regular people alike. If you like this module and decide to use it in your project, please consider donating $1 to help keep us going. Thanks!

https://gibberfish.org/donate/

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

python-matrixbot-0.0.7.tar.gz (8.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

python_matrixbot-0.0.7-py3-none-any.whl (11.2 kB view details)

Uploaded Python 3

File details

Details for the file python-matrixbot-0.0.7.tar.gz.

File metadata

  • Download URL: python-matrixbot-0.0.7.tar.gz
  • Upload date:
  • Size: 8.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.0.1 requests-toolbelt/0.9.1 tqdm/4.32.2 CPython/3.7.4

File hashes

Hashes for python-matrixbot-0.0.7.tar.gz
Algorithm Hash digest
SHA256 9412981b14ff3ab7ffbb1bfc1691758113ab8d71f731b3093d8808c286b69c71
MD5 bf87d77eeef4a9b8ca8d7259484e09fd
BLAKE2b-256 5f6f9487ea2214593bdbec5b12143aa21d90553f0763da7e0efb170297e2c0b4

See more details on using hashes here.

File details

Details for the file python_matrixbot-0.0.7-py3-none-any.whl.

File metadata

  • Download URL: python_matrixbot-0.0.7-py3-none-any.whl
  • Upload date:
  • Size: 11.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.0.1 requests-toolbelt/0.9.1 tqdm/4.32.2 CPython/3.7.4

File hashes

Hashes for python_matrixbot-0.0.7-py3-none-any.whl
Algorithm Hash digest
SHA256 27a6ee03548e07a56d06b2842e8407fcdf7f1841c3d6bd64a26e46516f43d524
MD5 20e6dd4d83e99f1f1dbb5939d40a039e
BLAKE2b-256 79252b46ca246d79523d6c26e368ce9f4be811788841da7578c56e634209acea

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page