Skip to content
A slacker bot for Slack. Plugin-based.
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
.gitignore
LICENSE
MANIFEST.in
README.md
bigslacker.py
requirements.txt
setup.py

README.md

bigslacker - Slack big while having a bot

I would like to thank the University of Tartu and the BIIT Research Group for allowing me to publish this as an open-source library.

Overview

bigslacker tries to be faithful to its name. It is a Bot for Slack that allows you to plug plugins (!) the easiest possible way. All you have to do is define a class that inherits from BasePlugin and define methods for the events.

Supports Python 2 and 3.

Installation

Via PIP

pip install bigslacker

Manual

git clone https://github.com/nicholasamorim/bigslacker.git
python setup.py install

So far it has only one dependency, which is the official slackclient.

Example

Creating a Bot with a plugin to listen on channel_created only
from bigslacker import BigSlacker, BasePlugin

class ChannelAnnouncer(BasePlugin):
    def channel_created(self, data):
        print('I see a channel is created, gonna do something')

token = '1239182918sxxusus'
bs = BigSlacker(token)
bs.slack()

You don't have to do anything to register a plugin but inherit it from BasePlugin.

Sending a message back

We analyze every returned data from any Plugin we call. If you return None we do nothing. However, if you reply with [(channel, message)], we will automatically send that message to the specified channel.

from bigslacker import BigSlacker, BasePlugin

class ChannelAnnouncer(BasePlugin):
    def channel_created(self, data):
        print('I see a channel is created, gonna reply')
        return [('C1K4BBY8L', 'Hey guys, a channel has been created...')]

token = '1239182918sxxusus'
bs = BigSlacker(token)
bs.slack()

Of course, if you add more elements to the list, we will also send those messages.

I want every event in a single function

Sure. Just define a catch_all method.

from bigslacker import BigSlacker, BasePlugin

class ChannelAnnouncer(BasePlugin):
    def catch_all(self, data):
        print('gonna inspect that data...')

token = '1239182918sxxusus'
bs = BigSlacker(token)
bs.slack()
Can I use GEvent ?

Yes, all you have to do is monkey-patch it before on your application. Nothing else changes.

from gevent import monkey
monkey.patch_all()
Can I call the Slack API from it?

Yes, we expose the interface. So just call api_call on it as usual.

from bigslacker import BigSlacker

token = '1239182918sxxusus'
bs = BigSlacker(token)
bs.api_call("api.test")
bs.slack()
You can’t perform that action at this time.