{"id":14779787,"url":"https://github.com/slack-io/slacker","last_synced_at":"2026-01-23T00:22:24.288Z","repository":{"id":208016351,"uuid":"720625393","full_name":"slack-io/slacker","owner":"slack-io","description":"Slack Bot Framework","archived":false,"fork":false,"pushed_at":"2024-11-16T01:17:00.000Z","size":594,"stargazers_count":58,"open_issues_count":9,"forks_count":16,"subscribers_count":4,"default_branch":"main","last_synced_at":"2025-09-14T22:37:23.498Z","etag":null,"topics":["bot","bot-framework","chat","chatops","command","slack","slack-api","slack-bot"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/slack-io.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2023-11-19T03:52:35.000Z","updated_at":"2025-09-08T15:32:18.000Z","dependencies_parsed_at":"2024-11-16T02:21:34.284Z","dependency_job_id":"81a93b33-8cc6-401c-8c7e-c2a6992c3be8","html_url":"https://github.com/slack-io/slacker","commit_stats":null,"previous_names":["slack-io/slacker"],"tags_count":16,"template":false,"template_full_name":null,"purl":"pkg:github/slack-io/slacker","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/slack-io%2Fslacker","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/slack-io%2Fslacker/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/slack-io%2Fslacker/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/slack-io%2Fslacker/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/slack-io","download_url":"https://codeload.github.com/slack-io/slacker/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/slack-io%2Fslacker/sbom","scorecard":{"id":830911,"data":{"date":"2025-08-11","repo":{"name":"github.com/slack-io/slacker","commit":"15e051adfab666ec5615cf8380952f3e21a313aa"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":4.4,"checks":[{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Code-Review","score":2,"reason":"Found 8/28 approved changesets -- score normalized to 2","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/commit-message-check.yaml:1","Warn: no topLevel permission defined: .github/workflows/goreleaser.yaml:1","Warn: no topLevel permission defined: .github/workflows/reviewdog.yaml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: third-party GitHubAction not pinned by hash: .github/workflows/commit-message-check.yaml:16: update your workflow using https://app.stepsecurity.io/secureworkflow/slack-io/slacker/commit-message-check.yaml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/commit-message-check.yaml:29: update your workflow using https://app.stepsecurity.io/secureworkflow/slack-io/slacker/commit-message-check.yaml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/goreleaser.yaml:18: update your workflow using https://app.stepsecurity.io/secureworkflow/slack-io/slacker/goreleaser.yaml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/goreleaser.yaml:23: update your workflow using https://app.stepsecurity.io/secureworkflow/slack-io/slacker/goreleaser.yaml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/goreleaser.yaml:28: update your workflow using https://app.stepsecurity.io/secureworkflow/slack-io/slacker/goreleaser.yaml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/reviewdog.yaml:9: update your workflow using https://app.stepsecurity.io/secureworkflow/slack-io/slacker/reviewdog.yaml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/reviewdog.yaml:11: update your workflow using https://app.stepsecurity.io/secureworkflow/slack-io/slacker/reviewdog.yaml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/reviewdog.yaml:15: update your workflow using https://app.stepsecurity.io/secureworkflow/slack-io/slacker/reviewdog.yaml/main?enable=pin","Info:   0 out of   4 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   4 third-party GitHubAction dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Packaging","score":10,"reason":"packaging workflow detected","details":["Info: Project packages its releases by way of GitHub Actions.: .github/workflows/goreleaser.yaml:10"],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 11 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-23T17:46:41.457Z","repository_id":208016351,"created_at":"2025-08-23T17:46:41.457Z","updated_at":"2025-08-23T17:46:41.457Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28675798,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-22T20:48:19.482Z","status":"ssl_error","status_checked_at":"2026-01-22T20:48:14.968Z","response_time":144,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["bot","bot-framework","chat","chatops","command","slack","slack-api","slack-bot"],"created_at":"2024-09-17T01:00:59.571Z","updated_at":"2026-01-23T00:22:19.274Z","avatar_url":"https://github.com/slack-io.png","language":"Go","readme":"# slacker [![Slack](https://img.shields.io/badge/slack-%23slacker--framework-orange)](https://gophers.slack.com/archives/C051MGM3GFL) [![Go Report Card](https://goreportcard.com/badge/github.com/slack-io/slacker)](https://goreportcard.com/report/github.com/slack-io/slacker) [![GoDoc](https://pkg.go.dev/badge/github.com/slack-io/slacker?utm_source=godoc)](https://pkg.go.dev/github.com/slack-io/slacker) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) [![Mentioned in Awesome Go](https://awesome.re/mentioned-badge.svg)](https://github.com/avelino/awesome-go) \n\nBuilt on top of the Slack API [github.com/slack-go/slack](https://github.com/slack-go/slack), Slacker is a low-friction framework for creating Slack Bots.\n\n## Features\n\n- Supports Slack Apps using [Socket Mode](https://api.slack.com/apis/connections/socket)\n- Easy definitions of commands and their input\n- Built-in `help` command\n- Bot responds to mentions and direct messages\n- Simple parsing of String, Integer, Float and Boolean parameters\n- Customizable, intuitive and with many examples to follow\n- Replies can be new messages or in threads\n- Replies can be ephemeral, scheduled, updated or deleted\n- Supports Slash Commands and Interactive Messages\n- Supports `slog.Logger`\n- Supports `context.Context`\n- Supports middlewares \u0026 grouping of commands\n- Supports Cron Jobs using [https://github.com/robfig/cron](https://github.com/robfig/cron)\n- Handlers run concurrently via goroutines\n- Full access to the Slack API [github.com/slack-go/slack](https://github.com/slack-go/slack)\n\n# Install\n\n```\ngo get github.com/slack-io/slacker\n```\n\n# Examples\n\nWe wrote extensive [examples](./examples) to help you familiarize yourself with Slacker!\n\n# Preparing your Slack App\n\nTo use Slacker you'll need to create a Slack App, either [manually](#manual-steps) or with an [app manifest](#app-manifest). The app manifest feature is easier, but is a beta feature from Slack and thus may break/change without much notice.\n\n## Manual Steps\n\nSlacker works by communicating with the Slack [Events API](https://api.slack.com/apis/connections/events-api) using the [Socket Mode](https://api.slack.com/apis/connections/socket) connection protocol.\n\nTo get started, you must have or create a [Slack App](https://api.slack.com/apps?new_app=1) and enable `Socket Mode`, which will generate your app token (`SLACK_APP_TOKEN` in the examples) that will be needed to authenticate.\n\nAdditionally, you need to subscribe to events for your bot to respond to under the `Event Subscriptions` section. Common event subscriptions for bots include `app_mention` or `message.im`.\n\nAfter setting up your subscriptions, add scopes necessary to your bot in the `OAuth \u0026 Permissions`. The following scopes are recommended for getting started, though you may need to add/remove scopes depending on your bots purpose:\n\n* `app_mentions:read`\n* `channels:history`\n* `chat:write`\n* `groups:history`\n* `im:history`\n* `mpim:history`\n\nOnce you've selected your scopes install your app to the workspace and navigate back to the `OAuth \u0026 Permissions` section. Here you can retrieve yor bot's OAuth token (`SLACK_BOT_TOKEN` in the examples) from the top of the page.\n\nWith both tokens in hand, you can now proceed with the examples below.\n\n## App Manifest\n\nSlack [App Manifests](https://api.slack.com/reference/manifests) make it easy to share a app configurations. We provide a [simple manifest](./app_manifest/manifest.yml) that should work with all the examples provided below.\n\nThe manifest provided will send all messages in channels your bot is in to the bot (including DMs) and not just ones that actually mention them in the message.\n\nIf you wish to only have your bot respond to messages they are directly messaged in, you will need to add the `app_mentions:read` scope, and remove:\n\n- `im:history`       # single-person dm\n- `mpim:history`     # multi-person dm\n- `channels:history` # public channels\n- `groups:history`   # private channels\n\nYou'll also need to adjust the event subscriptions, adding `app_mention` and removing:\n\n- `message.channels`\n- `message.groups`\n- `message.im`\n- `message.mpim`\n\n# Contributing / Submitting an Issue\n\nPlease review our [Contribution Guidelines](CONTRIBUTING.md) if you have found\nan issue with Slacker or wish to contribute to the project.\n\n# Troubleshooting\n\n## My bot is not responding to events\n\nThere are a few common issues that can cause this:\n\n* The OAuth (bot) Token may be incorrect. In this case authentication does not fail like it does if the App Token is incorrect, and the bot will simply have no scopes and be unable to respond.\n* Required scopes are missing from the OAuth (bot) Token. Similar to the incorrect OAuth Token, without the necessary scopes, the bot can not respond.\n* The bot does not have the correct event subscriptions setup, and is not receiving events to respond to.\n","funding_links":[],"categories":["Bot Building","Recently Updated","Bot建设"],"sub_categories":["[Sep 15, 2024](/content/2024/09/15/README.md)"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fslack-io%2Fslacker","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fslack-io%2Fslacker","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fslack-io%2Fslacker/lists"}