"""Slack utility methods.""" from datetime import date from slack_sdk import WebClient from src import config COLOR_GREEN = "#2EB67D" COLOR_RED = "#DC143C" slack_client = WebClient(token=config.SLACK_BOT_USER_OAUTH_TOKEN) def send_message(title, message, color_code): """ Send message to slack channel """ if len(message) > 4000: send_snippet(title, message) return post_message(title, message, color_code) def post_message(title, message, color_code): result = slack_client.chat_postMessage( username=config.SLACK_APP_USERNAME, channel=config.SLACK_CHANNEL_ID, attachments=[{"fallback": title, "color": color_code, "title": title, "text": message}], ) if not result.validate(): raise Exception(f"Error sending slack message. Response {result.data}") def send_snippet(title, message): """ Upload message to slack channel """ # TODO - custom username is not supported for file uploads. Explore options to set custom username for file uploads. result = slack_client.files_upload_v2( channel=config.SLACK_CHANNEL_ID, content=message, filename=_get_filename(title), title=title, initial_comment=title, ) if not result.validate(): raise Exception(f"Error sending slack message. Response {result.data}") def _get_filename(title): """Generate filename from title.""" sanitized_title = title.replace(" ", "_").replace(":", "").replace("/", "_") date_tag = date.today().strftime("%b-%d-%Y") return f"{sanitized_title}_{date_tag}.txt" def output_success(title): send_message(title, "", COLOR_GREEN) def output_error(title, message): send_message(title, message, COLOR_RED)