Skip to main content

A Python module for building Signal.org bots that interact with signal-cli.

Project description

Signal-Bot

An asyncio Python 3.11 module for building Signal bots that interact with AsamK/signal-cli.
📖 Documentation and Examples

Build and Publish Releases PyPI - Version Read the Docs

Features

  • Construct different "personalities" for different contexts (users, groups, etc).
  • Callbacks for the following events:
    • Cron schedules.
    • Any message is received.
    • Message matches a prefix (e.g., /command ...).
    • Message contains a keyword.
    • Message contains an @-mention.
  • Currently supported signal-cli functions:
    • "Typing..." indicators.
    • Reacting to messages.
    • Sending messages, including:
      • Inline mentions.
      • Inline text styles.
      • More to come...
    • Deleting messages.

Usage

For development: python3.11 -m pip install signal_bot_framework.

# test_bot.py
import asyncio
from signal_bot_framework import create, AccountNumber

async def crabby_callback(signal: Signal, context: Context, message: DataMessage) -> bool:
        to = context[1]
        await signal.send_reaction(message, "🦀")
        await signal.send_message(to, f"Sorry, just feeling a little crabby, {message.sender_name}.",
                                  args=SendMessageArgs(mention=[f"37:{len(message.sender_name)}:{message.sender}"]))
        return True

async def main():
    # The default, finds `signal-cli` on path and launches it as a subprocess
    connection = 'ipc://'
    # or, use TCP: connection = 'tcp://HOST:PORT'

    signal = await create(AccountNumber('+12345678900'), connection)
    signal.on_keyword('ok?', crabby_callback)
    await signal.run()

if __name__ == '__main__':
    asyncio.run(main())

Docker

For convenience, a base Docker image can be built as sidneys1/signal_bot, based on python:3.11-alpine. You can base your bot on it like so:

FROM sidneys1/signal_bot:latest

COPY ./test_bot.py .

CMD ["python", "test_bot.py"]

You can easily combine this in Docker-Compose with a signal-cli container. Make sure to change your test_bot.py's connection string to tcp://signal-cli:7583.

Additionally, an easy way to keep your Signal account from being stored in your image or docker-compose.yml is to store it in a Docker secret, as shown below.

secrets:
  signal-account:
    file: .signal-account

services:
  test_bot:
    build: .
    depends_on: [signal-cli]
  signal-cli:
    image: registry.gitlab.com/packaging/signal-cli/signal-cli-native:latest
    volumes:
     # Mount an existing signal-cli configuration directory from the host.
     - "${HOME}/.local/share/signal-cli:/var/lib/signal-cli:rw"
    ports: ["7583"]
    secrets: [signal-account]
    entrypoint: sh -c
    command: "'signal-cli -c /var/lib/signal-cli --account $(cat /run/secrets/signal-account) daemon --receive-mode on-connection --no-receive-stdout --send-read-receipts --tcp 0.0.0.0:7583'"

Building

  1. Clone this repository and install the prerequisites:
    • Python >= 3.11 with venv support (included with Python for Windows, python3.11-venv on most package managers).
    • python3.11 -m pip install build
  2. Run python3.11 -m build in the repository folder.
  3. Distribute or install ./dist/signal_bot_framework-X.Y.Z-py3-none-any.whl.

Dependencies

Signal-Bot assumes that you already have signal-cli available and registered with an account from which messages will be sent and received.

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

signal_bot_framework-0.2.2.tar.gz (66.1 kB view details)

Uploaded Source

Built Distribution

signal_bot_framework-0.2.2-py3-none-any.whl (56.7 kB view details)

Uploaded Python 3

File details

Details for the file signal_bot_framework-0.2.2.tar.gz.

File metadata

  • Download URL: signal_bot_framework-0.2.2.tar.gz
  • Upload date:
  • Size: 66.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/5.1.1 CPython/3.12.5

File hashes

Hashes for signal_bot_framework-0.2.2.tar.gz
Algorithm Hash digest
SHA256 133f284b978e1b980a2732a6eaf3505c1f5801a7688bbf4b308129bc4ebec1df
MD5 1748afe9c8d0513686804bcc427348d9
BLAKE2b-256 d85087ba6ecae7d5532d3fe8698412bc3513b3b10c4815d5faeced3fae817ac6

See more details on using hashes here.

File details

Details for the file signal_bot_framework-0.2.2-py3-none-any.whl.

File metadata

File hashes

Hashes for signal_bot_framework-0.2.2-py3-none-any.whl
Algorithm Hash digest
SHA256 72f03b9d0177968a19842f758e849d7c7008739b96242931177a06c4bf49198b
MD5 3b69f9e74d0d10e50dfa167ec0fe8a0f
BLAKE2b-256 b146607a5cc828cead9ab21f9b934c9ac4176fb271495364f4bf6ee955442532

See more details on using hashes here.

Supported by

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