def notify_new_comment_slack(instance): instance = clean_instance(instance, Comment) if ContentType.objects.get_for_model( Task) != ContentType.objects.get_for_model( instance.content_object): return task = instance.content_object if not slack_utils.is_task_notification_enabled(task, slugs.EVENT_COMMUNICATION): return task_url = '{}/work/{}/'.format(TUNGA_URL, task.id) slack_msg = '{} | <{}|View on Tunga>'.format(instance.text_body, task_url) extras = dict(author_name=instance.user.display_name) try: if instance.user.avatar_url: extras['author_icon'] = instance.user.avatar_url except: pass slack_utils.send_integration_message(instance.content_object, message=slack_msg, **extras)
def notify_new_task_application_slack(instance): instance = clean_instance(instance, Application) if not slack_utils.is_task_notification_enabled(instance.task, slugs.EVENT_APPLICATION): return application_url = '%s/work/%s/applications/' % (TUNGA_URL, instance.task_id) slack_msg = "New application from %s" % instance.user.short_name attachments = [{ slack_utils.KEY_TITLE: instance.task.summary, slack_utils.KEY_TITLE_LINK: application_url, slack_utils.KEY_TEXT: '%s%s%s%s\n\n<%s|View details on Tunga>' % (truncatewords(convert_to_text(instance.pitch), 100), instance.hours_needed and '\n*Workload:* {} hrs'.format(instance.hours_needed) or '', instance.deliver_at and '\n*Delivery Date:* {}'.format( instance.deliver_at.strftime("%d %b, %Y at %H:%M GMT")) or '', instance.remarks and '\n*Remarks:* {}'.format( truncatewords(convert_to_text(instance.remarks), 100)) or '', application_url), slack_utils.KEY_MRKDWN_IN: [slack_utils.KEY_TEXT], slack_utils.KEY_COLOR: SLACK_ATTACHMENT_COLOR_TUNGA }] slack_utils.send_integration_message(instance.task, message=slack_msg, attachments=attachments)
def notify_task_invitation_response_slack(instance): instance = clean_instance(instance, Participation) if not slack_utils.is_task_notification_enabled(instance.task, slugs.EVENT_APPLICATION): return task_url = '%s/work/%s/' % (TUNGA_URL, instance.task_id) slack_msg = "Task invitation %s by %s %s\n\n<%s|View on Tunga>" % ( instance.status == STATUS_ACCEPTED and 'accepted' or 'rejected', instance.user.short_name, instance.status == STATUS_ACCEPTED and ':smiley: :fireworks:' or ':unamused:', task_url ) slack_utils.send_integration_message(instance.task, message=slack_msg)
def notify_new_comment_slack(instance): instance = clean_instance(instance, Comment) if ContentType.objects.get_for_model(Task) != ContentType.objects.get_for_model(instance.content_object): return task = instance.content_object if not slack_utils.is_task_notification_enabled(task, slugs.EVENT_COMMUNICATION): return task_url = '{}/work/{}/'.format(TUNGA_URL, task.id) slack_msg = '{} | <{}|View on Tunga>'.format(instance.text_body, task_url) extras = dict(author_name=instance.user.display_name) try: if instance.user.avatar_url: extras['author_icon'] = instance.user.avatar_url except: pass slack_utils.send_integration_message(instance.content_object, message=slack_msg, **extras)
def notify_new_task_application_slack(instance, admin=True): instance = clean_instance(instance, Application) if not slack_utils.is_task_notification_enabled(instance.task, slugs.EVENT_APPLICATION): return application_url = '%s/work/%s/applications/' % (TUNGA_URL, instance.task_id) slack_msg = "New application from %s" % instance.user.short_name attachments = [ { slack_utils.KEY_TITLE: instance.task.summary, slack_utils.KEY_TITLE_LINK: application_url, slack_utils.KEY_TEXT: '%s%s%s%s\n\n<%s|View on Tunga>' % (truncatewords(convert_to_text(instance.pitch), 100), instance.hours_needed and '\n*Workload:* {} hrs'.format(instance.hours_needed) or '', instance.deliver_at and '\n*Delivery Date:* {}'.format( instance.deliver_at.strftime("%d %b, %Y") ) or '', instance.remarks and '\n*Remarks:* {}'.format( truncatewords(convert_to_text(instance.remarks), 100) ) or '', application_url), slack_utils.KEY_MRKDWN_IN: [slack_utils.KEY_TEXT], slack_utils.KEY_COLOR: SLACK_ATTACHMENT_COLOR_TUNGA } ] if admin: slack_utils.send_incoming_webhook( SLACK_STAFF_INCOMING_WEBHOOK, { slack_utils.KEY_TEXT: slack_msg, slack_utils.KEY_ATTACHMENTS: attachments, slack_utils.KEY_CHANNEL: SLACK_STAFF_LEADS_CHANNEL } ) else: slack_utils.send_integration_message(instance.task, message=slack_msg, attachments=attachments)
def notify_new_progress_report_slack(instance): instance = clean_instance(instance, ProgressReport) if not slack_utils.is_task_notification_enabled(instance.event.task, slugs.EVENT_PROGRESS): return report_url = '%s/work/%s/event/%s/' % (TUNGA_URL, instance.event.task_id, instance.event_id) slack_msg = "%s submitted a Progress Report | %s" % ( instance.user.display_name, '<{}|View details on Tunga>'.format(report_url)) attachments = [{ slack_utils.KEY_TITLE: instance.event.task.summary, slack_utils.KEY_TITLE_LINK: report_url, slack_utils.KEY_TEXT: '*Status:* %s' '\n*Percentage completed:* %s%s' % (instance.get_status_display(), instance.percentage, '%'), slack_utils.KEY_MRKDWN_IN: [slack_utils.KEY_TEXT], slack_utils.KEY_COLOR: SLACK_ATTACHMENT_COLOR_BLUE }] if instance.accomplished: attachments.append({ slack_utils.KEY_TITLE: 'What has been accomplished since last update?', slack_utils.KEY_TEXT: convert_to_text(instance.accomplished), slack_utils.KEY_MRKDWN_IN: [slack_utils.KEY_TEXT], slack_utils.KEY_COLOR: SLACK_ATTACHMENT_COLOR_GREEN }) if instance.next_steps: attachments.append({ slack_utils.KEY_TITLE: 'What are the next next steps?', slack_utils.KEY_TEXT: convert_to_text(instance.next_steps), slack_utils.KEY_MRKDWN_IN: [slack_utils.KEY_TEXT], slack_utils.KEY_COLOR: SLACK_ATTACHMENT_COLOR_BLUE }) if instance.obstacles: attachments.append({ slack_utils.KEY_TITLE: 'What obstacles are impeding your progress?', slack_utils.KEY_TEXT: convert_to_text(instance.obstacles), slack_utils.KEY_MRKDWN_IN: [slack_utils.KEY_TEXT], slack_utils.KEY_COLOR: SLACK_ATTACHMENT_COLOR_RED }) if instance.remarks: attachments.append({ slack_utils.KEY_TITLE: 'Other remarks or questions', slack_utils.KEY_TEXT: convert_to_text(instance.remarks), slack_utils.KEY_MRKDWN_IN: [slack_utils.KEY_TEXT], slack_utils.KEY_COLOR: SLACK_ATTACHMENT_COLOR_NEUTRAL }) slack_utils.send_integration_message(instance.event.task, message=slack_msg, attachments=attachments)