You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

84 lines
2.9 KiB
Python

import logging
import json
from slugify import slugify
from flask import Flask, request, make_response, Blueprint
from flask_sqlalchemy import SQLAlchemy
from app.library.ux import SlackInterface
from app.library.gdrive import *
from app.library.slack import verify_slack, client
from app.logging import logging_config
from app.factory import create_app, db
api_bp = Blueprint('api', 'api')
@api_bp.route('/slack/command', methods=['POST'])
def slack_command():
verify_slack(request)
logging.info(request.form)
client.views_open(
trigger_id=request.form.get('trigger_id'),
view=SlackInterface().select_action_modal()
)
return make_response('', 200)
@api_bp.route('/slack/events', methods=['POST'])
def slack_events():
verify_slack(request)
if 'payload' in request.form:
payload = json.loads(request.form.get('payload'))
print('debug: %s \n' % payload)
if 'actions' in payload:
action_id = payload['actions'][0]['action_id']
trigger_id = payload['trigger_id']
if action_id == 'create_new_channel_modal':
client.views_push(
trigger_id=trigger_id,
view=SlackInterface().new_channel_modal(payload['user']['id'])
)
elif action_id == 'generate_documents_modal':
client.views_push(
trigger_id=trigger_id,
view=SlackInterface().generate_docs_modal()
)
elif action_id == 'debug_modal':
print(get_drives())
return make_response('', 200)
elif 'view' in payload:
callback_id = payload['view']['callback_id']
if callback_id == 'submit_new_channel':
users_to_add = list()
values = payload['view']['state']['values']
cx_name = values['customer_name']['customer_name']['value']
cx_slug = slugify(cx_name)
selected_users = values['users_to_add']['users_to_add']['selected_users']
for i in selected_users:
username = client.users_info(user=i)
users_to_add.append(username['user']['name'])
# Create channel
try:
res = client.conversations_create(name=cx_slug)
# Notify da peeps
client.chat_postMessage(
channel=res['channel']['id'],
text=f'sup bros! {" ".join(["@" + i for i in users_to_add])}'
)
return make_response('', 200)
except SlackApiError as e:
logging.error("Error creating conversation: {}".format(e))
return make_response('', 403)
elif callback_id == 'generate_documents':
pass
else:
return make_response('', 404)