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
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)
|