A chat bot for Slack inspired by llimllib/limbo and will.
- Based on slack Real Time Messaging API
- Simple plugins mechanism
- Messages can be handled concurrently
- Automatically reconnect to slack when connection is lost
sudo pip install slackbot
First you need to get the slack api token for your bot. You have two options:
- If you use a bot user integration of slack, you can get the api token on the integration page.
- If you use a real slack user, you can generate an api token on slack web api page.
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.
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))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_tois 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_tois 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',
]