Metadata-Version: 2.1
Name: IMMP
Version: 0.12.0
Summary: A modular processing platform for instant messages.
Home-page: https://immp.t.allofti.me
Author: Terrance
Author-email: immp@terrance.allofti.me
License: BSD 3-Clause License
Platform: Any
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: Topic :: Communications :: Chat
Classifier: Topic :: Software Development :: Libraries
Requires-Python: >=3.7
Description-Content-Type: text/x-rst
Provides-Extra: runner
Provides-Extra: uv
Provides-Extra: db
Provides-Extra: web
Provides-Extra: webui
Provides-Extra: console
Provides-Extra: sync
Provides-Extra: discord
Provides-Extra: hangouts
Provides-Extra: slack
Provides-Extra: telegram
License-File: LICENSE.txt

IMMP
====

A modular processing platform for instant messages.

Requirements
------------

This project uses the latest and greatest Python features (that is, native asyncio syntax and
asynchronous generators), and therefore requires at least **Python 3.7**.

Additional modules are required for most plugs and hooks -- consult the docs for each module you
want to use to check its own requirements, or use the included requirements list to install all
possible dependencies for built-in modules.

Terminology
-----------

Network
    An external service that provides message-based communication.
Message
    A unit of data, which can include text, images, attachments, authorship, and so on.
User
    An individual or service which can author messages on a network.
Plug
    A handler for all communication with an external network, transforming the network’s content
    to message objects and back again.
Channel
    A single room in an external network – a source of messages, and often a container of users.
Group
    A collection of plugs and channels.
Hook
    A worker that processes a stream of incoming messages, in whichever way it sees fit.

Basic usage
-----------

Prepare a config file in a format of your choosing, e.g. in YAML:

.. code:: yaml

    plugs:
      demo:
        path: demo.DemoPlug
        config:
          api-key: xyzzy

    channels:
      foo:
        plug: demo
        source: 12345
      bar:
        plug: demo
        source: 98765

    hooks:
      test:
        path: test.TestHook
        config:
          channels: [foo, bar]
          args: [123, 456]

All labels under the top-level names are effectively free text, and are used to reference from
other sections.

Then start the built-in runner::

    $ immp config.yaml
