{ "info": { "author": "Ondrej Kohout", "author_email": "ondrej.kohout@gmail.com", "bugtrack_url": null, "classifiers": [ "Intended Audience :: Developers", "Operating System :: MacOS :: MacOS X", "Operating System :: POSIX", "Programming Language :: Python", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Topic :: Internet", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": ".. image:: https://api.travis-ci.org/iky/nameko-slack.svg?branch=master\n :target: https://travis-ci.org/iky/nameko-slack\n\n\n===========================\nSlack Extensions for Nameko\n===========================\n\n`Nameko`_ extension for interaction with `Slack APIs`_. Uses\n`Slack Developer Kit for Python`_.\n\n.. _Nameko: http://nameko.readthedocs.org\n.. _Slack APIs: https://api.slack.com\n.. _Slack Developer Kit for Python: http://slackapi.github.io/python-slackclient\n\n\nReal Time Messaging Client\n==========================\n\nThe RTM extension is a Websocket client for Slack's `Real Time Messaging API`_\nthat allows you to receive events from Slack in real time. The ``rtm`` module\ncontains two Nameko entrypoints for handling such events - ``handle_event`` and\n``handle_message``.\n\n.. _Real Time Messaging API: https://api.slack.com/rtm\n\n\nUsage\n-----\n\nProvide Slack bot API token in your Nameko service config file:\n\n.. code:: yaml\n\n # config.yml\n\n SLACK:\n TOKEN: \"xoxb-abc-1232\"\n\nOr using environment variable within your config:\n\n.. code:: yaml\n\n # config.yml\n\n SLACK:\n TOKEN: ${SLACK_BOT_TOKEN}\n\nDefine your service with an entrypoint which will listen for and fire on any\nevent coming from Slack:\n\n.. code:: python\n\n # service.py\n\n from nameko_slack import rtm\n\n class Service:\n\n name = 'some-service'\n\n @rtm.handle_event\n def on_any_event(self, event):\n print(event)\n\nFinally, run the service:\n\n.. code::\n\n $ SLACK_BOT_TOKEN=xoxb-abc-1232 nameko run --config ./config.yaml service\n starting services: some-service\n {'type': 'hello'}\n {'type': 'presence_change', 'user': 'ABCDE1234', 'presence': 'active'}\n {'type': 'user_typing', 'user': 'ABCDE1234', 'channel': 'ABCDE1234'}\n {'type': 'message', 'text': 'spam', 'channel': 'ABCDE1234', 'user': 'ABC...\n {'type': 'presence_change', 'user': 'ABCDE1234', 'presence': 'active'}\n ...\n\n\nMore Examples\n-------------\n\nListen for events of a particular type:\n\n.. code:: python\n\n from nameko_slack import rtm\n\n class Service:\n\n name = 'some-service'\n\n @rtm.handle_event('presence_change')\n def on_presence_change(self, event):\n pass\n\nListen for any message type event:\n\n.. code:: python\n\n from nameko_slack import rtm\n\n class Service:\n\n name = 'some-service'\n\n @rtm.handle_message\n def on_any_message(self, event, message):\n pass\n\nUse regular expressions to fire on matching messages only:\n\n.. code:: python\n\n from nameko_slack import rtm\n\n class Service:\n\n name = 'some-service'\n\n @rtm.handle_message('^spam')\n def on_message_starting_with(self, event, message):\n pass\n\nParse message and pass matching groups as positional or named arguments\nto the entrypoint:\n\n.. code:: python\n\n from nameko_slack import rtm\n\n class Service:\n\n name = 'some-service'\n\n @rtm.handle_message('^spam (\\w*)')\n def on_spam(self, event, message, egg):\n pass\n\n @rtm.handle_message('^egg (?P\\w+)')\n def on_egg(self, event, message, ham=None):\n pass\n\nRespond back to the channel by returning a string in the message handling\nentrypoint:\n\n.. code:: python\n\n from nameko_slack import rtm\n\n class Service:\n\n name = 'some-service'\n\n @rtm.handle_message\n def sure(self, event, message):\n return 'sure, {}'.format(message)\n\n\nRun multiple RTM bots:\n\n.. code:: yaml\n\n # config.yml\n\n SLACK:\n BOTS:\n alice: ${ALICE_BOT_TOKEN}\n bob: ${BOB_BOT_TOKEN}\n\n.. code:: python\n\n # service.py\n\n from nameko_slack import rtm\n\n class Service:\n\n name = 'some-service'\n\n @rtm.handle_message(bot_name='alice')\n def listen_as_alice(self, event, message):\n pass\n\n @rtm.handle_message(bot_name='bob')\n def listen_as_bob(self, event, message):\n pass\n\n.. code::\n\n $ ALICE_BOT_TOKEN=xoxb-aaa-111 BOB_BOT_TOKEN=xoxb-bbb-222 nameko run --config ./config.yaml service\n starting services: some-service\n\n\n\nWEB API Client\n==============\n\nA simple dependency provider wrapping `Slack WEB API client`_.\n\n\n.. _Slack WEB API client: http://slackapi.github.io/python-slackclient/basic_usage.html#sending-a-message\n\n\nUsage\n-----\n\nThe dependency provider uses the same config key as the RTM extension:\n\n.. code:: yaml\n\n # config.yml\n\n AMQP_URI: 'pyamqp://guest:guest@localhost'\n SLACK:\n TOKEN: ${SLACK_BOT_TOKEN}\n\n.. code:: python\n\n # service.py\n\n from nameko.rpc import rpc\n from nameko_slack import web\n\n\n class Service:\n\n name = 'some-service'\n\n slack = web.Slack()\n\n @rpc\n def say_hello(self, name):\n self.slack.api_call(\n 'chat.postMessage',\n channel=\"#nameko\",\n text=\"Hello from Nameko! :tada:\")\n\n\nYou can also use multiple bots:\n\n.. code:: yaml\n\n # config.yml\n\n AMQP_URI: 'pyamqp://guest:guest@localhost'\n SLACK:\n BOTS:\n alice: ${ALICE_BOT_TOKEN}\n bob: ${BOB_BOT_TOKEN}\n\n.. code:: python\n\n # service.py\n\n from nameko.rpc import rpc\n from nameko_slack import web\n\n\n class Service:\n\n name = 'some-service'\n\n alice = web.Slack('alice')\n bob = web.Slack('bob')\n\n @rpc\n def say_hello(self):\n self.alice.api_call(\n 'chat.postMessage',\n channel=\"#nameko\",\n text=\"Hello from Alice! :tada:\")\n self.bob.api_call(\n 'chat.postMessage',\n channel=\"#nameko\",\n text=\"Hello from Bob! :tada:\")\n\n\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "http://github.com/iky/nameko-slack", "keywords": "", "license": "Apache License, Version 2.0", "maintainer": "", "maintainer_email": "", "name": "nameko-slack", "package_url": "https://pypi.org/project/nameko-slack/", "platform": "", "project_url": "https://pypi.org/project/nameko-slack/", "project_urls": { "Homepage": "http://github.com/iky/nameko-slack" }, "release_url": "https://pypi.org/project/nameko-slack/0.0.6/", "requires_dist": [ "nameko (>=2.7.0)", "slackclient (<2,>=1.0.4)", "coverage ; extra == 'dev'", "pre-commit ; extra == 'dev'", "pylint ; extra == 'dev'", "pytest ; extra == 'dev'" ], "requires_python": "", "summary": "Nameko extension for interaction with Slack APIs", "version": "0.0.6" }, "last_serial": 5245860, "releases": { "0.0.1": [], "0.0.2": [ { "comment_text": "", "digests": { "md5": "119ad258d5682e1260863ceb8272da47", "sha256": "c2042ffffe7fe1fa2df6686c9e9858cb684190b9f76fa87259485ae63e063682" }, "downloads": -1, "filename": "nameko_slack-0.0.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "119ad258d5682e1260863ceb8272da47", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 6113, "upload_time": "2017-02-11T13:18:46", "url": "https://files.pythonhosted.org/packages/4b/d3/6fa15d1d82884ddafb57467b307cc0417fcb259a336c6cd149087f4896b8/nameko_slack-0.0.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "1de5cc9fc1e29ee7bdb65ac1eb9fb54e", "sha256": "9b77e5996b6113f4ecd3a8febad5d9c49ff2be859e6b4b9fcaf746ece4ac7374" }, "downloads": -1, "filename": "nameko-slack-0.0.2.tar.gz", "has_sig": false, "md5_digest": "1de5cc9fc1e29ee7bdb65ac1eb9fb54e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3034, "upload_time": "2017-02-11T13:18:48", "url": "https://files.pythonhosted.org/packages/e8/a1/14ecc3381c4c46b38ddbb4b8558c54fad34a9199a4c8925718a98c308730/nameko-slack-0.0.2.tar.gz" } ], "0.0.3": [ { "comment_text": "", "digests": { "md5": "76a39dfd3b8a13d2a8e9ae41b5bf23f9", "sha256": "de3e38320bb4e966a41ca996f353847b86692ee9d271175c15251b9b53060e3c" }, "downloads": -1, "filename": "nameko_slack-0.0.3-py2-none-any.whl", "has_sig": false, "md5_digest": "76a39dfd3b8a13d2a8e9ae41b5bf23f9", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 5895, "upload_time": "2017-07-27T17:02:52", "url": "https://files.pythonhosted.org/packages/d3/43/4404a3403a3b8fe757941518d91309dbe28ca9b402ad876a1536f6f392b6/nameko_slack-0.0.3-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "3dc40aeaf4d379f8601c295e238ae48c", "sha256": "7dc748e9b3983a98eb2d9b9af6cd5a284d603d7991809c7c8c7544ccce8e12fc" }, "downloads": -1, "filename": "nameko-slack-0.0.3.tar.gz", "has_sig": false, "md5_digest": "3dc40aeaf4d379f8601c295e238ae48c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7730, "upload_time": "2017-07-27T17:02:55", "url": "https://files.pythonhosted.org/packages/fe/8a/737b30d0a8bcad8cff60fad3459db22ba1d68ef93d94f83e7ddc96bfc5df/nameko-slack-0.0.3.tar.gz" } ], "0.0.4": [ { "comment_text": "", "digests": { "md5": "a4425cde83a4f14d2cb557e0a2c259ff", "sha256": "be9d30f386bb78a6ef3a7987187caaac305ef6fa274e7a6c8438738cd2feb30a" }, "downloads": -1, "filename": "nameko_slack-0.0.4-py2-none-any.whl", "has_sig": false, "md5_digest": "a4425cde83a4f14d2cb557e0a2c259ff", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 7754, "upload_time": "2017-08-25T15:50:02", "url": "https://files.pythonhosted.org/packages/7f/92/7266285d591fdf9e9cc96af246eded0fc91a91dbe4a2ecf5e87d257ec74e/nameko_slack-0.0.4-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0fba59cb477f29f0b08f5e24c21f21b5", "sha256": "eadcbab16200371a9622a9c96ea1a1cdc3631998eee227c981dd18702079b1dc" }, "downloads": -1, "filename": "nameko-slack-0.0.4.tar.gz", "has_sig": false, "md5_digest": "0fba59cb477f29f0b08f5e24c21f21b5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8855, "upload_time": "2017-08-25T15:50:04", "url": "https://files.pythonhosted.org/packages/39/b2/b587a2cb6d1f944b86f54b18ff6987e522a82ce0735eaadb536bdf41c9f3/nameko-slack-0.0.4.tar.gz" } ], "0.0.5": [ { "comment_text": "", "digests": { "md5": "087521294b2a7248bf77296baf6838d7", "sha256": "f9933e31134d7726b7b3bc55c84a40754360df3011bde576fb8cb2e57a2b14fe" }, "downloads": -1, "filename": "nameko_slack-0.0.5-py3-none-any.whl", "has_sig": false, "md5_digest": "087521294b2a7248bf77296baf6838d7", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 5307, "upload_time": "2018-08-07T21:02:42", "url": "https://files.pythonhosted.org/packages/67/3b/ad38684e1f71d94862a593af18096736c84c014bc52d51d668c20454ab45/nameko_slack-0.0.5-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "55f8bbcf056dc59e207406a794a2e01a", "sha256": "02846a3031bb8f43a9b55242c7d005b309a8e2b12395f4ba265eef41108be694" }, "downloads": -1, "filename": "nameko-slack-0.0.5.tar.gz", "has_sig": false, "md5_digest": "55f8bbcf056dc59e207406a794a2e01a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9499, "upload_time": "2018-08-07T21:02:43", "url": "https://files.pythonhosted.org/packages/3a/7c/52d7599f4a2b5afe0fad05453fa9df6388b6e47782d9cf943ebb53748b30/nameko-slack-0.0.5.tar.gz" } ], "0.0.6": [ { "comment_text": "", "digests": { "md5": "51abbf94a7d7ac06353bc48c6a2b5559", "sha256": "9fdd8cd63cffc243122719938dbfd3ebc7440ef576d40472b62b34118930c983" }, "downloads": -1, "filename": "nameko_slack-0.0.6-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "51abbf94a7d7ac06353bc48c6a2b5559", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 9527, "upload_time": "2019-05-09T06:15:15", "url": "https://files.pythonhosted.org/packages/c8/09/3075a26a0f9b3f560ba4e74d3729e3154daec04ff47644b8c6271e011102/nameko_slack-0.0.6-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "5f532f467bdab4e65e20d986ca48eb11", "sha256": "e79ffeb69dd1d4495e22e23f39d60b1aa2dcf52b0af2bfb157d35b75fbd3750b" }, "downloads": -1, "filename": "nameko-slack-0.0.6.tar.gz", "has_sig": false, "md5_digest": "5f532f467bdab4e65e20d986ca48eb11", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9246, "upload_time": "2019-05-09T06:15:17", "url": "https://files.pythonhosted.org/packages/cd/d8/9fa2b15600e20f441789bb6f72325ea7fe05f30dc06eb0af753f28acb466/nameko-slack-0.0.6.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "51abbf94a7d7ac06353bc48c6a2b5559", "sha256": "9fdd8cd63cffc243122719938dbfd3ebc7440ef576d40472b62b34118930c983" }, "downloads": -1, "filename": "nameko_slack-0.0.6-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "51abbf94a7d7ac06353bc48c6a2b5559", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 9527, "upload_time": "2019-05-09T06:15:15", "url": "https://files.pythonhosted.org/packages/c8/09/3075a26a0f9b3f560ba4e74d3729e3154daec04ff47644b8c6271e011102/nameko_slack-0.0.6-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "5f532f467bdab4e65e20d986ca48eb11", "sha256": "e79ffeb69dd1d4495e22e23f39d60b1aa2dcf52b0af2bfb157d35b75fbd3750b" }, "downloads": -1, "filename": "nameko-slack-0.0.6.tar.gz", "has_sig": false, "md5_digest": "5f532f467bdab4e65e20d986ca48eb11", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9246, "upload_time": "2019-05-09T06:15:17", "url": "https://files.pythonhosted.org/packages/cd/d8/9fa2b15600e20f441789bb6f72325ea7fe05f30dc06eb0af753f28acb466/nameko-slack-0.0.6.tar.gz" } ] }