Package: slack-time-localization-bot
Slack Time Localization BotDetect temporal expressions in Slack messages (tomorrow at 5 pm) and translate them for readers in other timezones.Who is this for?Many organizations have people around the globe communicating via Slack.
That usually means a lot of different timezones.
So when people try to coordinate their activities a lot of time conversions have to happen when reading messages.
If you read"How about tomorrow at 5 pm?"you might need to do the following:Check the author's timezone.Check your own timezone (you usually know that already).Convert"tomorrow at 5 pm"into your timezone.This is cumbersome and prone to errors. Especially when dealing with summer/winter time.
This bot aims to help people with that.The bot can easily be self-hosted and does not need to be reachable from the internet due to Slack'ssocket mode.How It WorksCurrently, the implementation is centered around Meta'sDuckling library.
It can detect temporal expressions invarious languagesand extract a timestamp from it.
Since Duckling needs to know the language of the text in advance the librarylingua-pyis used to detect the language.
Big kudos to the authors of these libraries. Without them this bot could not have been developed in a feasible amount of time.The Slack bot reads every message it has access to and uses Duckling to extract timestamps.
For every possible reader of the message the bot then compares the timezone of the message author and the reader and translates the timestamp to the reader's timezone.
Finally, the bot will post an ephemeral message below the message with the detected temporal expressions and the timestamps translated to the local timezone.
That ephemeral message might look different for readers if they are not in the same timezone.QuickstartCreate a Slack appwith the following manifest:display_information:name:Time Localizationdescription:Detect temporal expressions in Slack messages ("tomorrow at 5 pm") and translate them for readers in other timezones.background_color:"#240b24"features:app_home:home_tab_enabled:falsemessages_tab_enabled:truemessages_tab_read_only_enabled:falsebot_user:display_name:Time Localizationalways_online:trueoauth_config:scopes:bot:-app_mentions:read-channels:history-chat:write-groups:history-groups:write-im:history-im:write-mpim:history-mpim:write-users:read-channels:read-groups:read-mpim:read-im:readsettings:event_subscriptions:bot_events:-app_mention-channel_history_changed-group_history_changed-im_history_changed-message.channels-message.groups-message.im-message.mpiminteractivity:is_enabled:trueorg_deploy_enabled:falsesocket_mode_enabled:truetoken_rotation_enabled:falseCreate and get the bot token (under "OAuth & Permissions") and app token (under "Basic Information") for your Slack app.pipinstallslack-time-localization-botℹ️ Currently only Linx x86_64 is supportedFinally you can run it withexportSLACK_BOT_TOKEN=xoxb-...exportSLACK_APP_TOKEN=xapp-...exportUSER_CACHE_SIZE=500# number of user profiles to cache in memoryexportUSER_CACHE_TTL=600# number of seconds a user profile will be cached in memoryexportPREFER_24h_INTERPRETATION=true# set to true if 5:00 usually means 5 in the morning and not late afternoonexportDEBUG=false# set to true to enable verbose logging including message contentsslack-time-localization-botYou can now invite the bot to a conversation is slack and the bot will translate temporal expressions for every message.Running TestsInstall poetry and runpoetryinstall
poetryrunpytest./slack_time_localization_bot