{"id":18002565,"url":"https://github.com/dvcrn/slack-thread-summarizer","last_synced_at":"2026-03-02T10:31:00.364Z","repository":{"id":195943187,"uuid":"614694629","full_name":"dvcrn/slack-thread-summarizer","owner":"dvcrn","description":"GPT powered slack bot for summarizing/acting on messages and threads, written in Elixir","archived":false,"fork":false,"pushed_at":"2023-10-20T10:03:31.000Z","size":705,"stargazers_count":18,"open_issues_count":0,"forks_count":2,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-04-07T05:26:55.653Z","etag":null,"topics":["chatgpt","elixir","gpt","openai","slack"],"latest_commit_sha":null,"homepage":"","language":"Elixir","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/dvcrn.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":"2023-03-16T05:51:33.000Z","updated_at":"2025-01-13T19:28:37.000Z","dependencies_parsed_at":null,"dependency_job_id":"c91672c3-f9c8-4939-8529-0e672e08f20c","html_url":"https://github.com/dvcrn/slack-thread-summarizer","commit_stats":null,"previous_names":["dvcrn/gpt-slack-bot","dvcrn/slack-thread-summarizer"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/dvcrn/slack-thread-summarizer","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dvcrn%2Fslack-thread-summarizer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dvcrn%2Fslack-thread-summarizer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dvcrn%2Fslack-thread-summarizer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dvcrn%2Fslack-thread-summarizer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dvcrn","download_url":"https://codeload.github.com/dvcrn/slack-thread-summarizer/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dvcrn%2Fslack-thread-summarizer/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29998512,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-02T09:59:02.300Z","status":"ssl_error","status_checked_at":"2026-03-02T09:59:02.001Z","response_time":60,"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":["chatgpt","elixir","gpt","openai","slack"],"created_at":"2024-10-29T23:22:37.550Z","updated_at":"2026-03-02T10:31:00.109Z","avatar_url":"https://github.com/dvcrn.png","language":"Elixir","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Elixir GPT Slack Bot\n\nSlackbot written in Elixir or act on the content of slack messages with ChatGPT\n\nOriginally written to summarize the content of a slack thread: Invite it to a channel, then mention it (in a thread) and it will generate a summary of what has been said.\n\nThe bot takes additional instructions like \"summarize this in Spanish\" or \"summarize this as a poem\".\n\nSee \"Other fun things you can do\" for inspiration\n\n![screenshot](screenshot.png)\n\n![poem](poem.png)\n\n## Installation\n\nCreate a new slack app, go to manifests and paste this manifest: \n\n```json\n{\n    \"display_information\": {\n        \"name\": \"Thread Summarizer\",\n        \"description\": \"Hi, I can summarize threads for you!\",\n        \"background_color\": \"#1a3891\",\n        \"long_description\": \"Mention me in a thread, and I will try to give you a concise summary of what has been said. I may not always be correct, but I hope I can help you anyway!\\r\\n\\r\\nUsage:\\r\\n- Invite me to a channel\\r\\n- In a thread, @Thread Summarizer mention me\"\n    },\n    \"features\": {\n        \"bot_user\": {\n            \"display_name\": \"Thread Summarizer\",\n            \"always_online\": true\n        }\n    },\n    \"oauth_config\": {\n        \"scopes\": {\n            \"user\": [\n                \"channels:history\"\n            ],\n            \"bot\": [\n                \"app_mentions:read\",\n                \"channels:history\",\n                \"channels:join\",\n                \"chat:write\",\n                \"chat:write.customize\",\n                \"chat:write.public\",\n                \"commands\",\n                \"groups:history\",\n                \"reactions:read\",\n                \"reactions:write\",\n                \"users:read\"\n            ]\n        }\n    },\n    \"settings\": {\n        \"event_subscriptions\": {\n            \"bot_events\": [\n                \"app_mention\",\n                \"message.channels\",\n                \"reaction_added\"\n            ]\n        },\n        \"interactivity\": {\n            \"is_enabled\": true\n        },\n        \"org_deploy_enabled\": false,\n        \"socket_mode_enabled\": true,\n        \"token_rotation_enabled\": false\n    }\n}\n```\n\nNext, click on \"Basic Information\", scroll down to \"App-Level Tokens\". This is your `slack_app_token`.\n\nClick on \"OAuth \u0026 Permission\", install the app into your workspace, then copy the \"Bot User OAuth Token\". This is your `slack_web_token`\n\n`runtime.exs` is setup to read those from the environment, so set the following env keys: \n\n```elixir\nconfig :summarizer,\n  slack_app_token: System.get_env(\"SLACK_APP_TOKEN\"),\n  slack_web_token: System.get_env(\"SLACK_WEB_TOKEN\")\n\nconfig :ex_openai,\n  api_key: System.get_env(\"OPENAI_API_KEY\"),\n  organization_key: System.get_env(\"OPENAI_ORGANIZATION_KEY\"),\n  http_options: [recv_timeout: 50_000]\n```\n\nIn `config.exs`, you have the option to change the prompt used, or to enable whether to also respond to normal @mentions outside of threads.\n\nThat's it!\n\n## Usage \n\nStart it with `mix`\n\n## Tweaking\n\n- Tweak the prompt in `config.exs`\n- To make the bot more random, go into `chatgpt.ex` and change the `temperature` setting: `temperature: 0.6`. A higher temperature is more randomness, a lower temperature is more predictable\n\n## Deploy to fly.io\n\nIncluded is a simple `fly.toml` file that lets you deploy the bot to https://fly.io\n\n- Change `app = \"mybot\"` in fly.toml\n- Run `fly launch` \n- Set env variables with `fly secrets set XXX=YYY`\n\n## Other fun things you can do\n\nChange the prompt and enable `enable_normal_mentions` to create a sassy snark chatbot, fun for the whole family \n\n![aikun](aikun.png)","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdvcrn%2Fslack-thread-summarizer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdvcrn%2Fslack-thread-summarizer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdvcrn%2Fslack-thread-summarizer/lists"}