{"id":21569315,"url":"https://github.com/ka0un/slackl","last_synced_at":"2026-01-26T09:34:40.082Z","repository":{"id":264347886,"uuid":"893114334","full_name":"ka0un/SlackL","owner":"ka0un","description":"Message Translations In Slack | DeepL Slack Integration","archived":false,"fork":false,"pushed_at":"2024-11-24T14:00:19.000Z","size":2872,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-30T16:18:11.549Z","etag":null,"topics":["slack","slack-bot","slack-translate","translation-bot","translations"],"latest_commit_sha":null,"homepage":"https://slackl.carrd.co/","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ka0un.png","metadata":{"files":{"readme":"README.MD","changelog":null,"contributing":null,"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":"2024-11-23T15:16:13.000Z","updated_at":"2024-12-02T12:25:15.000Z","dependencies_parsed_at":"2024-11-23T16:25:39.479Z","dependency_job_id":"caa05035-44a2-4bfe-a98c-0b2d6803a2fc","html_url":"https://github.com/ka0un/SlackL","commit_stats":null,"previous_names":["ka0un/slackl"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ka0un%2FSlackL","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ka0un%2FSlackL/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ka0un%2FSlackL/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ka0un%2FSlackL/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ka0un","download_url":"https://codeload.github.com/ka0un/SlackL/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":251739678,"owners_count":21635894,"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":["slack","slack-bot","slack-translate","translation-bot","translations"],"created_at":"2024-11-24T11:09:07.367Z","updated_at":"2026-01-26T09:34:40.039Z","avatar_url":"https://github.com/ka0un.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"![SlackL Cover Image](https://github.com/ka0un/SlackL/blob/main/cover.png?raw=true)\n\n## Overview\nSlackL is a Slack bot that provides DeepL translations for messages in Slack.\n\n## Features\n\n\u003ctable\u003e\n\u003ctr\u003e\n  \u003ctd width=\"50%\"\u003e\n    \u003ch3 align=\"center\"\u003eTranslate Slash Command\u003c/h3\u003e\n    \u003cp align=\"center\"\u003e\n      \u003cimg src=\"https://github.com/ka0un/SlackL/blob/main/images/SlackLDoc2.gif?raw=true\" alt=\"Slash Commands\" width=\"400\"\u003e\n    \u003c/p\u003e\n    \u003cp align=\"center\"\u003e\n       Quickly translate any text from the Slack UI using the /translate command\n    \u003c/p\u003e\n  \u003c/td\u003e\n  \u003ctd width=\"50%\"\u003e\n    \u003ch3 align=\"center\"\u003eTranslate Message Shortcut\u003c/h3\u003e\n    \u003cp align=\"center\"\u003e\n      \u003cimg src=\"https://github.com/ka0un/SlackL/blob/main/images/SlackLDoc1.gif?raw=true\" alt=\"Translate Message\" width=\"400\"\u003e\n    \u003c/p\u003e\n    \u003cp align=\"center\"\u003e\n      translate any old or newly received messages by pressing the ... (more actions) button on a message and selecting the \"Translate Message\" option.\n    \u003c/p\u003e\n  \u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n  \u003ctd width=\"50%\"\u003e\n    \u003ch3 align=\"center\"\u003eAutomatic Message Translations\u003c/h3\u003e\n    \u003cp align=\"center\"\u003e\n      \u003cimg src=\"https://github.com/ka0un/SlackL/blob/main/images/SlackLDoc3.gif?raw=true\" alt=\"Automatic Message Translations\" width=\"400\"\u003e\n    \u003c/p\u003e\n    \u003cp align=\"center\"\u003e\n      Automatic Message Translations for Specific Channels feature allows users to configure automatic translations for specific channels using commands. This feature is customizable, enabling users to set up and manage translation settings according to their preferences.\n    \u003c/p\u003e\n  \u003c/td\u003e\n  \u003ctd width=\"50%\"\u003e\n    \u003ch3 align=\"center\"\u003eFree and OpenSource\u003c/h3\u003e\n   \u003cp align=\"center\"\u003e\n      \u003cimg src=\"https://th.bing.com/th/id/R.e56ab0c3971143aaa96f00fc5d39c15c?rik=1TQSbEpTw0mmbw\u0026pid=ImgRaw\u0026r=0\" alt=\"Automatic Message Translations\" width=\"400\"\u003e\n    \u003c/p\u003e\n    \u003cp align=\"center\"\u003e\n      SlackL is a free, open-source, and customizable self-hosted solution. By hosting it on your own infrastructure, you maintain complete control over the implementation.\n    \u003c/p\u003e\n  \u003c/td\u003e\n\u003c/tr\u003e\n\u003c/table\u003e\n\nDeveloped at [SoftSora](https://softsora.com) 💖\n\n## Prerequisites\n- Java 17\n- Maven\n- A Slack workspace\n- DeepL API key\n\n## Step-by-Step Instructions\n\n### 1. Configure Slack Bot\n\n#### Create a Slack App\n1. Go to the [Slack API](https://api.slack.com/apps) and create a new app.\n2. Choose \"From an app manifest\" and select the workspace.\n3. Copy the contents of the provided `manifest.json` file and paste it into the manifest editor.\n4. Replace the placeholders in the `manifest.json` file with temporary URLs (e.g., `https://example.com`).\n5. Click \"Next\" and review the settings.\n6. Click \"Create\" to create the app.\n\n#### Install the App\n1. Navigate to **OAuth \u0026 Permissions**.\n2. Install the app to your workspace and copy the **Bot User OAuth Token**.\n\n### 2. Configure Constants\n\n#### Update `Constants.java`\nEdit the `src/main/java/com/hapangama/Constants.java` file and set the following constants:\n```java\npackage com.hapangama;\n\npublic interface Constants {\n    String SLACK_BOT_TOKEN = \"your-slack-bot-token\";  // make sure to include the token that start with xoxb\n    String SLACK_SIGNING_SECRET = \"your-slack-signing-secret\";\n    String SLACK_CLIENT_SECRET = \"your-slack-client-secret\";\n    String DEEPL_API_KEY = \"your-deepl-api-key\";\n    int SLACK_PORT = 3000;\n    //...\n}\n```\n\n### 3. Build and Deploy\n\n#### Build the Project\n1. Open a terminal and navigate to the project directory.\n2. Run the following command to build the project:\n   ```sh\n   mvn clean package\n   ```\n\n#### Run the Application\n1. Run the application using the following command:\n   ```sh\n   java -jar target/SlackL-1.0-SNAPSHOT.jar\n   ```\n\n### 4. Update Slack App with Actual URLs\n\n1. After deploying your application, obtain the actual URLs for your server endpoints.\n2. Go back to the [Slack API](https://api.slack.com/apps) and select your app.\n3. Navigate to **Event Subscriptions** and update the **Request URL** with your actual server endpoint.\n4. Navigate to **Slash Commands** and update the URLs for each command with your actual server endpoint.\n5. Save the changes.\n\nYour Slack bot should now be up and running with the correct URLs. You can test it by using the configured slash commands in your Slack workspace.\n\n### Updated `manifest.json`\n\n```json\n{\n    \"display_information\": {\n        \"name\": \"SlackL\",\n        \"description\": \"DeepL Translations For Slack\",\n        \"background_color\": \"#142230\"\n    },\n    \"features\": {\n        \"bot_user\": {\n            \"display_name\": \"SlackL\",\n            \"always_online\": false\n        },\n        \"shortcuts\": [\n            {\n                \"name\": \"Translate Message\",\n                \"type\": \"message\",\n                \"callback_id\": \"translate_message_sk\",\n                \"description\": \"Translate Message\"\n            }\n        ],\n        \"slash_commands\": [\n            {\n                \"command\": \"/ping\",\n                \"url\": \"https://your-domain.com:port\",\n                \"description\": \"Test Translation Bot\",\n                \"should_escape\": false\n            },\n            {\n                \"command\": \"/translate\",\n                \"url\": \"https://your-domain.com:port\",\n                \"description\": \"Quickly Translate Any Text From UI\",\n                \"should_escape\": false\n            },\n            {\n                \"command\": \"/translate-channel\",\n                \"url\": \"https://your-domain.com:port\",\n                \"description\": \"Automatically Translate Messages Sent to Channel\",\n                \"should_escape\": false\n            }\n        ]\n    },\n    \"oauth_config\": {\n        \"scopes\": {\n            \"user\": [\n                \"chat:write\"\n            ],\n            \"bot\": [\n                \"app_mentions:read\",\n                \"assistant:write\",\n                \"bookmarks:read\",\n                \"channels:history\",\n                \"channels:join\",\n                \"channels:read\",\n                \"chat:write\",\n                \"chat:write.customize\",\n                \"chat:write.public\",\n                \"commands\",\n                \"reactions:read\",\n                \"reactions:write\",\n                \"users:read\",\n                \"users:read.email\"\n            ]\n        }\n    },\n    \"settings\": {\n        \"event_subscriptions\": {\n            \"request_url\": \"https://your-domain.com:port\",\n            \"bot_events\": [\n                \"app_mention\",\n                \"message.channels\"\n            ]\n        },\n        \"interactivity\": {\n            \"is_enabled\": true,\n            \"request_url\": \"https://your-domain.com:port\"\n        },\n        \"org_deploy_enabled\": false,\n        \"socket_mode_enabled\": false,\n        \"token_rotation_enabled\": false\n    }\n}\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fka0un%2Fslackl","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fka0un%2Fslackl","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fka0un%2Fslackl/lists"}