{"id":19131741,"url":"https://github.com/mwerner/steak","last_synced_at":"2026-06-08T13:30:15.677Z","repository":{"id":74449313,"uuid":"50964916","full_name":"mwerner/steak","owner":"mwerner","description":"Slackbot","archived":false,"fork":false,"pushed_at":"2016-03-04T03:27:40.000Z","size":106,"stargazers_count":0,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-01-03T11:26:40.160Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"CSS","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/mwerner.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,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2016-02-03T01:29:03.000Z","updated_at":"2016-03-04T03:24:51.000Z","dependencies_parsed_at":null,"dependency_job_id":"6fe93b8e-c209-4a91-8f26-852bb1984b80","html_url":"https://github.com/mwerner/steak","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/mwerner%2Fsteak","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mwerner%2Fsteak/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mwerner%2Fsteak/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mwerner%2Fsteak/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mwerner","download_url":"https://codeload.github.com/mwerner/steak/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":240211655,"owners_count":19765869,"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-11-09T06:15:55.565Z","updated_at":"2026-06-08T13:30:15.539Z","avatar_url":"https://github.com/mwerner.png","language":"CSS","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Steak\n\n## Using Steak\n\nYou don't have to touch anything, except the files in the `./bots/` directory. You can create a file for the bot you want to make, and everything else will hook up on it's own.\n\nBot's are declarative, you can declare some characteristics at the top of the class. The only method you need to provide is `response`.\n\nExample Bot:\n\n    class FooBot \u003c Bot\n      observes %r[foo]\n\n      def response\n        compose_message(text: 'bar')\n      end\n    end\n\nThis bot will observe all messages, and say `\"bar\"` whenever the word `foo` is seen.\n\n#### Declarative options\n- `username`: The name used when a bot speaks\n- `avatar`: The image used for the bot's image\n- `description`: A description of the bot's purpose. Provided when calling `/cmd help`\n- `observes`: The pattern provided will match against all messages, calling `#response` when there is a match\n- `command`: The string of the slash command set up on slack.\n\nYou can have both `observes` and `command` on the same bot, for both passive and explicit behavior. Make sure you check the type of behavior requested in the `#response`. You can use `#invoked?` to determine if it was a slash command invocation.\n\nWhen you specify a `command` on a bot, Steak will add a route to the server to accept a path by the same name to your router. You need to use that same string in your Slack configuration of your slash command.\n\n#### Responses\n\nThe `Bot` class provides a helper method `#compose_message`, which accepts a hash of attributes. By passing the `text` attribute, you can specify what the bot posts to the chat room.\n\nThe string the `#response` method returns will be sent as a private response to the user that invoked the command.\n\n## Environment\n\n`REDISCLOUD_URL`: For heroku\n\n`RACK_ENV`: `[development, production]`\n\n`SLACK_CHANNEL`: `#fuuu`\n\n`SLACK_INCOMING_PATH`: Incoming webhooks path ex: `/services/T09L19D91/B0CMHUACB/2TCE5yv123K8rsOH3M70gcpVL`\n\nFound at: slack.com/apps/manage/custom-integrations\n\n`SLACK_TEAM`: 'teamsubdomain'\n\n## Getting Started\n\nRun:\n\n  cp .env.example .env\n  bundle install\n  bundle exec shotgun config.ru\n\nTo access,\n\n  curl -v http://0.0.0.0:9292/gif?text=money\n\n## Deploying\n\n  git push heroku master\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmwerner%2Fsteak","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmwerner%2Fsteak","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmwerner%2Fsteak/lists"}