{ "info": { "author": "Stavros Korokithakis", "author_email": "hi@stavros.io", "bugtrack_url": null, "classifiers": [ "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7" ], "description": "pysignald\n=======\n\n[![pipeline status](https://gitlab.com/stavros/pysignald/badges/master/pipeline.svg)](https://gitlab.com/stavros/pysignald/commits/master)\n\npysignald is a Python client for the excellent [signald](https://git.callpipe.com/finn/signald) project, which in turn\nis a command-line client for the Signal messaging service.\n\npysignald allows you to programmatically send and receive messages to Signal.\n\nInstallation\n------------\n\nYou can install pysignald with pip:\n\n```\n$ pip install pysignald\n```\n\n\nRunning\n-------\n\nJust make sure you have signald installed. Here's an example of how to use pysignald:\n\n\n```python\nfrom signald import Signal\n\ns = Signal(\"+1234567890\")\n\n# If you haven't registered/verified signald, do that first:\ns.register(voice=False)\ns.verify(\"sms code\")\n\ns.send_message(\"+1098765432\", \"Hello there!\")\n\nfor message in s.receive_messages():\n print(message)\n```\n\nYou can also use the chat decorator interface:\n\n```python\nfrom signald import Signal\n\ns = Signal(\"+1234567890\")\n\n@s.chat_handler(\"hello there\", order=10) # This is case-insensitive.\ndef hello_there(message, match):\n # Returning `False` as the first argument will cause matching to continue\n # after this handler runs.\n stop = False\n reply = \"Hello there!\"\n return stop, reply\n\n\n# Matching is case-insensitive. The `order` argument signifies when\n# the handler will try to match (default is 100), and functions get sorted\n# by order of declaration secondly.\n@s.chat_handler(\"hello\", order=10)\ndef hello(message, match):\n # This will match on \"hello there\" as well because of the \"stop\" return code in\n # the function above. Both replies will be sent.\n return \"Hello!\"\n\n\n@s.chat_handler(re.compile(\"my name is (.*)\")) # This is case-sensitive.\ndef name(message, match):\n return \"Hello %s.\" % match.group(1)\n\n\n@s.chat_handler(\"\")\ndef catch_all(message, match):\n # This will only be sent if nothing else matches, because matching\n # stops by default on the first function that matches.\n return \"I don't know what you said.\"\n\ns.run_chat()\n```\n\nVarious\n-------\n\npysignald also supports different socket paths:\n\n```python\ns = Signal(\"+1234567890\", socket_path=\"/var/some/other/socket.sock\")\n```\n\nIt supports TCP sockets too, if you run a proxy. For example, you can proxy signald's UNIX socket over TCP with socat:\n\n```bash\n$ socat -d -d TCP4-LISTEN:15432,fork UNIX-CONNECT:/var/run/signald/signald.sock\n```\n\nThen in pysignald:\n\n```python\ns = Signal(\"+1234567890\", socket_path=(\"your.serveri.ip\", 15432))\n```\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://gitlab.com/stavros/pysignald/", "keywords": "", "license": "MIT", "maintainer": "Stavros Korokithakis", "maintainer_email": "hi@stavros.io", "name": "pysignald", "package_url": "https://pypi.org/project/pysignald/", "platform": "", "project_url": "https://pypi.org/project/pysignald/", "project_urls": { "Homepage": "https://gitlab.com/stavros/pysignald/", "Repository": "https://gitlab.com/stavros/pysignald/" }, "release_url": "https://pypi.org/project/pysignald/0.0.6/", "requires_dist": [ "attrs (>=18.2,<19.0)" ], "requires_python": ">=3.4,<4.0", "summary": "A library that allows communication via the Signal IM service using the signald daemon.", "version": "0.0.6" }, "last_serial": 4907644, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "md5": "0d853b7005ea31a68b95c6e0729e92bc", "sha256": "c65e583a29bdd39bc49ca7acd0384991bfed74a42b0d3ba240ea8b1591c02443" }, "downloads": -1, "filename": "pysignald-0.0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "0d853b7005ea31a68b95c6e0729e92bc", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.4,<4.0", "size": 4198, "upload_time": "2018-12-06T12:05:27", "url": "https://files.pythonhosted.org/packages/e8/34/44f55b5ba79cde988e4c2b0cd98ea3ecb406965379aa1aa34f09d52cd4ae/pysignald-0.0.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8d3f92f42de791c2474cb9a38f2eba55", "sha256": "69bc9bbcfa3ccb032a68d413aea8d3bd3abe86a3ea11381daa5c2f42e7244e3f" }, "downloads": -1, "filename": "pysignald-0.0.1.tar.gz", "has_sig": false, "md5_digest": "8d3f92f42de791c2474cb9a38f2eba55", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.4,<4.0", "size": 2063, "upload_time": "2018-12-06T12:05:29", "url": "https://files.pythonhosted.org/packages/2a/86/57a0dd41cf4a525e6adb08f163aa6535c61430d8ad769345d691202ac3d8/pysignald-0.0.1.tar.gz" } ], "0.0.2": [ { "comment_text": "", "digests": { "md5": "baaee8fa3971a4cbe5b16a03b7082102", "sha256": "e5342357fcaecd8c322ddadada3827e03a175fecb04fd8cd85986cf76ad25ff0" }, "downloads": -1, "filename": "pysignald-0.0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "baaee8fa3971a4cbe5b16a03b7082102", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.4,<4.0", "size": 6053, "upload_time": "2018-12-06T22:25:42", "url": "https://files.pythonhosted.org/packages/22/37/eee8a1817a093ae258e968dca4a01775089ba42fcfca947b835fbcd4d978/pysignald-0.0.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "476920fb4e76bf6f6bed4357b69b22e1", "sha256": "47a19b617c0909b4c6583332d3a1f2e9afa92dae8396322afd1c7acd072c7900" }, "downloads": -1, "filename": "pysignald-0.0.2.tar.gz", "has_sig": false, "md5_digest": "476920fb4e76bf6f6bed4357b69b22e1", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.4,<4.0", "size": 2955, "upload_time": "2018-12-06T22:25:43", "url": "https://files.pythonhosted.org/packages/03/ef/776c55e6c85e973f497809721e695fa8d9598b25ac83afccdbd6f8660906/pysignald-0.0.2.tar.gz" } ], "0.0.3": [ { "comment_text": "", "digests": { "md5": "7172598e20405293e3792b6cefca2388", "sha256": "a4921b826d9b5a660102aa7d458ecd5fd5fd8f5e1242e89d369a363e13eff0eb" }, "downloads": -1, "filename": "pysignald-0.0.3-py3-none-any.whl", "has_sig": false, "md5_digest": "7172598e20405293e3792b6cefca2388", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.4,<4.0", "size": 6775, "upload_time": "2018-12-07T14:49:57", "url": "https://files.pythonhosted.org/packages/32/2b/47df6a84f35d4101483b1b461418a0912f23636938365fa37e05a36686b2/pysignald-0.0.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c2cb3ab85e342a734f250004764d587d", "sha256": "32ac42087fc058713258598e09fc541f58c07dd10befcb20b44f59f7018b7564" }, "downloads": -1, "filename": "pysignald-0.0.3.tar.gz", "has_sig": false, "md5_digest": "c2cb3ab85e342a734f250004764d587d", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.4,<4.0", "size": 3313, "upload_time": "2018-12-07T14:49:59", "url": "https://files.pythonhosted.org/packages/e6/18/5755244f770bfb4cba927ebe912c6f8a7f898be59e56df4c0e7d7abeff22/pysignald-0.0.3.tar.gz" } ], "0.0.4": [ { "comment_text": "", "digests": { "md5": "916564ffe6bd03353334bc4ba31072b4", "sha256": "aeaead36a9b971e021a31a5960d8d54989f77e9ab989d58d4775e6543e6cf5a6" }, "downloads": -1, "filename": "pysignald-0.0.4-py3-none-any.whl", "has_sig": false, "md5_digest": "916564ffe6bd03353334bc4ba31072b4", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.4,<4.0", "size": 8724, "upload_time": "2018-12-10T03:11:02", "url": "https://files.pythonhosted.org/packages/b4/fd/a6104a0b02a8423e737ff527b19843ee9a0583e902f412e9f3a1d1f08385/pysignald-0.0.4-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "52a6861fd7d779685c44065c396907e8", "sha256": "662424f1998af83ec0057b8d045c74cef4e7b506f7731c0b400aec48977e8944" }, "downloads": -1, "filename": "pysignald-0.0.4.tar.gz", "has_sig": false, "md5_digest": "52a6861fd7d779685c44065c396907e8", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.4,<4.0", "size": 4206, "upload_time": "2018-12-10T03:11:04", "url": "https://files.pythonhosted.org/packages/33/1d/e9096b7ea508c26393b16422cca8e10adb59a2d3ee4cf58d906d55975b96/pysignald-0.0.4.tar.gz" } ], "0.0.5": [ { "comment_text": "", "digests": { "md5": "c6886c7a33c32aa9f385377a762b1e0d", "sha256": "6c78ed8cc3d7202d9a9cf8b1c62b6ccb250e324b70d93eb990d6e8b83ce6b755" }, "downloads": -1, "filename": "pysignald-0.0.5-py3-none-any.whl", "has_sig": false, "md5_digest": "c6886c7a33c32aa9f385377a762b1e0d", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.4,<4.0", "size": 9591, "upload_time": "2018-12-11T17:02:32", "url": "https://files.pythonhosted.org/packages/2a/95/26c5a4dc56d5a8ad363a6104a3ff8d0c8b3708eb201ab58a11b74856dca7/pysignald-0.0.5-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "239e6fec62e47c6e22dfe21da39333f4", "sha256": "2b377244cefb7b2faf4d7d89c45aecdc45856ff1db6e7996e926972862afb5ed" }, "downloads": -1, "filename": "pysignald-0.0.5.tar.gz", "has_sig": false, "md5_digest": "239e6fec62e47c6e22dfe21da39333f4", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.4,<4.0", "size": 4754, "upload_time": "2018-12-11T17:02:34", "url": "https://files.pythonhosted.org/packages/6d/11/f4b1cd83411f4005ac8d9e96b0033daa7221ed513b89913849cffdb749bc/pysignald-0.0.5.tar.gz" } ], "0.0.6": [ { "comment_text": "", "digests": { "md5": "81111e161b458b04f5fc503025e79e4f", "sha256": "bd8fbe8d7ea3a9f11370eb82e488fd43ea3622517a11d421b52ede70077ab911" }, "downloads": -1, "filename": "pysignald-0.0.6-py3-none-any.whl", "has_sig": false, "md5_digest": "81111e161b458b04f5fc503025e79e4f", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.4,<4.0", "size": 9598, "upload_time": "2019-03-06T23:58:15", "url": "https://files.pythonhosted.org/packages/c6/83/be2458b6a91f0ad41c0738b21c7de132eb2f80a0d707a291c67d0419312e/pysignald-0.0.6-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "caf73c36f3f7775d9c2bb38240ac8d34", "sha256": "b4069d1001674d5a82042c092b796509c60e881b3a7ebae9190e35a10ca09845" }, "downloads": -1, "filename": "pysignald-0.0.6.tar.gz", "has_sig": false, "md5_digest": "caf73c36f3f7775d9c2bb38240ac8d34", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.4,<4.0", "size": 4771, "upload_time": "2019-03-06T23:58:17", "url": "https://files.pythonhosted.org/packages/df/ed/992d1983f153efc0ec96fb1914b02dd411d54aa866419ee9bfc5655bd94d/pysignald-0.0.6.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "81111e161b458b04f5fc503025e79e4f", "sha256": "bd8fbe8d7ea3a9f11370eb82e488fd43ea3622517a11d421b52ede70077ab911" }, "downloads": -1, "filename": "pysignald-0.0.6-py3-none-any.whl", "has_sig": false, "md5_digest": "81111e161b458b04f5fc503025e79e4f", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.4,<4.0", "size": 9598, "upload_time": "2019-03-06T23:58:15", "url": "https://files.pythonhosted.org/packages/c6/83/be2458b6a91f0ad41c0738b21c7de132eb2f80a0d707a291c67d0419312e/pysignald-0.0.6-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "caf73c36f3f7775d9c2bb38240ac8d34", "sha256": "b4069d1001674d5a82042c092b796509c60e881b3a7ebae9190e35a10ca09845" }, "downloads": -1, "filename": "pysignald-0.0.6.tar.gz", "has_sig": false, "md5_digest": "caf73c36f3f7775d9c2bb38240ac8d34", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.4,<4.0", "size": 4771, "upload_time": "2019-03-06T23:58:17", "url": "https://files.pythonhosted.org/packages/df/ed/992d1983f153efc0ec96fb1914b02dd411d54aa866419ee9bfc5655bd94d/pysignald-0.0.6.tar.gz" } ] }