Skip to main content

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

Project description

pysignald

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.

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

s = Signal("+1234567890")

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

s.send_message("+1098765432", "Hello there!")

for message in s.receive_messages():
    print(message)

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(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.5.tar.gz (4.8 kB view details)

Uploaded Source

Built Distribution

pysignald-0.0.5-py3-none-any.whl (9.6 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: pysignald-0.0.5.tar.gz
  • Upload date:
  • Size: 4.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/0.12.10 CPython/3.6.3 Linux/4.15.0-42-generic

File hashes

Hashes for pysignald-0.0.5.tar.gz
Algorithm Hash digest
SHA256 2b377244cefb7b2faf4d7d89c45aecdc45856ff1db6e7996e926972862afb5ed
MD5 239e6fec62e47c6e22dfe21da39333f4
BLAKE2b-256 6d11f4b1cd83411f4005ac8d9e96b0033daa7221ed513b89913849cffdb749bc

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pysignald-0.0.5-py3-none-any.whl
  • Upload date:
  • Size: 9.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/0.12.10 CPython/3.6.3 Linux/4.15.0-42-generic

File hashes

Hashes for pysignald-0.0.5-py3-none-any.whl
Algorithm Hash digest
SHA256 6c78ed8cc3d7202d9a9cf8b1c62b6ccb250e324b70d93eb990d6e8b83ce6b755
MD5 c6886c7a33c32aa9f385377a762b1e0d
BLAKE2b-256 2a9526c5a4dc56d5a8ad363a6104a3ff8d0c8b3708eb201ab58a11b74856dca7

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