{"id":28305751,"url":"https://github.com/maxim-mityutko/slack-extendable-bot","last_synced_at":"2026-04-14T04:31:38.024Z","repository":{"id":194082856,"uuid":"229272094","full_name":"maxim-mityutko/slack-extendable-bot","owner":"maxim-mityutko","description":"Bot for Slack with plugin functionality","archived":false,"fork":false,"pushed_at":"2020-02-14T23:52:34.000Z","size":44,"stargazers_count":0,"open_issues_count":1,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-08-09T10:12:30.052Z","etag":null,"topics":["aws","aws-dynamodb","bot","connector","docker","plugin","python","python3","slack"],"latest_commit_sha":null,"homepage":"","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/maxim-mityutko.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}},"created_at":"2019-12-20T13:42:36.000Z","updated_at":"2021-01-08T20:27:18.000Z","dependencies_parsed_at":"2023-09-11T15:56:50.694Z","dependency_job_id":null,"html_url":"https://github.com/maxim-mityutko/slack-extendable-bot","commit_stats":null,"previous_names":["maxim-mityutko/slack-extendable-bot"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/maxim-mityutko/slack-extendable-bot","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maxim-mityutko%2Fslack-extendable-bot","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maxim-mityutko%2Fslack-extendable-bot/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maxim-mityutko%2Fslack-extendable-bot/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maxim-mityutko%2Fslack-extendable-bot/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/maxim-mityutko","download_url":"https://codeload.github.com/maxim-mityutko/slack-extendable-bot/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maxim-mityutko%2Fslack-extendable-bot/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31782736,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-14T02:24:21.117Z","status":"ssl_error","status_checked_at":"2026-04-14T02:24:20.627Z","response_time":153,"last_error":"SSL_read: 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":["aws","aws-dynamodb","bot","connector","docker","plugin","python","python3","slack"],"created_at":"2025-05-24T02:13:16.820Z","updated_at":"2026-04-14T04:31:38.008Z","avatar_url":"https://github.com/maxim-mityutko.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![Requirements Status](https://requires.io/github/maxim-mityutko/slack-bot/requirements.svg?branch=master)](https://requires.io/github/maxim-mityutko/slack-bot/requirements/?branch=master)\n# Slack Extendable Bot (S.E.B)\n\nThe goal of this project is to create a flexible bot for Slack that can be integrated with various services via the API.\nExtensibility of the solution is achieved by metadata driven plugins of two types: __connector__ and __payload__.\n\n__Connector__ file has all the required data to pass the OAuth2 authentication (both 2-leg or 3-leg is supported) through\nthe OAuth wrapper class. The connectivity options can be added by also importing 3rd party modules that provide\ncustom authentication wrappers for the required services. One connector can be used by multiple payloads.\n\n__Payload__ file specifies the service API interaction steps, which in the simplest scenario just calling the specific\nAPI and retrieving the value, but can also be extended with custom functions. The response of the payload scenario is\nwrapped in a JSON compatible with Slack API. \n\nBot itself is headless but to facilitate the authentication process the simple Flask app is implemented. Both can and \nshould be deployed in a separate containers.  \n\n## Project Structure\n```\n    .\n    ├── aws                 # AWS Cloudformation stack templates\n    ├── bot                 # Bot files\n    ├── common              # Common modules used across the project\n    │   └── cls             # Classes used across the project\n    ├── core                # Modules that facilitate bot and web server functionality\n    ├── service             # Root for connectors and payloads\n    │   ├── connector       # Available connector definitions\n    │   └── payload         # Available payload definitions\n    ├── web                 # Web server files\n    └── README.md\n```\n\n## ToDo\n*  Async execution\n\n## Deployment\n* Setup AWS stack with Cloudformation scripts provided in _/aws_ folder.\n* Spin up docker containers. The easiest and fastest approach is to use provided _docker-compose_. \n  \n  NOTE: Update __secrets.env__ before building the containers, 'access key' and 'key secret' are available as the output\n  of Cloudformation stack.\n    ```bash\n    # Build container and start\n    docker-compose up\n    # Stop containers\n    docker-compose stop\n    ```\n\n### Balena Cloud\nCurrently bot is running in Docker environment on Raspberry Pi v4 running BalenaOS. Their service handles deployment \nand the build in the cloud and the code is pushed via the Balena CLI, for more information go to:\n[Balena CLI](https://github.com/balena-io/balena-cli/blob/master/INSTALL.md)\n```bash\nbalena push \u003caplication_name\u003e\n```  \n### Docker\nUseful Docker commands:\n```bash\n# Check if Docker is installed\ndocker version\n# Remove existing container\ndocker rm \u003ccontainer\u003e\n# Build\ndocker build --tag \u003ctag\u003e .\n# Run\n# Add -d to start as daemon\ndocker run --name \u003cname\u003e \u003ccontainer\u003e\n# or to expose Flask\ndocker run --name \u003cname\u003e -p 65010:65010 \u003ccontainer\u003e\n\n# Execute command in container\ndocker exec -it \u003cname\u003e /bin/sh\n# View container logs\ndocker logs \u003ccontainer\u003e\n# Start container\ndocker start \u003ccontainer\u003e\n# Stop container\ndocker stop \u003ccontainer\u003e\n# View internal container IP address\ndocker inspect \u003ccontainer\u003e | grep Address\n```\n\n## Development\n\nAWS specific environment variables should be setup in development environment:\n* AWS_REGION_NAME\n* AWS_ACCESS_KEY_ID\n* AWS_SECRET_ACCESS_KEY\n\nAdd persistent environment variables on Ubuntu dev box:\n```bash\nsudo -H gedit /etc/environment\n```\nEverything else is pulled from DynamoDb.\n\n## Tokens\nAll tokens and secrets are stored in the DynamoDb tables: 'config' for Slack related settings, 'service' for connector\nsettings. Upon startup they are retrieved from the cloud and pushed to environment variables with names specified below.\n\n### Bot\nGenerate token - [Slack Apps](https://api.slack.com/apps)\n*  SLACK_BOT_TOKEN\n*  SLACK_CLIENT_ID\n*  SLACK_CLIENT_SECRET\n*  SLACK_OAUTH_ACCESS_URL\n\n### Services\n*  \u003c\u003cSERVICE_NAME\u003e\u003e_CLIENT_ID\n*  \u003c\u003cSERVICE_NAME\u003e\u003e_CLIENT_SECRET\n\n#### Currently Available\n[Discogs](https://www.discogs.com/settings/developers)\\\n[Twitter](https://developer.twitter.com/en/apps)\\\n[Mixcloud](https://www.mixcloud.com/developers/)\n\n\n## Useful links\n[Discogs API Client](https://github.com/discogs/discogs_client)\n\n[Discogs OAuth Example](https://github.com/jesseward/discogs-oauth-example)\n\n[Instagram Authentication](https://www.instagram.com/developer/authentication/)\n\n[Slack - Block Kit Builder](https://api.slack.com/tools/block-kit-builder)\n\n[Slack - Unfurling Links In Messages](https://api.slack.com/docs/message-link-unfurling#classic_unfurling)\n\n[Slack API Home](https://api.slack.com/)\n\n[Slack API - Python](https://python-slackclient.readthedocs.io/en/latest/index.html)\n\n## License\n[MIT](https://choosealicense.com/licenses/mit/)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmaxim-mityutko%2Fslack-extendable-bot","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmaxim-mityutko%2Fslack-extendable-bot","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmaxim-mityutko%2Fslack-extendable-bot/lists"}