Skip to main content

A library that allows communication via the Signal IM service using the signald daemon.

Project description

pysignald

PyPI pipeline status

pysignald is a Python client for the excellent signald project, which in turn is a command-line client for the Signal messaging service.

pysignald allows you to programmatically send and receive messages to Signal.

NOTE: Unfortunately, this library might be somewhat out of date or parts of it might not be working, as the upstream API keeps changing, breaking compatibility. If you notice any breakage, MRs to fix it would be appreciated.

Installation

You can install pysignald with pip:

$ pip install pysignald

Running

Just make sure you have signald installed. Here's an example of how to use pysignald:

from signald import Signal, Reaction

s = Signal("+1234567890")

# If you haven't registered/verified signald, do that first:
s.register(voice=False)
s.verify("sms code")

s.send(recipient="+1098765432", text="Hello there!")
s.send(recipient_group_id="YXNkZkFTREZhc2RmQVNERg==", text="Hello group!")

for message in s.receive_messages():
    print(message)
    s.react(message.source, Reaction("🥳", message.source, message.timestamp))

You can also use the chat decorator interface:

from signald import Signal

s = Signal("+1234567890")

@s.chat_handler("hello there", order=10)  # This is case-insensitive.
def hello_there(message, match):
    # Returning `False` as the first argument will cause matching to continue
    # after this handler runs.
    stop = False
    reply = "Hello there!"
    return stop, reply


# Matching is case-insensitive. The `order` argument signifies when
# the handler will try to match (default is 100), and functions get sorted
# by order of declaration secondly.
@s.chat_handler("hello", order=10)
def hello(message, match):
    # This will match on "hello there" as well because of the "stop" return code in
    # the function above. Both replies will be sent.
    return "Hello!"


@s.chat_handler("wave", order=20)
def react_with_waving_hand(message, match):
    # This will only react to the received message.
    # But it would be possible to send a reply and a reaction at the same time.
    stop = True
    reply = None
    reaction = "👋"
    return stop, reply, reaction


@s.chat_handler(re.compile("my name is (.*)"))  # This is case-sensitive.
def name(message, match):
    return "Hello %s." % match.group(1)


@s.chat_handler("")
def catch_all(message, match):
    # This will only be sent if nothing else matches, because matching
    # stops by default on the first function that matches.
    return "I don't know what you said."

s.run_chat()

Various

pysignald also supports different socket paths:

s = Signal("+1234567890", socket_path="/var/some/other/socket.sock")

It supports TCP sockets too, if you run a proxy. For example, you can proxy signald's UNIX socket over TCP with socat:

$ socat -d -d TCP4-LISTEN:15432,fork UNIX-CONNECT:/var/run/signald/signald.sock

Then in pysignald:

s = Signal("+1234567890", socket_path=("your.serveri.ip", 15432))

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

pysignald-0.0.9.tar.gz (7.3 kB view details)

Uploaded Source

Built Distribution

pysignald-0.0.9-py3-none-any.whl (7.2 kB view details)

Uploaded Python 3

File details

Details for the file pysignald-0.0.9.tar.gz.

File metadata

  • Download URL: pysignald-0.0.9.tar.gz
  • Upload date:
  • Size: 7.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/50.3.2 requests-toolbelt/0.9.1 tqdm/4.58.0 CPython/3.8.10

File hashes

Hashes for pysignald-0.0.9.tar.gz
Algorithm Hash digest
SHA256 5be1a0c87031e9730eaa32f94937666f7a37f152d2232bec5ee9d3cf598bb3a2
MD5 2d73751a06386882c006b597dddbc7fb
BLAKE2b-256 a8bcb4e4814a60f861e2266dd5420722412aeafb31cb01911d1842ce704a7ec1

See more details on using hashes here.

File details

Details for the file pysignald-0.0.9-py3-none-any.whl.

File metadata

  • Download URL: pysignald-0.0.9-py3-none-any.whl
  • Upload date:
  • Size: 7.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/50.3.2 requests-toolbelt/0.9.1 tqdm/4.58.0 CPython/3.8.10

File hashes

Hashes for pysignald-0.0.9-py3-none-any.whl
Algorithm Hash digest
SHA256 2048533b5440df6bb1bf6ee3a2bab166a643403e57dabdeb9a45cbb21c8da16c
MD5 43de427476cef3795de31dc1a8cf064c
BLAKE2b-256 e870dff2f650f4b7f2ad3e21955fd7fb71ce6cd1fd579162ae87f11f77bbf9a7

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