{"id":13601016,"url":"https://github.com/go-joe/joe","last_synced_at":"2025-05-16T18:08:06.062Z","repository":{"id":57486246,"uuid":"173565111","full_name":"go-joe/joe","owner":"go-joe","description":"A general-purpose bot library inspired by Hubot but written in Go.   :robot:","archived":false,"fork":false,"pushed_at":"2024-10-09T19:10:07.000Z","size":652,"stargazers_count":478,"open_issues_count":4,"forks_count":31,"subscribers_count":19,"default_branch":"master","last_synced_at":"2025-04-14T12:59:46.463Z","etag":null,"topics":["bot","chat","chatbot-framework","joe","slack"],"latest_commit_sha":null,"homepage":"https://joe-bot.net","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/go-joe.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","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}},"created_at":"2019-03-03T11:19:18.000Z","updated_at":"2025-04-12T20:17:17.000Z","dependencies_parsed_at":"2025-02-21T11:10:58.318Z","dependency_job_id":"4df10d7f-5e79-46ac-be48-969af7705924","html_url":"https://github.com/go-joe/joe","commit_stats":null,"previous_names":[],"tags_count":12,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/go-joe%2Fjoe","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/go-joe%2Fjoe/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/go-joe%2Fjoe/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/go-joe%2Fjoe/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/go-joe","download_url":"https://codeload.github.com/go-joe/joe/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254582907,"owners_count":22095518,"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":["bot","chat","chatbot-framework","joe","slack"],"created_at":"2024-08-01T18:00:52.544Z","updated_at":"2025-05-16T18:08:06.021Z","avatar_url":"https://github.com/go-joe.png","language":"Go","funding_links":[],"categories":["Go","Bot Building"],"sub_categories":["Free e-books"],"readme":"\u003ch1 align=\"center\"\u003eJoe Bot :robot:\u003c/h1\u003e\n\u003cp align=\"center\"\u003eA general-purpose bot library inspired by Hubot but written in Go.\u003c/p\u003e\n\u003cp align=\"center\"\u003e\n    \u003ca href=\"https://joe-bot.net\"\u003e\u003cimg src=\"https://img.shields.io/badge/website-joe--bot.net-brightgreen\"\u003e\u003c/a\u003e\n    \u003ca href=\"https://github.com/go-joe/joe/releases\"\u003e\u003cimg src=\"https://img.shields.io/github/tag/go-joe/joe.svg?label=version\u0026color=brightgreen\"\u003e\u003c/a\u003e\n    \u003ca href=\"https://circleci.com/gh/go-joe/joe/tree/master\"\u003e\u003cimg src=\"https://circleci.com/gh/go-joe/joe/tree/master.svg?style=shield\"\u003e\u003c/a\u003e\n    \u003ca href=\"https://goreportcard.com/report/github.com/go-joe/joe\"\u003e\u003cimg src=\"https://goreportcard.com/badge/github.com/go-joe/joe\"\u003e\u003c/a\u003e\n    \u003ca href=\"https://codecov.io/gh/go-joe/joe\"\u003e\u003cimg src=\"https://codecov.io/gh/go-joe/joe/branch/master/graph/badge.svg\"/\u003e\u003c/a\u003e\n    \u003ca href=\"https://godoc.org/github.com/go-joe/joe\"\u003e\u003cimg src=\"https://img.shields.io/badge/godoc-reference-blue.svg?color=blue\"\u003e\u003c/a\u003e\n    \u003ca href=\"https://github.com/go-joe/joe/blob/master/LICENSE\"\u003e\u003cimg src=\"https://img.shields.io/badge/license-BSD--3--Clause-blue.svg\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n---\n\nJoe is a library used to write chat bots in [the Go programming language][go].\nIt is very much inspired by the awesome [Hubot][hubot] framework developed by the\nfolks at Github and brings its power to people who want to implement chat bots using Go.\n\n## Getting Started\n\nJoe is a software library that is packaged as [Go module][go-modules]. You can get it via:\n\n```\ngo get github.com/go-joe/joe\n```\n\n### Example usage\n\n**You can find all code examples, more explanation and complete recipes at https://joe-bot.net**\n\nEach bot consists of a chat _Adapter_ (e.g. to integrate with Slack), a _Memory_\nimplementation to remember key-value data (e.g. using Redis) and a _Brain_ which\nroutes new messages or custom events (e.g. receiving an HTTP call) to the\ncorresponding registered _handler_ functions.\n\nBy default `joe.New(…)` uses the CLI adapter which makes the bot read messages\nfrom stdin and respond on stdout. Additionally the bot will store key value\ndata in-memory which means it will forget anything you told it when it is restarted.\nThis default setup is useful for local development without any dependencies but\nyou will quickly want to add other _Modules_ to extend the bots capabilities.\n\nThe following example connects the Bot with a Slack workspace and stores\nkey-value data in Redis. To allow the message handlers to access the memory we\ndefine them as functions on a custom `ExampleBot`type which embeds the `joe.Bot`.\n\n[embedmd]:# (_examples/02_useful/main.go)\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/go-joe/joe\"\n\t\"github.com/go-joe/redis-memory\"\n\t\"github.com/go-joe/slack-adapter/v2\"\n)\n\ntype ExampleBot struct {\n\t*joe.Bot\n}\n\nfunc main() {\n\tb := \u0026ExampleBot{\n\t\tBot: joe.New(\"example\",\n\t\t\tredis.Memory(\"localhost:6379\"),\n\t\t\tslack.Adapter(\"xoxb-1452345…\"),\n\t\t),\n\t}\n\n\tb.Respond(\"remember (.+) is (.+)\", b.Remember)\n\tb.Respond(\"what is (.+)\", b.WhatIs)\n\n\terr := b.Run()\n\tif err != nil {\n\t\tb.Logger.Fatal(err.Error())\n\t}\n}\n\nfunc (b *ExampleBot) Remember(msg joe.Message) error {\n\tkey, value := msg.Matches[0], msg.Matches[1]\n\tmsg.Respond(\"OK, I'll remember %s is %s\", key, value)\n\treturn b.Store.Set(key, value)\n}\n\nfunc (b *ExampleBot) WhatIs(msg joe.Message) error {\n\tkey := msg.Matches[0]\n\tvar value string\n\tok, err := b.Store.Get(key, \u0026value)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"failed to retrieve key %q from brain: %w\", key, err)\n\t}\n\n\tif ok {\n\t\tmsg.Respond(\"%s is %s\", key, value)\n\t} else {\n\t\tmsg.Respond(\"I do not remember %q\", key)\n\t}\n\n\treturn nil\n}\n```\n\n## Available modules\n\nJoe ships with no third-party modules such as Redis integration to avoid pulling\nin more dependencies than you actually require. There are however already some\nmodules that you can use directly to extend the functionality of your bot without\nwriting too much code yourself.\n\nIf you have written a module and want to share it, please add it to this list and\nopen a pull request.\n\n### Chat Adapters\n\n- Slack Adapter: https://github.com/go-joe/slack-adapter\n- Rocket.Chat Adapter: https://github.com/dwmunster/rocket-adapter\n- Telegram Adapter: https://github.com/robertgzr/joe-telegram-adapter\n- IRC Adapter: https://github.com/akrennmair/joe-irc-adapter\n- Mattermost Adapter: https://github.com/dwmunster/joe-mattermost-adapter\n- VK Adapter: https://github.com/tdakkota/joe-vk-adapter\n\n### Memory Modules\n\n- Redis Memory: https://github.com/go-joe/redis-memory\n- File Memory: https://github.com/go-joe/file-memory\n- Bolt Memory: https://github.com/robertgzr/joe-bolt-memory\n- Sqlite Memory: https://github.com/warmans/sqlite-memory\n\n### Other Modules\n\n- HTTP Server: https://github.com/go-joe/http-server\n- Cron Jobs: https://github.com/go-joe/cron\n\n## Built With\n\n* [zap](https://github.com/uber-go/zap) - Blazing fast, structured, leveled logging in Go\n* [multierr](https://github.com/uber-go/multierr) - Package multierr allows combining one or more errors together \n* [testify](https://github.com/stretchr/testify) - A simple unit test library\n\n## Contributing\n\nPlease read [CONTRIBUTING.md](CONTRIBUTING.md) for details on our code of\nconduct and on the process for submitting pull requests to this repository.\n\n## Versioning\n\n**THIS SOFTWARE IS STILL IN ALPHA AND THERE ARE NO GUARANTEES REGARDING API STABILITY YET.**\n\nAll significant (e.g. breaking) changes are documented in the [CHANGELOG.md](CHANGELOG.md).\n\nAfter the v1.0 release we plan to use [SemVer](http://semver.org/) for versioning.\nFor the versions available, see the [tags on this repository][tags]. \n\n## Authors\n\n- **Friedrich Große** - *Initial work* - [fgrosse](https://github.com/fgrosse)\n\nSee also the list of [contributors][contributors] who participated in this project.\n\n## License\n\nThis project is licensed under the BSD-3-Clause License - see the [LICENSE](LICENSE) file for details.\n\n## Acknowledgments\n\n- [Hubot][hubot] and its great community for the inspiration\n- [embedmd][campoy-embedmd] for a cool tool to embed source code in markdown files\n\n[go]: https://golang.org\n[hubot]: https://hubot.github.com/\n[go-modules]: https://github.com/golang/go/wiki/Modules\n[joe-http]: https://github.com/go-joe/http-server\n[tags]: https://github.com/go-joe/joe/tags\n[contributors]: https://github.com/go-joe/joe/contributors\n[campoy-embedmd]: https://github.com/campoy/embedmd\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgo-joe%2Fjoe","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgo-joe%2Fjoe","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgo-joe%2Fjoe/lists"}