Signald python bindings
=======================
[](https://pypi.org/project/aiosignald/)
[](https://aiosignald.readthedocs.io/en/latest/)
[](https://builds.sr.ht/~nicoco/aiosignald/commits/master/.build.yml?)
Interact with the signal messaging network in python with sweet, sweet autocompletion.
Most of the code is generated by the `generate.py` script that
uses the schema available at <https://signald.org/protocol.json>.
No 3rd party dep, just the python standard lib.
Install
-------
`pip install aiosignald`
Have signald running. See [their
docs](https://signald.org/articles/install/) about it.
Issue tracker: https://todo.sr.ht/~nicoco/aiosignald
Part of the [slidge project](https://sr.ht/~nicoco/slidge) (but can be used independently)
Usage
-----
### Example: echo bot
```py
import asyncio
from aiosignald import SignaldAPI
import aiosignald.generated as api
class EchoBot(SignaldAPI):
async def handle_IncomingMessage(self, msg: api.IncomingMessagev1, _payload):
# hook to the incoming event by naming you function handle_EventName
# most stuff comes through an IncomingMessage anyway
print("Received: ", msg)
if (data_msg := msg.data_message) and (body := data_msg.body):
await self.send(
username=PHONE_NUMBER,
recipientAddress=msg.source,
messageBody=body
)
async def main():
loop = asyncio.get_running_loop()
_, signald = await loop.create_unix_connection(
EchoBot, path=SIGNALD_SOCKET_PATH)
if ACCOUNT_TYPE == "primary":
await signald.register(account=PHONE_NUMBER)
# Some async code to get the SMS code
code = await user_input("Enter your sms code?")
await signald.verify(account=PHONE_NUMBER, code=code)
else:
# linking to an existing account is also possible
resp = await signald.generate_linking_uri()
print("Make this a QR code and scan it on your primary signal device:", resp.uri)
await signald.finish_link(device_name="friendly-device-name", session_id=resp.session_id)
await signald.on_con_lost
# See https://signald.org/articles/protocol/ for more info about this
SIGNALD_SOCKET_PATH = "/var/run/signald/signald.sock"
PHONE_NUMBER = "+XXXXXX"
ACCOUNT_TYPE = "primary"
asyncio.run(main())
```
Docs are available on [readthedocs](https://aiosignald.readthedocs.org).
Raw data
{
"_id": null,
"home_page": "https://git.sr.ht/~nicoco/aiosignald",
"name": "aiosignald",
"maintainer": "",
"docs_url": null,
"requires_python": ">=3.8,<4",
"maintainer_email": "",
"keywords": "",
"author": "Nicolas Cedilnik",
"author_email": "nicoco@nicoco.fr",
"download_url": "https://files.pythonhosted.org/packages/60/3e/70a71679bd13b744a17c3ef2ec42e97822d8a451b0ddc6bd7b61bc3b7de2/aiosignald-0.3.6.tar.gz",
"platform": null,
"description": "Signald python bindings\n=======================\n\n\n[](https://pypi.org/project/aiosignald/)\n[](https://aiosignald.readthedocs.io/en/latest/)\n[](https://builds.sr.ht/~nicoco/aiosignald/commits/master/.build.yml?)\n\nInteract with the signal messaging network in python with sweet, sweet autocompletion.\n\nMost of the code is generated by the `generate.py` script that\nuses the schema available at <https://signald.org/protocol.json>.\n\nNo 3rd party dep, just the python standard lib.\n\nInstall\n-------\n\n`pip install aiosignald`\n\nHave signald running. See [their\ndocs](https://signald.org/articles/install/) about it.\n\nIssue tracker: https://todo.sr.ht/~nicoco/aiosignald\n\nPart of the [slidge project](https://sr.ht/~nicoco/slidge) (but can be used independently)\n\nUsage\n-----\n\n### Example: echo bot\n\n```py\nimport asyncio\n\nfrom aiosignald import SignaldAPI\nimport aiosignald.generated as api\n\nclass EchoBot(SignaldAPI):\n async def handle_IncomingMessage(self, msg: api.IncomingMessagev1, _payload):\n # hook to the incoming event by naming you function handle_EventName\n # most stuff comes through an IncomingMessage anyway\n print(\"Received: \", msg)\n if (data_msg := msg.data_message) and (body := data_msg.body):\n await self.send(\n username=PHONE_NUMBER,\n recipientAddress=msg.source,\n messageBody=body\n )\n\nasync def main():\n loop = asyncio.get_running_loop()\n _, signald = await loop.create_unix_connection(\n EchoBot, path=SIGNALD_SOCKET_PATH)\n if ACCOUNT_TYPE == \"primary\":\n await signald.register(account=PHONE_NUMBER)\n # Some async code to get the SMS code\n code = await user_input(\"Enter your sms code?\")\n await signald.verify(account=PHONE_NUMBER, code=code)\n else:\n # linking to an existing account is also possible\n resp = await signald.generate_linking_uri()\n print(\"Make this a QR code and scan it on your primary signal device:\", resp.uri)\n await signald.finish_link(device_name=\"friendly-device-name\", session_id=resp.session_id)\n await signald.on_con_lost\n\n# See https://signald.org/articles/protocol/ for more info about this\nSIGNALD_SOCKET_PATH = \"/var/run/signald/signald.sock\"\nPHONE_NUMBER = \"+XXXXXX\"\nACCOUNT_TYPE = \"primary\"\n\nasyncio.run(main())\n```\n\nDocs are available on [readthedocs](https://aiosignald.readthedocs.org).\n",
"bugtrack_url": null,
"license": "AGPL-3.0-or-later",
"summary": "Python bindings for signald",
"version": "0.3.6",
"split_keywords": [],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "6192fc4e9d4838263bd7f13b19413f264ca90ea6eeada02417144ffae2d3ae51",
"md5": "c9075726ad17499840ae67d5913fee9b",
"sha256": "418588412c42fc2e95c0a30179a195814ce1e93dee24705d40cd8c0520214857"
},
"downloads": -1,
"filename": "aiosignald-0.3.6-py3-none-any.whl",
"has_sig": false,
"md5_digest": "c9075726ad17499840ae67d5913fee9b",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.8,<4",
"size": 30972,
"upload_time": "2023-01-19T17:12:18",
"upload_time_iso_8601": "2023-01-19T17:12:18.923906Z",
"url": "https://files.pythonhosted.org/packages/61/92/fc4e9d4838263bd7f13b19413f264ca90ea6eeada02417144ffae2d3ae51/aiosignald-0.3.6-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "603e70a71679bd13b744a17c3ef2ec42e97822d8a451b0ddc6bd7b61bc3b7de2",
"md5": "a7f2dfc6cef9f776741f3628bc9e3043",
"sha256": "9cf166e8c6ef5d7ea9c2928fd062b580c8c94207964897afb79292e36cfe09af"
},
"downloads": -1,
"filename": "aiosignald-0.3.6.tar.gz",
"has_sig": false,
"md5_digest": "a7f2dfc6cef9f776741f3628bc9e3043",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.8,<4",
"size": 30864,
"upload_time": "2023-01-19T17:12:20",
"upload_time_iso_8601": "2023-01-19T17:12:20.614611Z",
"url": "https://files.pythonhosted.org/packages/60/3e/70a71679bd13b744a17c3ef2ec42e97822d8a451b0ddc6bd7b61bc3b7de2/aiosignald-0.3.6.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2023-01-19 17:12:20",
"github": false,
"gitlab": false,
"bitbucket": false,
"lcname": "aiosignald"
}