Code Monkey home page Code Monkey logo

python-slackclient's Introduction

Python slackclient

The Python slackclient is a developer kit for interfacing with the Slack Web API and Real Time Messaging (RTM) API on Python 3.6 and above.

pypi package Build Status Build Status Python Version codecov contact

Whether you're building a custom app for your team, or integrating a third party service into your Slack workflows, Slack Developer Kit for Python allows you to leverage the flexibility of Python to get your project up and running as quickly as possible.

The Python slackclient allows interaction with:

If you want to use our Events API, please check the Slack Events API adapter for Python.

Details on the Tokens and Authentication can be found in our Auth Guide.

Table of contents

Requirements


This library requires Python 3.6 and above. If you require Python 2, please use our SlackClient - v1.x. If you're unsure how to check what version of Python you're on, you can check it using the following:

Note: You may need to use python3 before your commands to ensure you use the correct Python path. e.g. python3 --version

python --version

-- or --

python3 --version

Installation

We recommend using PyPI to install the Slack Developer Kit for Python.

pip3 install slackclient==2.0.0

Getting started tutorial


We've created this tutorial to build a basic Slack app in less than 10 minutes. It requires some general programming knowledge, and Python basics. It focuses on the interacting with Slack's Web and RTM API. Use it to give you an idea of how to use this SDK.

Read the tutorial to get started!

Basic Usage of the Web Client


Slack provide a Web API that gives you the ability to build applications that interact with Slack in a variety of ways. This Development Kit is a module based wrapper that makes interaction with that API easier. We have a basic example here with some of the more common uses but a full list of the available methods are available here. More detailed examples can be found in our Basic Usage guide

Sending a message to Slack

One of the most common use-cases is sending a message to Slack. If you want to send a message as your app, or as a user, this method can do both. In our examples, we specify the channel name, however it is recommended to use the channel_id where possible.

    import os
    import slack

    client = slack.WebClient(token=os.environ['SLACK_API_TOKEN'])

    response = client.chat_postMessage(
        channel='#random',
        text="Hello world!")
    assert response["ok"]
    assert response["message"]["text"] == "Hello world!"

Here we also ensure that the response back from Slack is a successful one and that the message is the one we sent by using the assert statement.

Uploading files to Slack

We've changed the process for uploading files to Slack to be much easier and straight forward. You can now just include a path to the file directly in the API call and upload it that way. You can find the details on this api call here

    import os
    import slack

    client = slack.WebClient(token=os.environ['SLACK_API_TOKEN'])

    response = client.files_upload(
        channels='#random',
        file="my_file.pdf")
    assert response["ok"]

Basic Usage of the RTM Client


The Real Time Messaging (RTM) API is a WebSocket-based API that allows you to receive events from Slack in real time and send messages as users.

If you prefer events to be pushed to you instead, we recommend using the HTTP-based Events API instead. Most event types supported by the RTM API are also available in the Events API. You can check out our Python Slack Events Adaptor if you want to use this API instead.

An RTMClient allows apps to communicate with the Slack Platform's RTM API.

The event-driven architecture of this client allows you to simply link callbacks to their corresponding events. When an event occurs this client executes your callback while passing along any information it receives. We also give you the ability to call our web client from inside your callbacks.

In our example below, we watch for a message event that contains "Hello" and if its recieved, we call the say_hello() function. We then issue a call to the web client to post back to the channel saying "Hi" to the user.

    import os
    import slack

    @slack.RTMClient.run_on(event='message')
    def say_hello(**payload):
        data = payload['data']
        web_client = payload['web_client']
        rtm_client = payload['rtm_client']
        if 'Hello' in data['text']:
            channel_id = data['channel']
            thread_ts = data['ts']
            user = data['user']

            web_client.chat_postMessage(
                channel=channel_id,
                text=f"Hi <@{user}>!",
                thread_ts=thread_ts
            )

    slack_token = os.environ["SLACK_API_TOKEN"]
    rtm_client = slack.RTMClient(token=slack_token)
    rtm_client.start()

Async usage

slackclient v2 and higher uses aiohttp and asyncio to enable async functionality.

Normal usage of the library does not run it in async, hence a kwarg of run_async=True is needed.

When in async mode its important to remember to await or run/run_until_complete the call.

Slackclient as a script

import os
import slack
import asyncio

loop = asyncio.get_event_loop()

client = slack.WebClient(
    token=os.environ['SLACK_API_TOKEN'],
    run_async=True
    )

response = loop.run_until_complete(client.chat_postMessage(
        channel='#random',
        text="Hello world!"
        )
        )
assert response["ok"]
assert response["message"]["text"] == "Hello world!"

Slackclient in a framework

If you are using a framework invoking the asyncio event loop like : sanic/jupyter notebook/etc.

import os
import slack


client = slack.WebClient(
    token=os.environ['SLACK_API_TOKEN'],
    run_async=True
    )

async def send_async_message(channel='#random', text='')
    response = await client.chat_postMessage(
            channel=channel,
            text=text
            )
    assert response["ok"]
    assert response["message"]["text"] == "Hello world!"
    

Advanced Options

The Python slackclient v2 now uses AIOHttp under the hood so it allows us to use their built-in SSL and Proxy support. You can pass these options directly into both the RTM and the Web client.

import os
import slack
    
client = slack.WebClient(token=os.environ['SLACK_API_TOKEN'], ssl=sslcert, proxy=proxyinfo)

We will always follow the standard process in AIOHttp for those proxy and SSL settings so for more information, check out their documentation page linked here.

Migrating from v1


If you're migrating from v1.x of slackclient to v2.x, Please follow our migration guide to ensure your app continues working after updating.

Check out the Migration Guide here!

Support


If you get stuck, we’re here to help. The following are the best ways to get assistance working through your issue:

Use our Github Issue Tracker for reporting bugs or requesting features. Visit the Bot Developer Hangout for getting help using Slack Developer Kit for Python or just generally bond with your fellow Slack developers.

python-slackclient's People

Contributors

acaire avatar ajferrick avatar aoberoi avatar avinassh avatar bramver avatar doerge avatar elementc avatar flyte avatar greut avatar harlowja avatar hockeybuggy avatar jammons avatar jasedit avatar karishay avatar metakermit avatar mlaferrera avatar nedbat avatar rawdigits avatar revolter avatar rickhanlonii avatar roach avatar rodneyu215 avatar schlueter avatar sd2k avatar shaydewael avatar synforge avatar uberi avatar wagmiwiz avatar yasumoto avatar zoni avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.