Skip to content

Repository files navigation

PyPIBuild Status

A chat bot for Slack inspired by llimllib/limbo and will.

Features

  • Based on slack Real Time Messaging API
  • Simple plugins mechanism
  • Messages can be handled concurrently
  • Automatically reconnect to slack when connection is lost

Installation

sudo pip install slackbot

Usage

Generate the slack api token

First you need to get the slack api token for your bot. You have two options:

  1. If you use a bot user integration of slack, you can get the api token on the integration page.
  2. If you use a real slack user, you can generate an api token on slack web api page.

Configure the api token

Then you need to configure the API_TOKEN in a python module slackbot_settings.py, which must be located in a python import path.

slackbot_settings.py:

API_TOKEN="<your-api-token>"

Alternatively, you can use the environment variable SLACKBOT_API_TOKEN.

Run the bot

fromslackbot.botimportBotdefmain():
bot=Bot()
bot.run()
if__name__=="__main__":
main()

Now you can talk to your bot in your slack client!

fromslackbot.botimportrespond_toimportreimportjson@respond_to('github', re.IGNORECASE)defgithub():
attachments= [
{
'fallback': 'Fallback text',
'author_name': 'Author',
'author_link': 'http://www.github.com',
'text': 'Some text',
'color': '#59afe1'
}]
message.send_webapi('', json.dumps(attachments))

Plugins

A chat bot is meaningless unless you can extend/customize it to fit your own use cases.

To write a new plugin, simplely create a function decorated by slackbot.bot.respond_to or slackbot.bot.listen_to:

  • A function decorated with respond_to is called when a message matching the pattern is sent to the bot (direct message or @botname in a channel/group chat)
  • A function decorated with listen_to is called when a message matching the pattern is sent on a channel/group chat (not directly sent to the bot)
fromslackbot.botimportrespond_tofromslackbot.botimportlisten_toimportre@respond_to('hi', re.IGNORECASE)defhi(message):
message.reply('I can understand hi or HI!')
@respond_to('I love you')deflove(message):
message.reply('I love you too!')
@listen_to('Can someone help me?')defhelp(message):
# Message is replied to the sender (prefixed with @user)message.reply('Yes, I can!')
# Message is sent on the channel# message.send('I can help everybody!')

To extract params from the message, you can use regular expression:

fromslackbot.botimportrespond_to@respond_to('Give me (.*)')defgiveme(message, something):
message.reply('Here is %s'%something)

If you would like to have a command like 'stats' and 'stats start_date end_date', you can create reg ex like so:

fromslackbot.botimportrespond_toimportre@respond_to('stat$', re.IGNORECASE)@respond_to('stat (.*) (.*)', re.IGNORECASE)defstats(message, start_date=None, end_date=None):

And add the plugins module to PLUGINS list of slackbot settings, e.g. slackbot_settings.py:

PLUGINS= [
'slackbot.plugins',
'mybot.plugins',
]

About

A chat bot for Slack (https://slack.com).

Resources

Stars

5 stars

Watchers

4 watching

Forks

Releases

Packages

Contributors

Languages