{"id":16859064,"url":"https://github.com/ross/botie","last_synced_at":"2026-03-16T21:34:59.336Z","repository":{"id":50202259,"uuid":"105399048","full_name":"ross/botie","owner":"ross","description":"Slack Bot \u0026 Slash Command development framework","archived":false,"fork":false,"pushed_at":"2022-12-08T00:46:24.000Z","size":520,"stargazers_count":5,"open_issues_count":2,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-04-11T07:09:40.372Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ross.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2017-09-30T20:32:33.000Z","updated_at":"2023-03-31T17:36:26.000Z","dependencies_parsed_at":"2023-01-24T01:15:35.927Z","dependency_job_id":null,"html_url":"https://github.com/ross/botie","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ross%2Fbotie","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ross%2Fbotie/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ross%2Fbotie/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ross%2Fbotie/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ross","download_url":"https://codeload.github.com/ross/botie/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248359823,"owners_count":21090594,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-10-13T14:16:05.479Z","updated_at":"2026-03-16T21:34:59.279Z","avatar_url":"https://github.com/ross.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"## Botie - Slack Slash Command Handling Made Easy\n\n![](/docs/images/example.png)\n\nBotie is a small python library built on [tornado](http://www.tornadoweb.org/en/stable/) to make writing [Slack Slash Commands](https://api.slack.com/slash-commands) super easy. \n\nSee the [example](/example.py) for a quick rundown on its use. For a real-world example see [RipeBot](https://github.com/ross/ripebot/).\n\n### Quickstart\n\n1) Visit https://\u003cyour-slack\u003e.slack.com/apps/manage/custom-integrations and click on \"Slash Commands\"\n1) Choose \"Add Configuration\"\n1) Enter `/echo` and click \"Add Slash Command Integration\"\n1) Enter http://\u003cpublicly-accessible-ip-address\u003e:8888/slack/echo in the \"URL\" field\n1) Copy the token and run `export SLACK_AUTH_TOKENS=\u003ctoken\u003e`\n1) Run ./script/bootstrap\n1) source env/bin/activate\n1) Run ./example.py --debug\n1) Optionally repeat the above steps for `/itsfine`, comma separating `SLACK_AUTH_TOKENS`\n1) In your slack type `/echo Hello World`\n1) If you installed `/itsfine` try `/itsfine help` to see how help works\n\n### Responding to messages basics\n\n#### Synchronous\n\nSynchronous responses are the easiest to think about and work with as they just include your bot's message in the response to the Slack command's request. There are several built in message types (PRs welcome for more) and the synchronous variants of these commands start with `write_` indicating that they're going to write the message into the body of the response. In general you'll almost always want to respond. If you don't the user's slash-command that invoked your bot won't appear in the channel which can be confusing. In cases where you plan to reply asynchronous, you should still do a `write_echo` in your handler function so that the user's command will appear immediately.\n\n#### Asynchronous\n\nAsynchronous messages are a lot more powerful. Unlike synchronous responses you can reply multiple times to provide status, progress, for for any reason you wish. If your command needs to do some work that might take a while to complete asynchronous is the way to go. You can immediately provide feedback by calling `write_echo` in the handler and then spend as much time as you like (up to 30m) building your response(s). The asynchronous message functions all start with `send_` indicating that they're going to send out a message to slack.\n\n#### Message types\n\nThere are three existing message types built in to Botie. It's expected that the number and flexibility of of these will grow over time as more interesting stuff is built with botie.\n\n* echo - Only available in a `write` variable, acknowledge that the command was received and tell slack to echo it back to the user\n* simple - A simple text message, note that simple is a bit misleading as there's a lot of options available through [message formating](https://api.slack.com/docs/message-formatting)\n* image - A combination text \u0026amp; image respons done as an attachment\n\n### Useful links\n\nAmazingly there's at least 5 pages hosted by Slack on writing slash commands. I've included those below along with a link to the message formatting docs which is likely to be useful. Otherwise search results are pretty useful here.\n\n* https://api.slack.com/docs/message-formatting\n* https://api.slack.com/slash-commands\n* https://api.slack.com/custom-integrations/slash-commands\n* https://api.slack.com/tutorials/your-first-slash-command\n* https://api.slack.com/tutorials/slash-commands-style-guide\n* https://api.slack.com/tutorials/easy-peasy-slash-commands\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fross%2Fbotie","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fross%2Fbotie","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fross%2Fbotie/lists"}