跳转到主要内容

Nameko与Slack API交互的扩展

项目描述

https://api.travis-ci.org/iky/nameko-slack.svg?branch=master

Slack扩展用于Nameko

Nameko扩展,用于与Slack API交互。使用Python Slack开发者套件

实时消息客户端

RTM扩展是Slack的实时消息API的Websocket客户端,允许您实时接收来自Slack的事件。rtm模块包含两个Nameko入口点,用于处理此类事件 - handle_event和handle_message。

使用方法

在您的Nameko服务配置文件中提供Slack机器人API令牌

# config.yml

SLACK:
    TOKEN: "xoxb-abc-1232"

或在配置中使用环境变量

# config.yml

SLACK:
    TOKEN: ${SLACK_BOT_TOKEN}

定义您的服务,使用入口点监听来自Slack的任何事件

# service.py

from nameko_slack import rtm

class Service:

    name = 'some-service'

    @rtm.handle_event
    def on_any_event(self, event):
        print(event)

最后,运行该服务

$ SLACK_BOT_TOKEN=xoxb-abc-1232 nameko run --config ./config.yaml service
starting services: some-service
{'type': 'hello'}
{'type': 'presence_change', 'user': 'ABCDE1234', 'presence': 'active'}
{'type': 'user_typing', 'user': 'ABCDE1234', 'channel': 'ABCDE1234'}
{'type': 'message', 'text': 'spam', 'channel': 'ABCDE1234', 'user': 'ABC...
{'type': 'presence_change', 'user': 'ABCDE1234', 'presence': 'active'}
...

更多示例

监听特定类型的事件

from nameko_slack import rtm

class Service:

    name = 'some-service'

    @rtm.handle_event('presence_change')
    def on_presence_change(self, event):
        pass

监听任何消息类型的事件

from nameko_slack import rtm

class Service:

    name = 'some-service'

    @rtm.handle_message
    def on_any_message(self, event, message):
        pass

使用正则表达式仅在匹配的消息上触发

from nameko_slack import rtm

class Service:

    name = 'some-service'

    @rtm.handle_message('^spam')
    def on_message_starting_with(self, event, message):
        pass

解析消息并将匹配的组作为位置或命名参数传递给入口点

from nameko_slack import rtm

class Service:

    name = 'some-service'

    @rtm.handle_message('^spam (\w*)')
    def on_spam(self, event, message, egg):
        pass

    @rtm.handle_message('^egg (?P<ham>\w+)')
    def on_egg(self, event, message, ham=None):
        pass

在消息处理入口点中返回字符串以响应通道

from nameko_slack import rtm

class Service:

    name = 'some-service'

    @rtm.handle_message
    def sure(self, event, message):
        return 'sure, {}'.format(message)

运行多个RTM机器人

# config.yml

SLACK:
    BOTS:
        alice: ${ALICE_BOT_TOKEN}
        bob: ${BOB_BOT_TOKEN}
# service.py

from nameko_slack import rtm

class Service:

    name = 'some-service'

    @rtm.handle_message(bot_name='alice')
    def listen_as_alice(self, event, message):
        pass

    @rtm.handle_message(bot_name='bob')
    def listen_as_bob(self, event, message):
        pass
$ ALICE_BOT_TOKEN=xoxb-aaa-111 BOB_BOT_TOKEN=xoxb-bbb-222 nameko run --config ./config.yaml service
starting services: some-service

WEB API客户端

一个简单的依赖提供者,包装Slack WEB API客户端

使用方法

依赖提供者使用与RTM扩展相同的配置键

# config.yml

AMQP_URI: 'pyamqp://guest:guest@localhost'
SLACK:
    TOKEN: ${SLACK_BOT_TOKEN}
# service.py

from nameko.rpc import rpc
from nameko_slack import web


class Service:

    name = 'some-service'

    slack = web.Slack()

    @rpc
    def say_hello(self, name):
        self.slack.api_call(
            'chat.postMessage',
            channel="#nameko",
            text="Hello from Nameko! :tada:")

您也可以使用多个机器人

# config.yml

AMQP_URI: 'pyamqp://guest:guest@localhost'
SLACK:
    BOTS:
        alice: ${ALICE_BOT_TOKEN}
        bob: ${BOB_BOT_TOKEN}
# service.py

from nameko.rpc import rpc
from nameko_slack import web


class Service:

    name = 'some-service'

    alice = web.Slack('alice')
    bob = web.Slack('bob')

    @rpc
    def say_hello(self):
        self.alice.api_call(
            'chat.postMessage',
            channel="#nameko",
            text="Hello from Alice! :tada:")
        self.bob.api_call(
            'chat.postMessage',
            channel="#nameko",
            text="Hello from Bob! :tada:")

项目详情


下载文件

下载您平台对应的文件。如果您不确定该选择哪个,请了解更多关于 安装包 的信息。

源代码发行版

nameko-slack-0.0.6.tar.gz (9.2 kB 查看哈希值)

上传时间 源代码

编译发行版

nameko_slack-0.0.6-py2.py3-none-any.whl (9.5 kB 查看哈希值)

上传时间 Python 2 Python 3

由...